summaryrefslogtreecommitdiff
path: root/content/Informatique/2013-09-13-ocaml_ppx.rst
diff options
context:
space:
mode:
authorSébastien Dailly <sebastien@chimrod.com>2014-05-09 14:30:46 +0200
committerSébastien Dailly <sebastien@chimrod.com>2014-05-12 21:19:34 +0200
commitb9e22325bb46e2611a73e54a3f0ade31800d1bd9 (patch)
tree60b8aa46b47ec7fd4b8c8d62821aeef0b22be1a5 /content/Informatique/2013-09-13-ocaml_ppx.rst
parent23d7fb3e69d06b718a160c3ded763e6e6fbe3240 (diff)
Moved to pelican 3.3
Diffstat (limited to 'content/Informatique/2013-09-13-ocaml_ppx.rst')
-rw-r--r--content/Informatique/2013-09-13-ocaml_ppx.rst97
1 files changed, 97 insertions, 0 deletions
diff --git a/content/Informatique/2013-09-13-ocaml_ppx.rst b/content/Informatique/2013-09-13-ocaml_ppx.rst
new file mode 100644
index 0000000..b6a0c10
--- /dev/null
+++ b/content/Informatique/2013-09-13-ocaml_ppx.rst
@@ -0,0 +1,97 @@
+.. -*- mode: rst -*-
+.. -*- coding: utf-8 -*-
+
+===========
+ocamlc -ppx
+===========
+
+:date: 2013-09-13
+:tags: ocaml, Programmation
+:summary: |summary|
+:logo: /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