Author: Christian.Queinnec@lip6.fr

## Texte

Bien que l'informatique soit devenue une activité industrielle, à bien des égards le succès d'un langage de programmation est affaire de subjectivité. Si << le coeur a ses raisons que la raison ignore >> alors Objective CAML est un choix raisonnable pour un amant de coeur.
Il repose sur des fondements théoriques solides tout en disposant d'un large spectre de paradigmes de programmation. Si on ajoute la simplicité de la prise de contact avec le langage que permet la boucle d'interaction, cela en fait un langage parfaitement adapté à l'enseignement.

- Les types structurés et les types abstraits permettent d'aborder les problèmes d'algorithmique et leurs structures de données complexes tout en s'abstrayant des problèmes de représentation mémoire et d'allocation.
- Le modèle théorique fonctionnel sous-jacent au langage fournit une introduction précise aux notions d'évaluation et de typage dont << l'honnête programmeur >> se doit d'être instruit.
- Les différents modèles de programmation peuvent être abordés indépendamment les uns des autres : de la structuration modulaire ou par objets des logiciels à la programmation système de bas niveau, il est peu de domaines où Objective CAML ne soit pas pertinent.
- Son adéquation avec la programmation symbolique en fait un excellent support pour des enseignements théoriques comme la compilation ou l'intelligence artificielle.

Pour ces qualités, Objective CAML est souvent utilisé comme support d'enseignement à l'initiation à l'informatique aussi bien que pour des cours de programmation avancée qui explicitent le lien entre le haut niveau d'abstraction du langage et son exécution. Nombre d'enseignants ont été et restent séduits par l'intérêt pédagogique d'Objective CAML et, par voie de conséquence, nombre d'informaticiens y ont été formés.
Un des premiers sujets de satisfaction du développement en Objective CAML est son confort d'utilisation. Le compilateur se charge rapidement et son inférence statique de types ne laisse rien échapper. D'autres analyses statiques du code donnent de précieux indices d'anomalies sinon d'erreurs pour le programmeur : les filtrages incomplets sont signalés, l'application partielle d'une fonction dans une séquence est détectée, etc. À ce premier sujet de satisfaction s'en ajoute un second : le compilateur engendre très rapidement un code efficace.
Performance du compilateur, concision d'expression de la programmation fonctionnelle, qualité et diversité des bibliothèques font d'Objective CAML un langage parfaitement adapté aux besoins du << logiciel jetable >>. Mais ce serait le réduire que de le cantonner à ce seul domaine d'application. Pour ces mêmes raisons, Objective CAML est un outil précieux d'expérimentation et de prototypage d'applications. De plus, lorsqu'aux traits déjà cités viennent s'ajouter les mécanismes de structuration des modules et des objets, le langage ouvre la voie à la conception et au développement d'applications abouties.
Enfin, Objective CAML et sa communauté de développeurs forment un milieu extrêmement réactif à l'innovation dans le domaine de la programmation. La libre disponibilité et la diffusion des sources du langage offrent un terrain d'expérimentation ouvert aux concepts émergeants.
L'apprentissage d'Objective CAML réclame un certain effort au programmeur familier d'autres langages. Et ce, alors même que l'objet de son étude est en évolution constante. Nous espérons que sans masquer la complexité de certains concepts, cet ouvrage facilitera cette phase d'apprentissage et pourra ainsi accélérer le retour sur investissement du développeur d'applications en Objective CAML.