Elixir ? C’est quoi ?

Une marque de bière !
Oui mais pas que. C’est aussi le nom d’un langage dynamique, fonctionnel, concurrentiel et fun !
On en parle de plus en plus et la communauté est très active avec une nouvelle version (1.2) qui date tout juste du mois de Mars.

Basé sur Erlang, et sa machine virtuelle Beam, créé par Ericsson pour être utilisé dans des appareils de télécommunications, Elixir en tire des propriétés intéressantes comme l’Open Telecom Platform (aka OTP, communication entre les services), la tolérance à la panne (supervisor) et le rechargement de code à chaud.

Pourquoi m’y intéresser ?

Ça peut paraître étonnant mais au jour d’aujourd’hui, je n’ai pas trouvé de technologie qui me donne entière satisfaction pour écrire un backend organisé en micro-applications ou micro-services

Java

  • même si Spring Boot fait du bon boulot pour rendre la tâche plus facile, il y a encore beaucoup de verbosité et de configuration pour organiser un backend en plusieurs applications indépendantes
  • les applications sont quand même assez longues à démarrer comparés à d’autres technologies (NodeJS par exemple) et ça joue sur le temps d’exécution des tests
  • le refactoring est assez lourd, même si mon IDE en fait une grosse partie (avez-vous déjà essayer de renommer une micro-application ?)

JavaScript

  • Express : à chaque fois que je redonne une chance à Express, je m’en veux dès que j’ai à configurer un ou deux middlewares (passportjs, connexions ssl, etc)
  • HapiJS : j’avais bien accroché (voir ici), surtout pour l’approche configuration plutôt que code (comme c’est le cas dans Express). Beaucoup de plugins pour faire des choses sympas mais quand on veut sortir des sentiers battus, aïe (je n’ai pas réussi à autoriser des connexions ssl…)

Je n’ai pas tout essayé (il faudrait peut-être que je donne une chance à Vert.X ou Wisdom) mais quitte à essayer quelque chose d’autre, j’ai choisi d’y aller à fond.

Et Elixir fait mieux ?

Je ne sais pas. Je débute.

Mais il y a quelques indices qui m’incitent à pousser l’apprentissage un peu loin :

  • programmation fonctionnelle -> ce dont j’ai besoin la plupart du temps dans mes backend REST, c’est des morceaux de code stateless qui appliquent un traitement à des données.
    Et bien c’est le cas d’usage parfait pour de la programmation fonctionnelle (parallélisme, enchaînements de tâches simples, etc)
  • utilisation des actors -> les actors sont un modèle de concurrence qui impliquent des process indépendants qui ne partagent pas d’état et qui communiquent par messages.
    Ça me paraît bien pour faire des micro-services indépendants, non ?
  • OTP -> l’Open Telecom Platform permet de faire communiquer simplement nos process et même de les superviser pour les redémarrer en cas de crash (tolérance à la panne) ainsi que de les monitorer (usage CPU, RAM, applications lancées, etc).
    Et tout ça, inclus de base !
  • mix -> mix est la chaîne d’outils d’Elixir. Elle permet de gérer les dépendances avec hex, de compiler, de lancer les tests, de générer la documentation à la JavaDoc, lancer des applications, etc.
    Ce qui me plaît le plus avec mix (outre le fait que c’est un vrai couteau suisse), c’est qu’il révèle une véritable culture du test (même les exemples de la documentation sont inclus dans l’exécution des tests…). Et ça, ça me plaît.

Penser autrement

Je ne vais pas entrer plus loin dans le détail. L’apprentissage d’Elixir est un peu déroutante quand on est habitué à la programmation objet (pattern matching partout, récursion à fond, pas de boucle, etc) mais elle en vaut la peine, ne serait-ce que pour apprendre à penser autrement.
Pour ça je vous conseille la lecture du très bon Programming Elixir 1.2 de Dave Thomas et surtout de réaliser les exercises qu’il contient. Ce n’est qu’à cette condition que votre lecture sera efficace. Et n’hésitez pas à partager vos implémentations, voici les miennes.

Mais ce n’est pas tout

Elixir a indubitablement quelque chose à apporter dans la conception de nos backend.
Ça se sent. Mais ce n’est pas tout.
On a un autre outil à notre disposition pour nous aider: Phoenix, LE framework web écrit en Elixir !

