dimanche 15 février 2009

Langages en construction

Il existe littéralement plusieurs centaines de langages de programmation. Et malgré ce, de nouveaux langages continue d'apparaître chaque année, développés par de grosses boîtes ou par quelques passionnés. Je n'ai pas vraiment envie de trop discuter de l'intérêt de développer de nouveaux langages aujourd'hui, simplement :


  • Oui, il existe déjà de nombreux langages de très bonne qualité, spécialisés ou non, largement employés ou non, dans la plupart des paradigmes connus.
  • Oui, la qualité de langages récents comme Io, ou le succès d'autres comme Lua justifie de continuer à en développer d'autres.
  • Non, un langage n'est pas "indémodable" ou éternel : le Fortran et le Cobol, notamment, doivent être progressivement abandonnés et remplacés.
Par ailleurs, quand on aime la programmation, le processus de création d'un langage, ses étapes de développements, les choix faits sur ses caractéristiques, son (ou ses) paradigme(s), son implémentation, etc... sont particulièrement intéressants.

Je vous propose donc de jeter un coup d'oeil à 4 langages actuellement en construction :


Cat

Cat est un langage interprété de haut niveau, "stack-oriented", comme le Forth, et fonctionnel. Des 4 que je vous propose dans cet article, c'est probablement le plus avancé au niveau de son développement, celui-ci ayant débuté en 2006, malgré la présence de bugs conséquents (flottants et récursivité notamment).

Les langages de ce type, à pile, sont relativement peu nombreux : Forth, Joy, Factor, PostScript et quelques assembleurs en gros... Cat ne rentre donc pas dans une niche trop saturée. Ce paradigme est assez intéressant et original... et déroutant : il utilise la notation post-fixée (on en parlait ici) qui reste plutôt rare, et la manipulation de la pile demande un certain temps d'adaptation. Cela dit, pris comme un jeu, c'est assez amusant.
Le côté fonctionnel du langage est dû au fait que toute instruction correspond à une fonction appliquée à la pile. Le langage supporte aussi une forme de macro.
Petit plus, le typage est statique et inféré (comme en OCaml par exemple).

La version actuelle de Cat est implémenté en C#. Oui, je sais, berk. Cela dit, d'une il compile sous Mono et donc est utilisable partout (théoriquement...), et d'autre part, une machine virtuelle en C++ est actuellement en cours de développement par Christopher Diggins.

Vous pouvez aller jouer avec, directement en ligne sans rien installer, grâce à cet interpréteur online (Allez y je vous dis, c'est rigolo ! Par contre, tout le langage n'est pas dispo dessus...).

Exemple de la factorielle naïve (récursive) :





Ioke

De ces 4, Ioke est peut-être le plus "sérieux" et le plus suceptible de connaître le succès auprès des programmeurs amateurs et même professionnels. Ioke (prononcé "Ayoki", comme "Io" en anglais et "Loki", le dieu scandinave) est développé par Ola Bini qui travaille également sur JRuby (implémentation de Ruby sur la JVM), entre autres.
Ioke est un langage dynamique, orienté objet, à prototypes, tournant sur la JVM, et inspiré par Io, Smalltalk, LISP et Ruby. Sa première version est sortie il y a seulement quelques mois.

Bien que je ne l'ai pas testé, je trouve Ioke très prometteur pour plusieurs raisons. D'abord parce qu'il s'inspire de très bons langages et que son paradigme (OO à prototype) est très intéressant. Ensuite, qu'on le veuille ou non, parce que le fait qu'il tourne sur la machine virtuelle Java lui ouvre les portes du monde professionnel : ce n'est pas une garantie d'utilisation par les entreprises, mais ça augmente significativement ses chances. Il contient une foule de concepts/features intéressantes : syntaxe, blocks, macros, "lecros", aspects, introspection... La documentation est particulièrement riche et bien faite.

Ola Bini, son développeur principal, est un blogger assidu et un passionné des langages de programmation : il est possible de suivre les étapes de réflexion et de construction de Ioke, et bien d'autres choses sur son blog. C'est assez enrichissant.

Exemple de "99 Bottles" (oui, on dirait vraiment du Io...) :




Potion

L'un des derniers projets de Why's the Lucky Stiff s'appelle Potion. Comme d'habitude avec ce hacker, il s'agit d'un petit OVNI. Potion est un tout petit langage, qui se veut rapide, orienté "objet et mixin".

Sa machine virtuelle fait à peine 4000 lignes de code, en C. Il faut croire que c'est une obsession pour _Why de réduire au maximum la taille de tout code : Shoes pour la GUI et Camping comme micro-framework web en Ruby, ou Yown en Io. Une bonne partie de Potion est inspiré par Lua.

La syntaxe est assez particulière, et le langage s'appuie sur l'approche suivante :

  • Tout est un objet
  • Même les mixins sont des objets
  • Et bien sûr, les fermetures sont des objets
  • CEPENDANT, les objets ne sont pas tout : ils ne sont rien sans les mixins.
Les objets n'ont pas de classe : les données (attributs) sont au niveau de l'objet lui-même, et les méthodes sont conservées dans des mixins. Tout objet possède par contre des mixins.
Je n'ai pas encore testé Potion, n'ayant pas réussi à le compiler sous Windows. On va le tenter prochainement sous 'nix, ça a l'air vraiment marrant...

Exemple de Fibonacci récursif :



Tinyrb

Plus qu'un langage à proprement parler, Tinyrb est une toute nouvelle machine virtuelle pour le langage Ruby. Elle s'annonce comme la plus petite VM du langage, mais aussi comme étant plus que raisonnablement rapide. Il s'agit pour l'instant d'une version "allégée" du langage Ruby : tout code Tinyrb tournera avec un autre inerpréteur Ruby, mais l'inverse n'est pas vrai (il manque notamment un certain nombre de classes du core standard de Ruby) .

Marc-André Cournoyer a lancé ce projet en s'inspirant de Lua (encore !), Potion (tiens donc !) et Tinypy. Ici, comme pour Lua, l'aspect intéressant, c'est le côté portable et embarquable. C'est un côté de plus en plus présent dans les langages récents (Lua, Io...)

Comme pour Potion, je n'ai pas encore réussi à compiler la VM sous Window$ : à retenter aussi sous Linux... Pas de code ici, c'est du Ruby, pas plus (mais un peu moins).

~~~~

Voilà, n'hésitez pas à jeter un coup d'oeil à ces "petits" projets, et bon hack !

NOTE : les images de cet article sont libres/dans le domaine public et liées aux projets associés, hormis celle employée pour Potion , qui est l'avatar actuel de Why's the Lucky Stiff, et qui lui appartient.

2 commentaires:

Lefty a dit…

sans déconner!


euh, je préfère la musique, j'ai l'impression d'y comprendre quelque chose, au moins....

Sobe a dit…

Ah bah c'est sûr, vaut mieux pas que tu lises ce genre de post si tu veux éviter l'entorse de l'hémisphère droit ^^