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.

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /