Sortie d’Erlang/OTP 24

from DLFP - Dépêches

Jul 23, 2021, 4:37:37 PM

À 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.

É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% (« 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 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 : 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 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 ;
  • grâce à un compilateur JIT ;
  • sur d’autres environnements d’exécutions par des projets plus ou moins maintenus, plus ou moins expérimentaux : erjang (erlang on JVM), Jerlang (erlang on JVM), erlscripten (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 MQTT ;
  • 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.
Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur