Elixir ?

a marqué ce sujet comme résolu.

Bonjour,

J’aimerai l’avis des personnes ayant déjà fait du Elixir, c’est un langage intéréssant ! Mais je me pose pas mal de questions surtout depuis la lecture d’un avis anglais :

". I think that Elixir and Phoenix will very rapidly assume position #1 for web frameworks, surpassing Node.js and Golang among the cutting edge but practical crowd in the next 1-2 years, and surpassing Ruby and Python among the more conservative crowd in the next 3-4 years. Java may be so entrenched in Entreprise systems that it will never be replaced, but if any ecosystem could do it, it’s Erlang/Elixir."

Salut,

Ta question est intéressante car plusieurs personnes se sont abonnées à ton thread (ce qui prouve qu’il y a un intérêt à suivre cette discussion).

Je ne peux pas répondre à ta question mais je tiens juste à dire que je suis dans ton cas et que je suis dans une phase de découverte d’Elixir et que je trouve le langage agréable à utiliser.

Je l’ai découvert suite à une discussion avec cepus. D’ailleurs, cepus, si tu passes par là…

Pour l’avis anglais, je ne saurais te dire.

Perso, je me suis abonné pour voir la réaction des gens. :-° Autant je ne peux rien dire sur Elixir (connais pas), autant l’avis rapporté, il n’y a aucune raison de l’écouter car il n’a absolument aucun argument. Sérieux, qu’est-ce qui lui fait dire que Elixir peut monter ? Pourquoi lui ? A-t-il seulement une dynamique favorable. Je n’ai rien, en soi, contre les avis non argumentés, mais dire que tu te poses des questions après avoir lu ça… Je fais la même :

Je ne pense pas qu’Elixir puisse devenir numéro 1 (ni même 2 ou 3) parmi les cadriciels web. Node.js et Golang le surpasseront toujours largement. Quant à Python ou Ruby, vu la masse de gens qui l’utilisent, faut pas rêver ! Et ne parlons même pas de Java, qui aura la cote en entreprise encore longtemps…

Je t’ai convaincu ? Parce que j’ai exactement le même niveau argumentatif.

Histoire d’être (un peu) constructif, si on se réfère au TIOBE, qui un piètre indice de popularité, mais on fait avec ce qu’on a, Elixir n’est pas dans le top20 (qui n’a vu qu’une entrée en 1 an), mais dans le top100. Java, python et ruby sont dans le top10 depuis 2003 ! Il est d’ailleurs à noter la très très grande inertie dans le classement : 9 des 10 membres du top 10 d’aujourd’hui font partie au moins du top20 depuis 2003. À ce titre, Elixir qui détrône python et ruby, pourquoi pas, mais d’ici 15 ans, et avec beaucoup de chance.

+2 -0

Il faut relativiser !

J’ai poser cette question afin de comprendre pourquoi je trouvais énormément d’avis comme celui-ci sur Internet mais que le niveau de popularité de Elixir était si bas..

De plus on lit énormément de choses sur ce langage

Certains articles disent du bien mais d’autre disent que ça machine virtuelle : Erlang est très lente

Bref, ce topic à juste pour but de savoir ce qui est vrai & faux grâce au avis de ceux qui en ont déjà fait

J’ai poser cette question afin de comprendre pourquoi je trouvais énormément d’avis comme celui-ci sur Internet mais que le niveau de popularité de Elixir était si bas..

Ça, je peux répondre : les gens sous-estiment l’inertie de la popularité des langages. Cobol, Fortran et Pascal ou Lisp sont dans le top50 de la popularité alors que ce sont de vieux langages. De nombreux programmes ont été écrits dans ces langages (en particulier Fortran et Cobol), et se contentent d’être tenus à jour sans amélioration ; ils font ce qu’on leur demande. J’imagine mal un nouveau projet être commencé en Cobol ou en fortran77 (fortran90/2003, pourquoi pas), mais des programmes en fortran77, j’en croise plein.

Même dans les domaines où ça bouge plus vite, comme le web, on passe facilement d’un cadriciel à un autre (tous les 6 mois, j’ai l’impression :P ), mais les langages changent peu. On parlait de PHP, javascript, ruby ou python il y a 10 ans, on parle toujours des mêmes (d’autres ont peut-être réussi à se faire une place en plus, mais ils sont peu nombreux ; difficile de détrôner les anciens). Par contre, on ne fait plus du javascript pareil aujourd’hui qu’il y a 10 ans. ;)

