Caml est un langage de programmation généraliste, conçu pour garantir la sûreté et la fiabilité des programmes. Il est très expressif et néanmoins facile d'apprentissage et d'emploi. Caml se prête à la programmation dans un style fonctionnel, impératif ou orienté objets.
Le langage Caml a été développé à partir de 1985 au sein des équipes Formel, Cristal, puis Gallium de l'INRIA. Caml Light, développé au début des années 1990, est toujours utilisé, en particulier dans l'enseignement. OCaml offre un langage de programmation plus riche et dispose de compilateurs produisant du code natif efficace pour de nombreuses architectures. Une histoire de Caml plus détaillée est disponible.
Points forts
Les deux implémentations de Caml proposent :
- Un système de types puissant, doté de polymorphisme paramétrique et d'inférence de types. Par exemple, le type d'une collection peut être paramétré par le type de ses éléments. Cela permet de définir certaines opérations sur une collection indépendamment du type de ses éléments: le tri d'un tableau en est un exemple. L'inférence de types permet de plus de définir de telles opérations sans devoir expliciter le type de leurs paramètres et résultat.
- Des types de données algébriques définissables par l'utilisateur et le filtrage. De nouveaux types de données algébriques peuvent être définis comme combinaisons d'enregistrements et de sommes. Des fonctions opérant sur ces structures de données peuvent ensuite être définies par filtrage, une forme généralisée de la classique construction switch, qui offre un moyen concis et élégant d'analyser et de nommer les données simultanément.
- Une gestion automatique de la mémoire grâce à un glaneur de cellules incrémental aussi rapide que discret.
- La compilation séparée d'applications autonomes. Des compilateurs portables vers code-octets permettent de créer des applications autonomes à partir de programmes Caml Light ou OCaml. Une « foreign function interface » permet au code Caml d'interopérer avec du code C lorsque cela est nécessaire. Une utilisation interactive de Caml est également possible, grâce à une boucle « lire-évaluer-afficher ».
En outre, OCaml propose :
- Un système de modules sophistiqué, qui permet d'organiser les modules de façon hiérarchique et de paramétrer un module par d'autres modules.
- Une couche orientée objets expressive, qui offre héritage multiple et classes paramétrées.
- Des compilateurs vers code natif efficaces. En plus de son compilateur vers code-octets, OCaml propose un compilateur capable de produire du code machine efficace pour de nombreuses architectures.
Pour plus d'explications, consultez notre aperçu du langage et des outils Caml ou lisez une centaine de lignes de Caml.
Un langage de programmation largement utilisé
Le langage Caml a initialement été utilisé pour développer des applications réalisant des calculs symboliques: prouveurs de théorèmes, compilateurs et interprètes, analyseurs de programmes, etc. Il est maintenant utilisé pour réaliser toutes sortes de logiciels dans de nombreux domaines d'application. Cette variété est illustrée par notre sélection de quelques succès.
Le langage Caml est largement utilisé pour l'enseignement de la programmation. Il est également utilisé dans de nombreux projets universitaires en Europe, en Asie et en Amérique. Plusieurs grosses entreprises développent des applications industrielles significatives en Caml, par exemple Dassault Systèmes, Microsoft, IBM et le CEA (Commissariat à l'Énergie Atomique).
Le consortium Caml offre à nos partenaires industriels et universitaires une structure formelle pour participer au développement, à la maintenance et à l'évolution de Caml. Les membres du consortium bénéficient également de conditions de licence très souples pour le logiciel Caml.
Comment obtenir les compilateurs Caml ?
Les compilateurs Caml développés à l'INRIA sont des logiciels libres (« Open Source »). Ils sont disponibles gratuitement.
- Vous pouvez télécharger les dernières versions à partir de ce site.
- Plusieurs distributions Linux, comme Debian, Fedora et Red Hat, contiennent OCaml.