blog2geek.com
LLBAvatar de LLB

38 billets | Profil

Recherche Google

ce blog tous
Derniers billets Connexion
Archives

test

05/11/2006

[Lang] [Caml] Introduction

Pourquoi OCaml ?

Je vais essayer d'écrire quelques tickets pour expliquer pourquoi Caml est (presque) le meilleur langage qui existe. :) Ce premier message contient principalement des généralités. Les 7 points que je présentent ci-dessous me semblent juste indispensables pour tout langage décent et généraliste. Malheureusement, il n'y a pas énormément de langages qui respectent ces 7 points.

Par la suite, j'envisage de développer les points spécifiques à Caml (typage fort, typage statique, typage structurel, inférence de types, polymorphisme, évaluation partielle, etc.), en détaillant leur intérêt et leur importance. Par contre, je ne fournis aucune garantie concernant la date du prochain billet.

 

1) Caml, c'est libre. Le compilateur est libre, il est distribué avec ses sources et on peut le modifier. C'est bien, et c'est ce qu'on attend de tout outil en informatique.

2) Caml peut être compilé en binaire natif (comme le fait gcc pour du C), en byte-code exécutable par une VM (de la même façon que Java), en interprété (comme tous les langages de scripts) ou même en interactif (comme n'importe quel Shell). Mine de rien, ça apporte énormément de flexibilité, et ça permet d'utiliser Caml pour de nombreux usages. Peu d'autres langages peuvent se vanter d'avoir ces différents outils, distrisbués directement dans la version officielle. Et bien sûr, ces différents modes sont complètement compatibles entre eux, sans changer la moindre ligne de code (en fait, il existe de très rares exceptions, mais j'en ai jamais rencontré).

3) Caml, c'est vraiment portable. Ça aussi, c'est la moindre des choses que l'on peut exiger d'un langage. Et pourtant ce n'est pas toujours le cas. Caml fonctionne sur tous les systèmes munis d'un compilateur C Ansi. Pour compiler en code natif, on est un peu plus limité (mais tous les OS classiques sont supportés).

4) Caml, c'est rapide. Les performances moyennes sont comparables à ce que l'on obtient en C++. À moins d'avoir une application aux contraintes temps réel importantes, on peut donc utiliser Caml pour la grande majorité des applications.

5) Caml, c'est concis, mais la syntaxe est claire et lisible (à l'inverse de Perl). Quand on compare avec les langages inspirés du C (C++, Pascal, Java ou C#) les différences peuvent être impressionnantes. Le code Caml est presque systématiquement plus court que son équivalent dans ces langages-là. J'ai récemment réécrit une application C++ en Caml : le nombre de lignes a été divisé par 6 (4200 lignes, contre à peine plus de 700), la clarté augmentée (ok, c'est un peu subjectif), sans perte notable de performances. Ce n'est qu'un exemple (c'est le seul que j'ai), mais j'ai lu des articles parlant d'un facteur 10 lors de l'écriture de compilateurs. D'une manière générale, on peut espérer au moins un facteur 2

Plus d'infos : http://www.ffconsultancy.com/free/ray_tracer/languages.html

6) Caml possède un garbage collector des plus performants. Ça fait plus de 50 ans que la gestion automatique de la mémoire existe, et il y a eu de progrès de faits. Contrairement à Java, Caml n'alloue pas d'énormes quantités de mémoire, ni ne fixe de limites arbitraires (qu'il faut régler à la main). Caml utilise un GC qui fonctionne de manière synchrone, sans utiliser de thread. Il n'est lancé que lorsque l'on en a besoin. L'idée qu'un garbage collector est lent est complètement fausse. En fait, des articles ont montré qu'un GC pouvait être plus rapide que de faire des "free" à la main (comme C ou C++). Quelques arguments rapides :

  • un GC possède plus de connaissance qu'un malloc + free : il peut connaître la durée de vie de la variable, au moment de la compilation.
  • le GC peut regrouper les "free" et tout libérer en une passe (oui, la fonction "free" du C est loin d'être en temps constant).
Plus d'infos : http://www.ocaml-tutorial.org/garbage_collection

7) Caml, c'est un langage multi-paradigme. C'est très important : on n'est pas limité par une façon de voir un problème. Certaines algorithmes sont plus simples à écrire en programmation fonctionnelle, d'autres en impératifs, et d'autres encore en objets. Caml permet de faire tout cela de manière naturelle. On utilise donc la manière de faire qui est adaptée au problème, et non celle qui est parfois imposée par le langage (de l'impératif en C, l'objet en Java ou le fonctionnel en Haskell).

> Rédiger un commentaire

22:41 07/12/2006 - inconnu

... superbe langage, en effet ; à lire aussi les deux billets de steve (en anglais) sur le même sujet : http://steve.yegge.googlepages.com/ocaml et http://steve.yegge.googlepages.com/more-ocaml
D'ailleurs, sans vouloir faire de la pub, tout le reste de son blog est très instructif ...

> Rédiger un commentaire