Dernière précision, si ton but est de trouver un emploi, il faut savoir que la popularité n’est pas un bon indice ; son évolution l’est beaucoup plus : si un langage est très populaire, mais déjà installé, il n’y a pas forcément besoin de place disponibles. Si des gens partent (retraite, changement de langages…), et que la popularité décroit dans le même temps, alors il peut ne pas y avoir de place ouverte, bien qu’il s’agisse d’un langage populaire ! Un langage peu connu qui monte, au contraire, peut chercher des gens avec peu de candidats. Et comme tout arrive, un langage que personne ne veut faire qui est moyennement populaire peut embaucher beaucoup, pour cher. Je pense au Cobol, là.

+0 -0

J’ai pas mal joué avec Elixir l’année dernière et je continue à bricoler avec cette année. C’est, personnellement, un grand coup de cœur et une belle découverte.

Ce que j’aime particulièrement, c’est qu’Elixir invite a réfléchir complètement différemment ses programmes, comparé à ce que j’ai l’habitude de faire en Haskell par exemple. Ça vient du fait qu’Elixir reprend énormément de principe d’Erlang et en particulier OTP. Réfléchir un programme exclusivement en terme de tâches concurrentes, c’est assez rigolo de base, mais quand le délire est poussé à bout ça donne un paradigme vraiment atypique.

Par exemple, avec OTP, les données et les traitements sur ces données sont assez régulièrement dans deux tâches différentes. Le but est de faire en sorte que si le traitement possède une erreur de logique qui fait « planter » la tâche (disons, exemple bête : une division par zéro), alors les données sont à l’abri.

Au delà de ça, Elixir est un langage fonctionnel, ce que personnellement j’apprécie, avec une syntaxe assez agréable à utiliser et un système de méta-programmation/macros complètement fou. Tu peux vraiment augmenter la syntaxe du langage de manière assez cool, ce qui tombe bien parce qu’à contrario, de base Elixir/OTP implique pas mal de boilerplate.

Mon gros point noir, c’est le typage fort dynamique (et non statique). J’ai beaucoup de bugs dans mes programmes Elixir que je n’aurais jamais eu avec un projet en Haskell par exemple, où le compilateur réfléchit beaucoup à ma place. Ceci étant dit, ça me pousse à écrire des tests, ce qui s’est aussi révélé très intéressant et confortable sur le gros projet Elixir que j’ai écris… un mal pour un bien ?

+2 -0

J’ai pas mal joué avec Elixir l’année dernière et je continue à bricoler avec cette année. C’est, personnellement, un grand coup de cœur et une belle découverte.

Ce que j’aime particulièrement, c’est qu’Elixir invite a réfléchir complètement différemment ses programmes, comparé à ce que j’ai l’habitude de faire en Haskell par exemple. Ça vient du fait qu’Elixir reprend énormément de principe d’Erlang et en particulier OTP. Réfléchir un programme exclusivement en terme de tâches concurrentes, c’est assez rigolo de base, mais quand le délire est poussé à bout ça donne un paradigme vraiment atypique.

Par exemple, avec OTP, les données et les traitements sur ces données sont assez régulièrement dans deux tâches différentes. Le but est de faire en sorte que si le traitement possède une erreur de logique qui fait « planter » la tâche (disons, exemple bête : une division par zéro), alors les données sont à l’abri.

Au delà de ça, Elixir est un langage fonctionnel, ce que personnellement j’apprécie, avec une syntaxe assez agréable à utiliser et un système de méta-programmation/macros complètement fou. Tu peux vraiment augmenter la syntaxe du langage de manière assez cool, ce qui tombe bien parce qu’à contrario, de base Elixir/OTP implique pas mal de boilerplate.

Mon gros point noir, c’est le typage fort dynamique (et non statique). J’ai beaucoup de bugs dans mes programmes Elixir que je n’aurais jamais eu avec un projet en Haskell par exemple, où le compilateur réfléchit beaucoup à ma place. Ceci étant dit, ça me pousse à écrire des tests, ce qui s’est aussi révélé très intéressant et confortable sur le gros projet Elixir que j’ai écris… un mal pour un bien ?

