Écrire un DSL en Ruby facilement avec Docile
Je suis en train de lire «A new kind of science» de Stephen Wolfram et ça me donne envie de me replonger dans les automates cellulaires. Le jeu de la vie est sûrement le programme que j’ai écrit le plus souvent, mais curieusement jamais en Ruby.
J’ai commencé à écrire un framework pour automate cellulaire, qui n’aboutira peut-être pas faute de temps. Quoiqu’il en soit, je voudrais que ce framework soit utilisable par des non-développeurs, d’où le recours à un DSL (Domain Specific Language). Et pour développer mon DSL, je n’ai pas trouver plus simple que la gem docile.
Voici le DSL que je voudrais:
Docile encourage l’utilisation du design pattern builder. Alors allons-y pour une classe builder qui va contenir les valeurs par défaut de notre futur Automaton:
Il nous faut maintenant une classe Automaton:
Et pour finir, on demande à Docile d’évaluer notre DSL puis on charge le
fichier my_automaton.rb
. Il ne reste plus qu’à lancer la machine:
La boucle est bouclée. Vous remarquerez que la méthode automaton
définie
dans main.rb
ci-dessus est celle qui est utilisée dans le DSL
(my_automaton.rb
).
$ ruby ./main.rb my_automaton.rb
Test Automaton running
Et voilà. C’est presque trop facile d’écrire un DSL avec Docile…
À demain.