From f0833a629dce15f20a1a9a330a0e413beb5a8158 Mon Sep 17 00:00:00 2001 From: Sébastien Dailly Date: Fri, 13 Sep 2013 23:09:00 +0200 Subject: New article on the ppx option in Ocaml 4.01 --- content/Informatique/fonctionnel.rst | 4 +- content/Informatique/ocaml_ppx.rst | 97 ++++++++++++++++++++++++++++++++++ content/images/ocaml/recursion.jpg | Bin 0 -> 22245 bytes content/images/ocaml/recursion_75.jpg | Bin 0 -> 4729 bytes 4 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 content/Informatique/ocaml_ppx.rst create mode 100644 content/images/ocaml/recursion.jpg create mode 100644 content/images/ocaml/recursion_75.jpg diff --git a/content/Informatique/fonctionnel.rst b/content/Informatique/fonctionnel.rst index 292d8eb..06d75d0 100644 --- a/content/Informatique/fonctionnel.rst +++ b/content/Informatique/fonctionnel.rst @@ -1,6 +1,6 @@ -Programmation fonctionnelle (I) -############################### +Programmation fonctionnelle +########################### :date: 2012-11-09 :tags: Programmation diff --git a/content/Informatique/ocaml_ppx.rst b/content/Informatique/ocaml_ppx.rst new file mode 100644 index 0000000..84e8a5d --- /dev/null +++ b/content/Informatique/ocaml_ppx.rst @@ -0,0 +1,97 @@ +.. -*- mode: rst -*- +.. -*- coding: utf-8 -*- + +=========== +ocamlc -ppx +=========== + +:date: 2013-09-13 +:tags: ocaml, Programmation +:summary: |summary| +:logo: static/images/ocaml/recursion_75.jpg + +.. figure:: |filename|/images/ocaml/recursion.jpg + :figwidth: 180 + :figclass: floatright + :alt: Recursivité + + Image : `Gadl`_ (creativecommons_) + +.. _Gadl: http://www.flickr.com/photos/gadl/279433682/ +.. _creativecommons: http://creativecommons.org/licenses/by-sa/2.0/deed.fr + +|summary| + +.. |summary| replace:: + Les langages homoïconiques ont quelque chose de fascinant : pouvoir + représenter le programme sous la forme d'une donnée capable d'être traitée + par le programme nous entraîne dans un jeu de mirroirs qui se réfléchissent + eux-même, et me donne un peu le vertige… La nouvelle version d'OCaml + présente une option de préprocessing qui s'en rapproche. + +Selon `wikipédia`_ un langage homoïconique à la particularité de pouvoir être +représenté comme une donnée du programme. Cela permet de transformer le langage +(lui donner de nouvelles fonctionalités) en utilisant un autre programme fait +dans le même langage. Un programme lisp peut ainsi se modifier durant son +exécution, de la même manière, un fichier xsl peut s'appliquer sur un autre +fichier xsl (puisque xslt_ est décrit sous la forme de fichiers xml)… + +.. _wikipédia: https://fr.wikipedia.org/wiki/Homoiconicit%C3%A9 +.. _xslt: https://fr.wikipedia.org/wiki/Extended_stylesheet_language_transformations + +OCaml 4.01 est sorti ! +====================== + +OCaml vient de sortir en version 4.01, et présente dans ses nouveautés, une +nouvelle option qui s'active à la compilation : + + + :-ppx command: After parsing, pipe the abstract syntax tree through the + preprocessor command. The format of the input and ouput + of the preprocessor are not yet documented. + +Qu'est-ce que cela signifie ? Qu'après avoir interprété le programme source et +construit l'arbre syntaxique du langage, le compilateur appelle un autre +programme en lui transmettant cette représentation en paramètre. À cette étape, +le compilateur a juste vérifié que la syntaxe était `valide`, mais il n'a pas +encore vérifié le programme. + +Le programme appellé peut alors modifier la représentation du code source, et +**doit** donner en retour un programme OCaml valide (si l'on veut que le code +compile…). Cela permet d'étendre la syntaxe du langage en se basant sur des +éléments de syntaxe valides pour mettre en place un `langage dédié`_ (par +exemple). Est-ce que cela fait d'OCaml un langage homoïconique ? Non, car cela +n'est prévu pour être le cœur d'OCaml, mais cela lui donne un aspect +homoïconique et de nouvelles perspectives dans l'évolution du langage. + +Le principal avantage vient du fait que le langage OCaml est TRÈS fortement +typé, et refusera de compiler si une erreur s'est glissée dans la cohérence du +programme. On peut donc modifier le programme sans crainte de provoquer une +erreur dans la structure de celui-ci. + +.. _langage dédié: https://fr.wikipedia.org/wiki/Domain-specific_programming_language + +Des exemples +============ + +OMonad_ est une extension qui donne ainsi à OCaml la possibilité de traiter les +monades selon la syntaxe issue d'Haskell. + +.. _OMonad: http://danmey.org/omonad.html + +`ppx tools`_ est une librairie qui permet de construire sa propre extension, +écrite par Alain Frish, l'auteur à qui l'on doit cette nouvelle option. Il +décrit son besoin et son usage sur son blog_. + +.. _ppx tools: https://github.com/alainfrisch/ppx_tools +.. _blog: http://www.lexifi.com/blog/syntax-extensions-without-camlp4-lets-do-it + +Certe, il était déjà possible de faire des choses `très amusantes`_ avant ça, +mais cela restait encore expérimental. Maintenant, cela devient beaucoup plus +accessible. Je ne connais pas beaucoup de langages qui poussent aussi loin la +possibilité de modifier le compilateur pour l'adapter à ses besoins, et rien +que pour ça, je trouve ça fun ! |:-)| + +.. _très amusantes: https://bitbucket.org/camlspotter/compiler-libs-hack + +.. |:-)| image:: |filename|/images/icons/face-smile.png diff --git a/content/images/ocaml/recursion.jpg b/content/images/ocaml/recursion.jpg new file mode 100644 index 0000000..cb6157d Binary files /dev/null and b/content/images/ocaml/recursion.jpg differ diff --git a/content/images/ocaml/recursion_75.jpg b/content/images/ocaml/recursion_75.jpg new file mode 100644 index 0000000..8c0f14f Binary files /dev/null and b/content/images/ocaml/recursion_75.jpg differ -- cgit v1.2.3