05/01/2020

ERLANG => L'effet 'E'

Erlang
Elixir
Phoenix

Il y a des rencontres qui changent la vision d'un développeur et ma rencontre avec Erlang est une de celles-là.

Développeur Ruby on Rails depuis presque 10 ans, j'ai souffert des piètres performances de Ruby (mais moins que mes clients) lorsque les applications déployées étaient victimes de leurs succès et que les volumes traités passaient de quelques centaines de lignes à plusieurs millions.

Oh ! que la déception était grande quand, après avoir monter la solution en seulement quelques semaines, grâce aux facultés haut niveau de Ruby et du langage spécifique au domaine (DSL) qu'est Rails, on commençait justement à regretter qu'il soit si haut niveau.

Plus bas niveau, les traitement iraient bien plus vite ! Au lieu de quoi, ça se traînait à une allure de sénateur quand les choses deviennent plus complexe et massive.

Finalement le problème n'est pas tant Ruby que le paradigme sur lequel le langage a été construit; la programmation séquentielle orientée objet. Rien que ça, me direz-vous...

Et bien oui, il faut dire les choses. D'ailleurs je vous signale qu'à partir de maintenant continuer la lecture devient dangereux.

D'abord illuminons-nous des mots de Joe Amstrong ('Hello Jo!'):

"Le monde réel, celui qui réside en dehors de nos ordinateurs, est indéniablement concurrent. Les choses s'y produisent en parallèle et notre existence même repose sur les interactions complexes d'un très grand nombre d'activités concurrentes. Cette simple observation conduit au paradoxe suivant: tandis que les activités s'organisent dans notre monde de manière parallèle, les langages que nous utilisons pour modéliser, décrire et transcrire cette réalité en programmes sont essentiellement séquentiels.

Le développement en Erlang enseigne au programmeur une nouvelle manière de considérer le monde, en l'obligeant à analyser les problèmes auxquels il est confronté en termes de processus concurrents et de messages échangés entre ces processus.

Un programme Erlang est composé d'un nombre arbitraire de processus qui s’exécutent en parallèle. Ces processus interagissent en échangeant des messages. C'est même là la seule façon pour eux d'interagir. En outre, leur espace d’exécution n'est pas limité à une seule machine: il peut s’étendre à un nœud Erlang quelconque situé sur l'Internet..."

Joe AMSTRONG. Swedish Institute of Computer Science, Stockholm, janvier 2003.

Il faut dire que ce monsieur Amstrong en connait long sur la question. Il est l'un des trois concepteurs d'Erlang (Jim, Mike, Joe), immortalisés dans une vidéo promotionnelle d'Ericsson, la société qui utilisait alors Erlang pour animer le coeur de ses routeurs et centraux téléphoniques, et qui restera dans les annales autant pour ses dialogues élaborés ('Hello Mike.' -> 'Hello Jo.') que pour son jeu d'acteurs :). Je vous laisse apprécier: https://www.youtube.com/watch?v=xrIjfIjssLE

En plus d'être distrayante, cette vidéo démontre les capacités d'Erlang à se mettre à jour "à chaud", ce qui représentait pour l'époque une sacrée prouesse technique.

Alors de quoi parle-t-on ? D'un langage, d'un OS, d'un middleware, une VM, un paradigme ? Et bien, c'est tout ça à la fois. Je cite: "Erlang à fait le choix d'un modèle de développement fonctionnel (vs objet) pour des raisons de performance et de constance dans les temps de réponse de l'application. En effet, dans un langage objet, la superposition des couches objet à travers le mécanisme d'héritage peut pénaliser les temps de réponse. Or Erlang est conçu pour être un langage temps réel mou." (Mikael Rémond. 2003)

On pourrait penser que ce langage est resté confidentiel mais ce n'est pas du tout le cas. WhatsApp, Slack, pour ne citer qu'eux, l'ont placé au cœur de leurs systèmes de communication (tiens, on y revient) pour ses performances, sa capacité à monter en charge aisément et sa résistance aux pannes.