summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSébastien Dailly <sebastien@chimrod.com>2013-09-13 23:09:00 +0200
committerSébastien Dailly <sebastien@chimrod.com>2013-09-17 21:24:55 +0200
commitf0833a629dce15f20a1a9a330a0e413beb5a8158 (patch)
tree0e4bd1ea7cd3e87252c07fc3f1e179dc58e8222b
parent131bc140ba021016fa81aa5eb54f5bfbbfd4b7e8 (diff)
New article on the ppx option in Ocaml 4.01
-rw-r--r--content/Informatique/fonctionnel.rst4
-rw-r--r--content/Informatique/ocaml_ppx.rst97
-rw-r--r--content/images/ocaml/recursion.jpgbin0 -> 22245 bytes
-rw-r--r--content/images/ocaml/recursion_75.jpgbin0 -> 4729 bytes
4 files changed, 99 insertions, 2 deletions
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
--- /dev/null
+++ b/content/images/ocaml/recursion.jpg
Binary files differ
diff --git a/content/images/ocaml/recursion_75.jpg b/content/images/ocaml/recursion_75.jpg
new file mode 100644
index 0000000..8c0f14f
--- /dev/null
+++ b/content/images/ocaml/recursion_75.jpg
Binary files differ