lthms

Merci ! Tu viens d’éclairé énormément de point sur Elixir !

J’ai d’autre questions, penses-tu qu’ils conviennent uniquement pour le web ? Sinon pour quel type d’app ?

J’ai entendu dire que ça machine virtuel "Erlang" était très lente ? Le langage a de mauvaise performances dû à cela ?

Je n’ai personnellement pas fait de programmation web à proprement parlé en Elixir. À mon avis (qui n’engage que moi, il n’est pas fondé sur des données objectives) Elixir est un bon pour tout ce qui est serveur/démon. Il n’y a pas ou peu d’écosystème pour des interfaces graphiques, par exemple.

Je ne sais pas où tu as lu que BEAM est « très lente », elle a plutôt bonne réputation il me semble pour permettre une programmation extrêmement concurrente. Je doute que dans la pratique, tu atteignes ses limites (mais ça dépend du projet que tu as en tête). Je ne me soucis que rarement des perfs ceci dit, je préfère avoir un beau code qui fait ce que je veux parce que je n’ai pas de contraintes à ce niveau là. Donc je suis mal placé pour en parler.

+1 -0

Je n’ai personnellement pas fait de programmation web à proprement parlé en Elixir. À mon avis (qui n’engage que moi, il n’est pas fondé sur des données objectives) Elixir est un bon pour tout ce qui est serveur/démon. Il n’y a pas ou peu d’écosystème pour des interfaces graphiques, par exemple.

Je ne sais pas où tu as lu que BEAM est « très lente », elle a plutôt bonne réputation il me semble pour permettre une programmation extrêmement concurrente. Je doute que dans la pratique, tu atteignes ses limites (mais ça dépend du projet que tu as en tête). Je ne me soucis que rarement des perfs ceci dit, je préfère avoir un beau code qui fait ce que je veux parce que je n’ai pas de contraintes à ce niveau là. Donc je suis mal placé pour en parler.

lthms

J’ai lu des avis sur Erlang ( qu’il serait abominable lent un peu partout sur le web ) par contre, je ne sais pas si je n’ai pas fais l’amalgame entre Erlang & BEAM

Mais que penses-tu de Elixir comparé à des technologies tel que NodeJS ? Scala ? En terme de performance et de futur ?

Concernant mon projet, j’adore travailler en réseau et ainsi je m’amuse à faire des ré-implémentation de jeux existant

Je ne peux malheureusement pas réponde de manière objective à ces questions. Mes connaissances en JavaScrit sont minimes, je n’ai jamais touché à Scala et quand j’ai le choix, je fais de l’Haskell ou du Coq :D.

+0 -0

Avis de ma maigre expérience (= qui vaut ce qu’elle vaut) :

Je n’avais strictement aucune connaissance en programmation fonctionnelle avant de m’intéresser à Erlang/Elixir. J’étais tombé, de mémoire, sur Learn You Some Erlang for Great Good que j’avais survolé par curiosité, je trouvais notamment le concept de pattern matching poussé à l’extrême ou presque vraiment séduisant mais je trouvais la syntaxe vraiment imbuvable moi qui venais du C/PHP/Java. J’avais vu Elixir à l’époque comme alternative mais il n’en était qu’à ses tous débuts.

Quelques années plus tard, j’ai vu qu’Elixir gagnait en popularité et ai décidé de m’y réintéresser au point de m’y essayer sur mon "temps libre". J’en aime beaucoup la plupart des "concepts". Je trouve quand même que malgré les macros il lui manque un certain "dynamisme" (reflection, réutilisation de code entre "bibliothèques"). Je dois avouer que de passer du procédural et/ou de la POO à du fonctionnel, ça fait littéralement un choc au point que certains disent même qu’il faut désapprendre ou oublier ses précédentes pratiques.

go reprend certaines idées d’Erlang, les processus surtout, mais il y a toujours des verrous et compagnie pour gérer la concurrence que tu n’as pas (ou pas forcément) avec Erlang/Elixir. Et tu n’as pas l’immutabilité des données.

