URL: https://linuxfr.org/news/sortie-d-erlang-otp-24 Title: Sortie dâErlang/OTP 24 Authors: Jean Parpaillon Ysabeau đ§¶ et BenoĂźt Sibaud Date: 2021ćčŽ07æ23æ„T09:47:57+02:00 License: CC By-SA Tags: eef, programmation_fonctionnelle, distribution et erlang Score: 33 Ă lâoccasion de la sortie dâErlang/OTP 24, le 12 mai 2021, je voudrais vous prĂ©senter cet environnement de programmation : le langage Erlang et son Ă©cosystĂšme. ---- [Release OTP 24.0](https://github.com/erlang/otp/releases/tag/OTP-24.0) [The Road to the JIT](https://blog.erlang.org/the-road-to-the-jit/) [TĂ©lĂ©chargements](https://www.erlang-solutions.com/downloads/) [Erlang Ecosystem Foundation](https://erlef.org/) [Erlang (langage) - wikipedia](https://fr.wikipedia.org/wiki/Erlang_%28langage%29) ---- ĂcosystĂšme ========== Erlang/OTP est la partie centrale dâun Ă©cosystĂšme constituĂ© de langages (fonctionnels), dâenvironnement dâexĂ©cution (machine virtuelle, JIT, etc.) et de bibliothĂšques standards. Langages ----------- Le langage Erlang, dont la premiĂšre version date de 1987, a Ă©tĂ© dĂ©veloppĂ© originellement chez Ericsson pour programmer des commutateurs. Il est devenu open source en 1998. Ses premiers auteurs Ă©taient Joe Armstrong et Robert Virding. Erlang a longtemps Ă©tĂ© connu pour sa robustesse : lâATM AXD 301 dâEricsson, programmĂ© en erlang, a dĂ©montrĂ© offrir un taux de disponibilitĂ© de [99,9999999%](https://web.archive.org/web/20200503044001/https://pragprog.com/articles/erlang) (« neuf neufs »). Ses principales caractĂ©ristiques : - une syntaxe inspirĂ©e de Prolog ; - le partage de donnĂ©es par passage de message ; - une gestion explicite du temps. La syntaxe ayant Ă©tĂ© longtemps considĂ©rĂ©e comme un point faible, [une trentaine de langages](https://github.com/llaisdy/beam_languages#languages-30) ont Ă©tĂ© ensuite dĂ©veloppĂ©s qui bĂ©nĂ©ficient du mĂȘme environnement dâexĂ©cution et offrent un certain niveau de compatibilitĂ© entre eux (rĂ©utilisation des bibliothĂšques), par exemple : - [Elixir](https://fr.wikipedia.org/wiki/Elixir_(langage)) : inspirĂ© par Ruby et offrant de larges possibilitĂ©s de mĂ©ta-programmation ; - lfe : inspirĂ© par LISP ; - hamler : inspirĂ© par Haskell. Environnement dâexĂ©cution ------------------------- JusquâĂ Erlang/OTP 23, lâenvironnement dâexĂ©cution le plus courant sâappelait la BEAM. Câest une machine virtuelle qui interprĂšte le bytecode gĂ©nĂ©rĂ©, par exemple, par le compilateur Erlang dont les principales caractĂ©ristiques sont : - distribution : plusieurs instances (« node ») de BEAM peuvent communiquer entre eux. Le passage de message entre processus erlang se fait de maniĂšre transparente au sein dâun mĂȘme nĆuds ou entre diffĂ©rents nĆuds ; - immutabilitĂ© : lâimmutabilitĂ© des variables est gĂ©rĂ©e par BEAM ; - remplacement de code Ă chaud : chaque piĂšce de code peut ĂȘtre remplacĂ©e Ă chaud, Ă lâĂ©chelle du module, la bibliothĂšque standard offrant des mĂ©canismes pour gĂ©rer la migration de structure de donnĂ©es dâune version dâun module Ă lâautre, le cas Ă©chĂ©ant ; - gestion des threads : bien avant Go ou Scala, BEAM a intĂ©grĂ© la gestion de threads ultra-lĂ©ger, permise par le cĂŽtĂ© fonctionnel du langage. Lâabsence de structures partagĂ©es entre les processus permet une gestion ultra optimisĂ©e. Ă propos des threads, Joe Armstrong avait publiĂ© un benchmark Java/Erlang pour comparer la gestion des threads. Vous pouvez trouver [ici](https://github.com/jeanparpaillon/actors_benchmark) une version mise Ă jour du code Java, accompagnĂ©e de mises en Ćuvres dans dâautres langages du mĂȘme algorithme. Sur une mĂȘme machine, la version Java fait exploser le noyau Linux Ă quelques milliers de threads, quand BEAM supporte plusieurs millions de threads. Ă part BEAM, le code Erlang peut ĂȘtre exĂ©cutĂ© : - nativement, grĂące au compilateur [HiPE](http://www.it.uu.se/research/group/hipe/) ; - grĂące Ă un [compilateur JIT](http://erlang.org/doc/apps/erts/BeamAsm.html) ; - sur dâautres environnements dâexĂ©cutions par des projets plus ou moins maintenus, plus ou moins expĂ©rimentaux : [erjang](https://github.com/trifork/erjang) (erlang on JVM), [Jerlang](http://jerlang.org/) (erlang on JVM), [erlscripten](https://blog.aeternity.com/erlscripten-92c815786987) (Javascript), etc. BibliothĂšques standards -------------------- Lâensemble de bibliothĂšques standards pour Erlang sâappelle OTP (pour « Open Telephony Platform »). Parmi ses nombreuses bibliothĂšques, on peut citer, outre les classiques structures de donnĂ©es : - outils de dĂ©veloppement/dâexĂ©cution : eunit (tests), systĂšme de releases, compilateur, gĂ©nĂ©ration de documentation, profiling, debugger distribuĂ©, analyseur statique de code, shell avec interprĂ©teur ; - protocoles rĂ©seaux: SNMP, SSH (serveur/client), HTTP (serveur/client), LDAP, FTP, TFTP, etc. ; - base de donnĂ©es relationnelle distribuĂ©e : mnesia, totalement intĂ©grĂ©e au langage, elle peut remplacer une base SQL classique pour des volumes de donnĂ©es modĂ©rĂ©s (< 2GB / table). Applications ------------ Au vu de ses caractĂ©ristiques, il semble naturel que le langage Erlang soit prĂ©sent dans les infrastructures rĂ©seau et moins sur votre « desktop ». Les applications open source les plus connues sont : - MongooseIM / ejabberd: serveur XMPP hautement distribue, rendu populaire par son dĂ©ploiement par WhatsApp ; - RabbitMQ, une mise en Ćuvre de AMQP (entre autres protocoles pris en charge) ; - CouchDB, base de donnĂ©es NoSQL distribuĂ©e. Erlang/OTP 24 ============= Compilation / environnement dâexĂ©cution --------------------------------------- La principale nouveautĂ© dâErlang/OTP 24 est lâactivation du JIT sur les architectures x86_64. RĂ©seau ------ - Support de FTPES (« Explicit FTP over TLS ») ; - support de certificats EdDSA pour les connexions TLS ; - poignĂ©e de main TLS exĂ©cutĂ©e en parallĂšle. Graphique --------- Ce nâest pas lâaspect le plus connu dâErlang, mais OTP intĂšgre depuis longtemps un binding WxWidget pour dĂ©velopper des interfaces graphiques : - migration vers wxWidgets 3 ; - ajoute le support de wxWebView.