Ceux qui me connaissent savent qu'il existe un langage que j'affectionne particulièrement. Ce langage, c'est
OCaml. Probablement pas le plus connu, ni le plus utilisé, il reste néanmoins un langage très puissant.
OCaml ?? C'est quoi ?OCaml est un langage de programmation
fonctionnel, c'est-à-dire que pour lui les fonctions sont des valeurs comme les autres. On peut utiliser une fonction comme paramètre ou bien comme valeur de retour d'une autre fonction. Ceci est très pratique par exemple lorsqu'on a besoin de faire de la récursion.
OCaml est
typé statiquement, c'est-à-dire qu'il détermine "tout seul" le type de vos variables/valeurs (fonction, entier, double, etc.) en fonction de la manière dont vous les utilisez. Ceci permet de s'assurer de la cohérence de son programme, OCaml refusant de compiler si on utilise un type à la place d'un autre (Il n'y a pas de transtypage à proprement parler en OCaml)
OCaml est un langage
objet (le O veut dire Objective).
OCaml est un langage
impératif.
OCaml s'utilise de trois manières différentes, soit comme langage interprété par une
boucle d'interaction, soit compilé vers du
code octet interprété par une Machine Virtuelle, soit compilé en
code natif exécutable sur sa machine.
OCaml est
français (COCORICO). Créé par Xavier Leroy au sein de l'
INRIA.
À quoi ça sert ?Je laisse la parole à l'INRIA
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, France Télécom, 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.
Je rajoute quelques mots : OCaml est beaucoup utilisé dans les universités françaises pour apprendre l'utilisation des langages fonctionnels, la récursion, etc.
Dans le domaine industriel, c'est son côté très fortement typé assurant des risques de plantage minimum qui plait. En effet lorsqu'un programme OCaml est compilé dans la plupart des cas il tourne et fait ce qu'on attend de lui (je pars du principe que le code et les algos sont bons).
Une des principales faiblesses d'OCaml dans le monde de l'entreprise est qu'il n'est pas normé, en effet la dernière version d'OCaml n'assure pas que les anciens programmes tourneront s'ils sont compilés avec le nouveau compilateur, etc. Bien entendu, cela n'arrive pas, mais rien ne l'empêche et les entreprises sont frileuses.
Microsoft pourrait démocratiser un peu OCaml grâce au F# (mais c'est un autre sujet)Comment ça marche ?Comme dit plus haut, il y a trois façons d'utiliser du code OCaml :
Boucle d'interaction :Tapez 'ocaml' dans votre console (pour les windowsiens (erf) je n'ai jamais testé OCaml sur cet OS donc je vous laisse trouver tout seuls

)
Vous venez d'entrer dans la boucle d'interaction.
Tapez votre code, celui-ci sera interprété et exécuté.
Petit rappel une expression OCaml dans la boucle d'interaction se termine par ';;'.
Le petit message du type
_ : unit = () qui apparaît lorsque vous exécutez le code vous permet de vérifier que vos typages sont corrects (mais nous étudierons tout ça dans un prochain tuto).
Bytecode :Pour compiler vers du bytecode interprétable par une machine virtuelle OCaml (et donc exportable sur n'importe quelle machine (avec une faible perte d'efficacité)) vous devez utiliser la commande suivante :
ocamlc -o monProg.exe monProg.mlL'utilisation de librairies supplémentaires ou la compilation de code répartie sur plusieurs fichiers sera vue ultérieurement.
Natif :Pour obtenir l'exécutable le plus rapide, mais non-exportable il faut utiliser le compilateur ocamlopt (opt pour optimisé) :
ocamlopt -o monProg.exe monProg.mlVous remarquerez que des fichiers .mli (pour le bytecode) et .cmi (pour le code natif) sont générés lors de la compilation. Encore une fois nous étudierons tout cela dans un prochain tuto.
Un exemple commenté : le "hello world"(ocaml):
print_string "Hello World\n";;
ou
(ocaml):
print_string "Hello World";;
print_newline();;
ou
(ocaml):
print_endline "Hello World";;
ou
(ocaml):
open Printf;;
printf "Helo World\n";;
Oui ça fait beaucoup de façons de faire la même chose.
On va étudier dans le détail toutes ces possibilités (et il en existe d'autres

).
_______________________________
Première méthode :
(ocaml):
print_string "Hello World\n";;
Très simple, on voit qu'OCaml gère directement l'affichage de texte sur la sortie standard (plus d'explication sur les systèmes d'entrée/sortie un jour peut-être)
print_string est une fonction qui prend une
string et ne retourne rien (en OCaml on dit
unit, c'est un peu plus compliqué, mais on verra tout ça plus tard)
on peut voir que le retour chariot est le même que partout (ou presque) '\n'
Comme dit précédemment, la fin de la commande est matérialisée par un double ; faites-y bien attention car le ; simple existe aussi en OCaml mais n'a pas la même fonction.
Vous noterez aussi que les arguments des fonctions sont passés directement à la suite de la fonction sans parenthèsages, etc.
Seconde méthode :
(ocaml):
print_string "Hello World";;
print_newline();;
Ici, rien d'extraordinaire on n'écrit pas le retour chariot dans la string, mais on utilise la fonction
print_newline pour le faire.
Troisième méthode :
(ocaml):
print_endline "Hello World";;
Toujours pareil : ici
print_endline force le retour chariot après l'affichage de la string passée en paramètre.
Quatrième méthode :
(ocaml):
open Printf;;
printf "Hello World\n";;
Ici c'est plus intéressant, le
open Printf permet d'ouvrir le module
Printf (c'est un peu le
#include du C).
Printf est un module intégré à OCaml donc vous n'avez pas à vous soucier de son emplacement.
Une fois le module ouvert, on a accès à toutes les fonctions qu'il contient. Ce qui nous permet donc d'utiliser la fonction
printf qui prend une string en argument et l'affiche sur la sortie standard.
L'utilisation des modules en OCaml peut se faire de deux manières :
- soit avec un open comme dans l'exemple présenté ici
- soit en ajoutant comme préfixe le nom du module à la fonction que l'on souhaite utiliser.
Par exemple ici on aurait pu obtenir le même résultat en écrivant :
(ocaml):
Printf.printf "Hello World\n";;
SynthèseQu'a-t-on vu aujourd'hui ?
- ce qu'est le langage OCaml (brièvement)
- dans quels domaines il est utilisé
- l'utilisation impérative simple de ce langage
La prochaine fois on pourrait jouer avec des fichiers ou afficher de jolis dessins, le tout en fonctionnel récursif.
Dites-moi si vous préférez les fichiers ou le graphisme.

Ou si vous me trouvez trop ambitieux pour un tuto 2....
Voilà, c'est tout pour aujourd'hui.
Si ce tuto vous plait, si vous avez un problème ou si vous souhaitez une suite n'hésitez pas à en faire part ici.
Pour finir une phrase de mon prof d'aujourd'hui concernant la vitesse d'exécution :
"Le C c'est plus rapide...
... pour faire des conneries.
Le Caml c'est plus lent...
... pour faire bien"
© E. Chailloux
Pour installer OCaml :
http://caml.inria.fr/download.fr.htmlTuto2