OCaml

De wiki-prog
Aller à : navigation, rechercher

Présentation

(extrait du cours Programmation:OCaml:Bases)

Le langage OCaml (que vous avez découvert en SUP) est un langage fonctionnel, fortement typé, polymorphe et capable de faire de l'inférence de types. Ces un langage qui peut être aussi bien compilé qu'interprété. Bien que pure fonctionnel, il dispose de constructions impératives et d'un système d'objets. Il dispose également d'un sous-langage de modules où les modules sont des entités de premières classes.

Historiquement, Caml[1] était une implantation de la famille ML basé sur une machine abstraite à catégorie. Le passage en version Objective (le O de OCaml) a introduit un modèle de compilation en plusieurs passes permettant de produire du code pour des cibles matérielles et non plus seulement pour une machine abstraite. C'est également avec OCaml que les extensions qui différencie le langage des autres variantes de ML sont arrivées: objets, variants polymorphes, labels, foncteurs ...

OCaml est principalement un langage de recherche, il est développé à l'INRIA[2] et sert de laboratoire d'expérimentation pour les différentes avancées en théorie des langages (typage et sémantique.) Ce caractère expérimental n'en fait pas un bon outil pour le monde industriel, pourtant il est utilisé dans certains domaines principalement lorsque l'on a besoin de fiabilité sans pour autant perdre en performance. Le principal projet utilisant OCaml est Coq[3] un assistant de preuve (historiquement, Caml a été écrit pour écrire Coq) qui est l'un des rares systèmes de démonstration automatique à être reconnu par les mathématiciens. Coq est utilisé (en général) pour valider du logiciel critique, on peut citer par exemple l'implantation de la JavaCard de Schlumberger, certaines parties de TrustedBSD, Orange utilise aussi Coq dans ses centres de recherches pour la validation de protocoles.

Étant libre (avec sa propre licence), OCaml est également utilisé dans quelques logiciels libres, les plus connus sont Unison[4] (un File Synchronizer très puissant), MLDonkey[5] un client pour les réseaux peer-to-peer, Hevea[6] (un convertisseur LaTeX vers HTML), GeneWeb[7] (un outil de généalogie, visiblement très utilisé dans le milieu ... ), le code (en C) de la bibliothèque FFTW[8] est généré par un programme en OCaml, haXe[9] ("web oriented universal language"), Frama-c[10] (un outil d'analyse de programme C) et bien surement bien d'autres que vous pouvez trouver sur la bosse[11].