362 Programmer en Erlang
Présentation du problème
Erlang fournit un certain nombre de mécanismes pour travailler avec plusieurs lan-
gages: un modèle de haut niveau reposant sur des nœuds Erlang distribués, un modèle
de plus bas niveau permettant de communiquer avec un programme externe par un port
et un mécanisme permettant de lier des programmes – les pilotes liés – dans la machine
virtuelle elle-même.
Le modèle de programmation distribuée d’Erlang offre une solution à la fois simple et
souple au problème du fonctionnement des autres langages avec Erlang: les programmes
écrits dans d’autres langages s’exécutent dans d’autres nœuds sur la même machine ou
sur des machines différentes et apparaissent comme des nœuds Erlang distribués qui
envoient et reçoivent des messages. Ces nœuds offrent un environnement dans lequel les
programmes externes peuvent s’exécuter, mais également communiquer avec des nœuds
Erlang. Pour que cet échange avec un programme écrit dans un autre langage fonctionne,
on peut utiliser des ports ou fournir un modèle plus élaboré des primitives de communi-
cation Erlang dans cet autre langage. Dans les deux cas, il faut savoir comment gérer les
types de base et traduire les structures de données composées entre les deux langages.
Dans ce chapitre, nous verrons comment construire des nœuds en Java et en C qui peu-
vent interagir avec Erlang. Nous présenterons également erl_call, qui permet au shell
Unix de communiquer avec un nœud Erlang distribué et qui repose sur la bibliothèque
erl_interface fournie avec Erlang, tout comme le paquetage Java JInterface. Ces
bibliothèques offrent un code et une architecture stables aux dépens de la vitesse pure.
Puis nous expliquerons comment communiquer au moyen des ports et nous donnerons
un exemple d’interaction avec Ruby en nous servant de la bibliothèque erlectricity.
Autres langages
Ce chapitre traite des interactions avec Java, C et Ruby, mais Erlang peut être lié à un
grand nombre d'autres langages de programmation:
• OTP.NET fournit un lien vers la plateforme .NET, via un portage du code de JInter-
face.
• Py-Interface, une implémentation Python d'un nœud Erlang, permet de faire commu-
niquer ces deux langages.
• Le Perl Erlang-Port permet à du code Perl de communiquer avec Erlang via un port.
• PHP/Erlang est une extension PHP fournissant un ensemble de fonctions pour trans-
former un thread PHP en nœud ErlangC.
• Haskell/Erlang-FFI autorise une communication complète et dans les deux sens entre
des programmes écrits en Haskell et en Erlang. Les messages envoyés depuis Haskell
vers Erlang ressemblent à des appels de fonctions et les messages envoyés d'Erlang à
Haskell sont délivrés à des MVar.
• L'interface Erlang/Gambit permet de faire communiquer Scheme et Erlang.
• Distel améliore le mode Erlang d'Emacs en autorisant l'interaction entre Emacs Lisp
et Erlang.
Livre Erlang.indb 362 31/08/10 13:13
© 2010 Pearson France – Programmer en Erlang – Francesco Cesarini, Simon Thompson