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 :
-
du code-octet (byte-code) destiné à
être exécuté par une machine virtuelle ;
- 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.