Author: Christian.Queinnec@lip6.fr

## Introduction

La transformation du texte d'un programme vers une forme exécutable nécessite plusieurs étapes de transformation. Le regroupement de celles-ci constitue le processus dit de compilation. Celui-ci produit un arbre de syntaxe abstraite (comme pour l'interprète BASIC, page ??) puis une suite d'instructions pour une machine réelle ou virtuelle. Dans ce dernier cas, il est nécessaire d'utiliser un interprète des instructions de cette machine virtuelle. Dans tous les cas, ce que produit le compilateur doit être relié avec la bibliothèque d'exécution qui est fournie avec la distribution du compilateur et qui peut varier selon les processeurs et les systèmes d'exploitation. Cette bibliothèque d'exécution comprend les fonctions primitives (comme les opérations sur les nombres, l'interface avec le système d'exploitation) et le gestionnaire de mémoire.
Le langage Objective CAML possède deux compilateurs. Le premier est un compilateur vers une machine virtuelle, il produit du code-octet (byte-code). Le deuxième compilateur est un compilateur vers du code natif qui produit des instructions de processeurs réels, comme les machines Intel, Motorola, SPARC, HP-PA, Power-PC et Alpha. Le compilateur de code-octet privilégie la portabilité alors que le compilateur natif augmente la rapidité d'exécution. La boucle d'interaction, vue dans la première partie de cet ouvrage, utilise le compilateur de code-octet : chaque phrase écrite est compilée puis exécutée dans l'environnement des symboles déjà définis lors d'une session d'interaction.