Ça sera l’objet de ma prochaine lecture, Programming Phoenix et de mon prochain post.

Think differently !

Commenter et partager


J’étais hier soir au Lava JUG, pour une soirée autour des langages fonctionnels, animée par Yannick Loiseau, maître de conférence à l’Université Blaise Pascal et fortement impliqué dans le développement logiciel, notamment dans les langages fonctionnels.

A l’heure où de plus en plus de langages informatiques “modernes” (Java 8, C++ 11, Groovy, Scala, Clojure, etc) ajoutent des touches de programmation fonctionnelle, voire en font leur paradigme principal, et un an après la présentation Lambda Bestiary de Rémi Forax; Yannick nous propose un retour sur les concepts qui se cachent derrière ce style de programmation. Et en deux heures, ça promettait d’être sportif !

Et ce le fut un peu ! Mais là où Yannick a été très bon, c’est qu’il s’est appuyé sur des concepts que la plupart des développeurs connaissent déjà en langage objet (tels que les design patterns classiques) en montrant comment on pouvait les réécrire en langage fonctionnel, la plupart du temps de façon plus concise et “naturelle”.

La plupart des concepts ont été revus : fonctions de 1er ordre, d’ordre supérieur, concepts de map, filter, fold, unfold, les closures, les lambda jusqu’aux concepts plus avancés de partialisation, curryfication et monades. Le tout parsemé d’exemples en Java 8 et Golo. Et ce rappel tombe à pic pour moi car mes prochaines lectures seront consacrées à Java 7 et 8 ainsi qu’à Groovy, Scala et Clojure. Timing parfait !

La présentation, comme toutes les épisodes précédents, est à (re)découvrir ici.

Encore merci à Yannick et au Lava JUG pour ces moments de partage !

Commenter et partager

Cure de jouvence Java

dans Lectures

Après avoir quelque peu délaissé le Java au profit du C++ ces dernières années, un peu de rattrapage s’impose. Le but est donc de revoir les bonnes pratiques de Java 6 et de partir à la découverte de ce qu’ont apportées les versions 7 et 8 de Java. Rien que ça !

Pour cela, rien de plus efficace qu’un bon bouquin truffé d’exemples et écrit pas des personnes qui savent de quoi elles parlent. Je découvre à cette occasion pour la première fois des livres des éditions Manning et quelque chose me dit que j’y reviendrai ! C’est fou toutes les références qu’ils ont dans les technologies de développement logiciel !

J’ai donc choisi trois livres, un pour chaque version :
    - Java 6 : Effective Java, Second Edition de Joshua Bloch chez Addison-Wesley (Août 2008).
Bonnes pratiques qui permettent d’écrire du code Java efficient. J’avais déjà lu ce livre il y a cinq ans mais on oublie vite quand on ne manipule pas !
    - Java 7 : Well Grounded Java Developer de Benjamin J. Evans et Martjin Verburg chez Manning (Juillet 2012).
Nouveautés Java 7 (Project Coin, try-with-resources, NIO.2) et comme dans “Effective Java“, quelques techniques sympas à connaître.
Ensuite, une introduction très intéressante aux langages basés sur la JVM, cousins plus ou moins proches de Java dont notamment Groovy, Scala et Clojure.
Enfin, une dernière partie sur quelques notions de software craftmanship appliquées à ces langages.
    - Java 8 : Java 8 in Action de Raoul-Gabriel Urma, Mario Fusco et Alan Mycroft chez Manning (Août 2014).
Nouveautés Java 8 et notamment une introduction aux expressions lambda.
Ensuite, une partie sur le traitement des données (ex: Collections) à la sauce programmation fonctionnelle et flux.
Après, comme pour les précédents livres, une partie sur comment être efficient en Java 8.
Et enfin, une partie un plus poussée sur la façon de penser en programmation fonctionnelle et l’après Java 8.

Tout un programme qui fait du bien au moral ! Je détaillerai chacun des livres dans des articles à venir ainsi que les spikes que j’ai prévu de faire pour Groovy, Scala et autres.

Commenter et partager

  • page sur

Pierre PIRONIN

J’ai créé ce blog pour parler de ce qui se passe autour de moi dans le domaine du génie logiciel.
J’exposerai mes devs, mes idées, mes lectures, les faits qui m’intéressent et les événements auxquels je participe.

Bonne lecture !


Artisan développeur


Auvergne, France