OCaml : le Python français.

Florian Golgevit
4 min readMay 20, 2018

Marre de Python et de sa lenteur d’exécution ? Envie d’élargir vos horizons ? Venez découvrir OCaml, le langage favori des CPGE scientifiques françaises, approuvé par Facebook !

Logo d’OCaml. Par Amir Chaudhry, CC BY 3.0, Wikipédia.

OCaml (créé en 1996) est une implémentation avancée du langage Caml (créé en 1987), développé et principalement maintenu par INRIA (Institut national de recherche en informatique et en automatique). C’est un langage multi-paradigme, implémentant la programmation fonctionnelle, autour de laquelle il a été construit, impérative, et orientée objet. Ceci étant dit, il est souvent utilisé dans un but pédagogique, notamment dans les CPGE françaises, et est donc relativement facile à aborder, pour peu qu’on ait envie de découvrir une nouvelle façon de coder.

Petit rafraîchissement

Vous le savez sûrement, les langages de programmation peuvent être séparés en différentes catégories, selon leur fonctionnement. On dénote ainsi principalement :

  • les langages impératifs (ou procéduraux), comme le C ou le Pascal, qui fonctionnent en modifiant des états de la mémoire : les variables, à l’aide d’instructions exécutées séquentiellement ;
  • les langages déclaratifs, pouvant être séparés selon 2 approches (logiques ou fonctionnelles), et qui permettent de décrire les relations qui existe entre les données et les résultats.

Pour les langages fonctionnels, les relations présentes dans les langages déclaratifs sont assimilées à des fonctions. Ainsi, le traitement d’un programme fonctionnel consistera en une combinaison de fonctions intermédiaires.

Un langage fonctionnel …

OCaml (prononcez ocamel) est donc considéré majoritairement comme fonctionnel. Un programme OCaml sera un ensemble de définitions, suivi d’un calcul qui utilise ces définitions, contrairement à un langage impératif constitué d’une suite d’instructions exécutées dans l’ordre.

L’avis d’un étudiant sur OCaml comparé au C. Par Mogmi, CC BY-NC 2.5, Hmm-la-bd.

On retrouve ainsi dans OCaml l’ensemble des fonctionnalités présentes dans d’autres langages fonctionnels plus utilisés (tel que Python), comme les classes, les objets, les fonctions, ou encore la gestion automatique de la mémoire, permettant la présence d’un ramasse-miettes simplifiant grandement la tâche des programmeurs.

Exemple simple d’un compteur de feuilles d’un arbre binaire en OCaml :

# let rec count_leaves = function
| Empty -> 0
| Node(_, Empty, Empty) -> 1
| Node(_, l, r) -> count_leaves l + count_leaves r;;

… mais surtout généraliste !

Cependant en pratique, OCaml supporte de nombreux styles de programmation, dont la programmation impérative (basée sur la notion d’instructions), la programmation orientée objet (basée sur la manipulation d’objets), et la programmation modulaire (basée sur la décomposition des programmes en modules). Cela en fait un puissant langage entrant dans la catégorie des langages multi-paradigme, permettant ainsi une très grande liberté d’expressions aux programmeurs.

D’autre part, ces concepts sont intégrés dans un système de types : OCaml impose à chaque expression du langage d’appartenir à un seul type déterminé, sans aucune ambiguïté possible. La déclaration de typage des expressions n’est pas requise, et toute incompatibilité de type est détectée et signalée comme erreur, ce qui en fait un langage dit fortement typé. Cela, combiné à une absence de manipulation explicite de la mémoire (d’où la présence du ramasse-miette) font d’OCaml un langage très sûr.

OCaml étant aussi un langage compilé, d’assez haut niveau, assez portable, réputé très performant, et dont l’implémentation est libre, il a un panel de possibilités impressionnant, faisant de lui en premier lieu un langage généraliste.

Python vs OCaml

Après tout ce que je vous ai dit, venons-en aux faits, ceux qui vous intéressent et vous ont poussés à venir lire cet article : pourquoi OCaml et non Python ?

1. Une transition en douceur

OCaml, tout comme Python, est un langage dit « user friendly », dont la syntaxe est très simple comprendre et à prendre en main.

Le classique Hello World de Python et celui d’OCaml :

  • Python : print("Hello World !")
  • OCaml : print_endline "Hello World !"

On peut aussi noter qu’un programme OCaml nécessite légèrement moins de lignes de code qu’un programme Python sur de gros codes.

Nombre de lignes de code pour un même programme volumineux en Python et OCaml. Par Thomas Leonard, GNU LGPL 2.1, Roscidus.

De plus, OCaml supportant la programmation orientée objet, la conversion d’un programme Python en OCaml est grandement simplifiée.

2. La vitesse

Python a pour notoriété publique d’être un langage lent à l’exécution, obligeant les programmeurs à toujours en tenir compte. Cela n’est pas le cas en OCaml : ses performances pour l’exécution d’un programme complexe de plus de 30 000 lignes de code en attestent, OCaml étant en moyenne 10 fois plus rapide que Python.

Temps d’exécution en exécutant différentes opérations d’un même programme en Python et en OCaml. Thomas Leonard, GNU LGPL 2.1, Roscidus.

Lors de calculs purs (comme des petites boucles additionnant des entiers), OCaml est même plus de 100 fois plus rapide que Python.

3. Une multitude d’autres bénéfices

OCaml possède de nombreux points forts, comme la stabilité de son API, un excellent correcteur de types, une grande fiabilité, un filtrage par motif exhaustif, des variants polymorphiques (puissante particularité des types d’OCaml), ou encore des types abstraits, donnant efficacement le change à Python. Enfin comparé à Python, un code OCaml sera beaucoup plus modulable une fois terminé, permettant ainsi une maintenance aisée et des possibles évolutions futures de celui-ci bien plus intéressantes qu’en Python.

Alors, qu’attendez-vous ?

--

--