Author: Christian.Queinnec@lip6.fr

## Présentation de la partie II

L'ensemble des éléments de l'environnement que nous décrivons est inclus dans la distribution du langage. On y trouve les différents compilateurs, de nombreuses bibliothèques, des outils d'analyse de programmes, des outils pour les analyses lexicale et syntaxique et une interface avec le langage C.
Objective CAML est un langage compilé qui offre deux types de génération de code :

1. du code-octet (byte-code) destiné à être exécuté par une machine virtuelle ;
2. du code natif destiné à être exécuté directement par un micro-processeur.

La boucle d'interaction d'Objective CAML utilise du code-octet pour exécuter les phrases qui lui sont proposées. Elle constitue le premier outil d'aide au développement en offrant la possibilité de typer, compiler et tester rapidement les définitions de fonctions. De plus, elle offre un mécanisme de trace visualisant les valeurs des arguments d'appel et les valeurs de retour des fonctions.
D'autres outils usuels de développement sont également fournis avec la distribution : calcul de dépendances entre fichiers, mise au point (debug) et analyse (profiling). L'outil de mise au point permet l'exécution pas à pas des programmes, l'utilisation de points d'arrêt et l'inspection de valeurs. L'outil d'analyse donne des mesures sur le nombre d'appels ou le temps passé dans telle fonction ou telle partie de code. Ces deux outils ne sont disponibles que pour les plate-formes Unix.
La richesse d'un langage provient de son noyau mais aussi des bibliothèques, ensemble de programmes réutilisables, qui viennent avec lui. Objective CAML n'échappe pas à la règle. Nous avons déjà largement évoqué la bibliothèque graphique venant avec la distribution. Il en est bien d'autres que nous décrirons. Les bibliothèques apportent de nouvelles fonctionnalités au langage, mais elles ne sont pas sans contre-partie. En particulier, elles peuvent présenter une difficulté vis-à-vis de la discipline des types.
Quelque riche que soit l'ensemble des bibliothèques d'un langage, il lui est toujours nécessaire de pouvoir communiquer avec un autre langage. La distribution d'Objective CAML contient une interface avec le langage C qui permet d'appeler des fonctions C à partir d'Objective CAML ou d'être appelé par celui-ci. La difficulté de compréhension et de mise en oeuvre de cette interface tient à ce que les modèles mémoire d'Objective CAML et C sont différents. La raison essentielle de cette différence est qu'un programme Objective CAML intègre un mécanisme de récupération automatique de mémoire.
Aussi bien C qu'Objective CAML permettent l'allocation dynamique de mémoire donc une gestion fine de l'espace selon les besoins d'un programme. Cela n'a de sens que si l'on sait récupérer l'espace inutilisé pour un autre usage au cours d'une exécution. La récupération automatique décharge le programmeur de la gestion de la récupération, source fréquente d'erreurs à l'exécution. Ce trait constitue un des éléments de la sûreté du langage Objective CAML.
Cependant, ce mécanisme a une incidence sur la représentation des données. Aussi, pour utiliser correctement la communication entre le monde Objective CAML et le monde C, il est indispensable de connaître les principes guidant la gestion mémoire.

Le chapitre 7 présente les éléments de base du système Objective CAML : machine virtuelle, compilateurs et bibliothèque d'exécution. Il décrit les différents modes de compilation du langage et compare la portabilité à l'efficacité.
Le chapitre 8 donne une vision globale de l'ensemble des types, fonctions et exceptions prédéfinis venant avec la distribution du système. Il ne remplace pas la lecture du manuel de référence ([LRVD99]) qui décrit très bien ces bibliothèques. Par contre il insiste sur les nouvelles fonctionalités apportées par certaines d'entres elles. En particulier on peut citer le formatage de sortie, la persistance des valeurs et l'interface avec le système d'exploitation.
Le chapitre 9 présente différentes méthodes de récupération automatique de mémoire pour ensuite décrire le mécanisme utilisé par Objective CAML.
Le chapitre 10 présente les outils de mise au point des programmes Objective CAML. Bien qu'encore assez frustes par certains côtés, ces outils permettent bien souvent de comprendre les dysfonctionnements d'un programme.
Le chapitre 11 décrit les différentes approches des problèmes d'analyse lexicale et syntaxique du langage : bibliothèque de gestion des expressions régulières, outils `ocamlex` et `ocamlyacc`, mais aussi utilisation des flots (streams).
Le chapitre 12 décrit l'interface avec le langage C. Il n'est plus possible pour un langage d'être complètement isolé des autres langages. Cette interface autorise un programme Objective CAML à appeler une fonction C, en lui passant des valeurs du monde Objective CAML, et réciproquement. La principale difficulté de cette interface provient du modèle mémoire. Pour cela il est recommandé de lire le chapitre 9 auparavant.
Le chapitre 13 propose deux applications : une bibliothèque graphique enrichie reposant sur un modèle hiérarchique de composants graphiques inspiré de l'AWT2 JAVA ; un programme classique de recherche de chemin de moindre coût dans un graphe utilisant notre nouvelle interface graphique ainsi qu'un mécanisme de mémoire-cache.