Elixir n’a pas non plus la "maturité" et encore moins popularité de Ruby, l’écosystème (gem vs mix/hex) n’est vraiment pas comparable : tu trouves bien plus facilement des gems pour tout faire qu’un équivalent Elixir (ou Erlang). La communauté Elixir se construit et consolide un peu plus chaque jour (du moins, c’est l’impression que j’en ai en fréquentant son forum officiel).

Pour conclure, je dirais qu’Elixir en vaut vraiment la peine mais il faut vraiment de la patience et ne pas avoir peur de s’y investir (en temps en premier lieu). J’en pense aussi qu’avec les CPU modernes (multiplication des cores), Erlang/Elixir, de par son modèle, n’en a que plus de sens sans compter que nativement tu disposes de la scalibilité (tu peux exécuter le code sur plusieurs VM/machines).

Penses-tu que Elixir soit fait pour du traitement réseau ?

"traitements" ? Implémentation de protocoles, serveurs, etc, Erlang/Elixir doivent être plutôt bien classés mais le code ne sera vraiment pas du tout le même qu’avec du C. Ce n’est pas la partie réseau de COD4 ou je ne sais plus quel jeu qui est souvent prise pour exemple pour Erlang ?

+0 -0

Sans grande connaissance des langages fonctionnels, je pense qu’on peut aussi supposer le fait que c’est aussi une question historique et de formation. Historiquement, le dev entreprise (et majoritairement aussi dans le reste) est en impératif puis OOP. Les étudiants formés qui deviendront des développeurs le sont pour ces paradigmes, pas pour la programmation fonctionnelle. A titre d’exemple, dans ma formation d’ingénieur, sur 5 ans on a un module d’un semestre sur Haskell, c’est tout. A coté, on passe 4 ans et demi sur Java jusque dans ses moindre recoins et versions (coucou Java 9 qu’on nous obligeait à beta tester alors que Eclipse le gérait pas), avec une bonne dose de C en parallèle. En sortant d’un cursus de ce genre, non seulement peu d’entreprises cherchent des dev programmation fonctionnelle, mais surtout t’es pas du tout dans l’état d’esprit pour te jeter dessus en autodidacte.

Ca peut expliquer une partie de l’inertie, et de pourquoi certains langages écrasent le haut du classement et restent posés là malgré la miriade de langages plus récents.

J’ai essayé à titre personnel Elixir car déjà connaisseur d’Erlang.

  • Elixir génère du code pour la machine virtuelle BEAM (la machine virtuelle d’Erlang)
  • on a donc le système de threads d’Erlang (utilisation méomire faible et isolation mémoire totale des threads)
  • de plus, BEAM est utilisé en prod sur des systèmes critiques depuis de nombreuses années, notamment car conçue pour les erreurs (en erlang en cas d’erreur on tue le thread et on le relance immédiatement, vu que ça coûte pas cher et que tout est isolé par BEAM)
  • tout est passage de messages, on fait pas trop de mémoire partagée (donc pas de problème de concurrence)
  • la scalabilité est "presque" automatique (multi serveurs, etc)
  • la syntaxe, on aime ou on aime pas, perso la syntaxe ruby je n’aime pas
  • OTP te permet de créer des systèmes robustes avec des patterns qui sont éprouvés
  • Erlang/Beam a été conçus dans l’optique du 99,99999% de disponibilité (un niveau de disponibilité assez énorme, chiffre à revérifier)

Je parle beaucoup de scalabilité/disponibilité => ça n’est pas gratuit, il faut que le programme soit conçu avec des algorithmes et des structures de données correspondantes.

Après les opinions sur les langages, c’est comme le nez, tout le monde en a un (je vous épargne la vraie comparaison). En France, c’est assez rare de trouver des projets en Erlang/Elixir, à moins de travailler dans une vieille entreprise (donc du code à maintenir, et qui va très peu bouger) ou dans une startup (où tu vas utiliser les dernières "trends").

Par exemple, Whatt’sApp est codé en Erlang et Discord en Elixir. Vu que ce sont deux plateformes avec énormément d’utilisateurs, on peut supposer qu’Elixir est un bon choix dè lors qu’on a des problématiques de scalabilité/disponibilité. Mais le nombre d’entreprises avec ces problématiques (en tout cas en France) reste assez bas.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte