
Pourquoi Elixir / Phoenix atteint-il un taux d'adoption aussi élevé dans l'industrie du développement logiciel? Quels sont les meilleurs cas d'utilisation de cette langue? Y a-t-il des inconvénients lors de son utilisation? Nous avons parlé à Sergiy Kukunin, un développeur full-stack chez
Spotlight et un expert Elixir, pour trouver des réponses à ces questions et à d'autres.
Ivan: pourquoi Elixir devient-il si populaire?
Sergey: Elixir présente des principes qui sont rarement respectés dans d'autres langues. Il est également basé sur Erlang qui est utilisé pour la construction de réseaux de télécommunications. En conséquence, nous avons un outil très fiable pour les projets à forte charge qui a fait ses preuves au fil du temps.
Ceci est essentiel, car ces dernières années le progrès technologique du matériel ralentit. Les performances d'un cœur du CPU ont atteint la limite physique de 5 GHz. La seule chose que les fabricants ont proposée pour augmenter les performances du matériel est d'utiliser de plus en plus de cœurs.
Le problème avec cette approche est que vous avez besoin d'un logiciel capable de travailler avec plusieurs cœurs en parallèle. Les langages de programmation classiques sont mal adaptés à de telles tâches. Lorsque nous parlons de multithreading dans, disons, C, nous savons qu'il existe une mémoire partagée et plusieurs threads qui peuvent rivaliser pour les ressources. Dans de telles conditions, il est difficile de créer un code fiable pour les projets à forte charge en raison de conditions de course aléatoires et de défauts de segmentation.
Elixir résout efficacement ce problème en introduisant une nouvelle approche du multithreading.
Quels sont les principaux avantages de cette technologie?
La première caractéristique essentielle de la langue issue de sa nature fonctionnelle est l'immuabilité. Une fois que nous avons créé et chargé la structure de données (il n'y a pas d'objets dans les langages fonctionnels), nous ne pouvons pas la modifier, sauf en la recréant à partir de zéro.
D'une part, cette particularité lève le seuil d'entrée pour utiliser Elixir, car vous ne pouvez pas choisir une partie d'une application et essayer d'enregistrer quelque chose à plusieurs reprises, et vous retrouver avec tout ce qui est opérationnel. D'un autre côté, cela permet à l'ingénieur de planifier l'architecture d'une application de manière plus approfondie.
La machine virtuelle Elixir est littéralement un mini-OS, où chaque processus a son propre espace mémoire. Aucun autre processus ne peut y entrer, empruntant ses ressources. Tout ce qu'un processus peut faire est d'envoyer un message à un autre processus, sans contrôle sur la façon dont il traitera le message. De plus, comme il s'agit d'un langage fonctionnel, il n'y a pas de structures de données qui ne peuvent pas être transmises entre les processus, même sur le réseau (contrairement à l'approche utilisée dans les langages orientés objet).
Il est plus difficile d'écrire du code Elixir en raison des multiples restrictions que le runtime applique, et cela prend plus de temps que de composer quelque chose à l'aide de Java. Cependant, la fiabilité globale d'une application est très élevée.
Existe-t-il des alternatives à Elixir?
L'approche la plus similaire est celle des coroutines utilisées dans le langage Go. En outre, les greenlets et les fibres de Python dans Ruby fournissent une approche similaire, mais il n'y a pas d'exécution aussi robuste et rapide disponible pour les exécuter. Le développeur doit décider comment exécuter ces coroutines, tandis qu'Erlang gère tout cela lui-même.
Tout outil a ses inconvénients. Que sont-ils pour Elixir?
Elixir est aujourd'hui un outil prêt pour la production, mais l'écosystème linguistique global est encore un peu trop jeune. En particulier, cela signifie que vous ne pouvez pas simplement vous connecter à Stack Overflow et trouver une réponse à l'une de vos questions possibles, comme vous pouvez le faire sur Ruby, par exemple. Oui, il existe des livres, des cours et certains blogs, mais vous devrez continuellement mener vos recherches et vos expériences pour résoudre de nombreuses tâches quotidiennes. C'est le principal inconvénient pour moi.
De plus, il est plus difficile de tester les applications Elixir car les tests unitaires sont moins utiles et vous devez vous concentrer davantage sur les applications d'intégration. Cependant, vous devez vous rappeler que presque toutes les fonctions Elixir sont propres, ce qui rend les tests unitaires plus simples: il y a une seule sortie pour chaque entrée.
Pourriez-vous décrire le cas où l'utilisation d'Elixir fournit des résultats maximaux?
Si vous n'avez pas vraiment besoin de prendre en charge des charges élevées avec des millions de demandes traitées par votre application, Elixir n'est pas un outil que vous devriez prendre la peine d'utiliser. Cependant, Elixir est une solution parfaite pour de vrais projets à forte charge. Vous ne pouvez même pas écrire toute votre application en l'utilisant, mais utiliser Elixir pour les parties les plus chaudes d'un système sera toujours une bonne idée.
À l'ère d'un Internet dynamique où les utilisateurs s'attendent à des vitesses très élevées et à une réponse immédiate de tout site Web, en particulier des ressources liées au contenu. Si vous avez, par exemple, un média en ligne avec de nombreuses connexions simultanées de milliers de lecteurs qui souhaitent recevoir des mises à jour instantanément, alors passer à Elixir vous facilitera la vie.
Expérience personnelle: sur un projet, nous avions une application Web Node.js capable de maintenir jusqu'à 20 000 connexions en même temps. Après avoir déménagé à Elixir, ce nombre est passé à 80 000 sans aucun changement dans la logique métier ou le smth. Ce résultat n'a été possible que grâce à la meilleure efficacité du langage utilisé.
Elixir permet de créer des choses qui étaient impensables il y a quelques années à peine, comme la création de jeux en ligne entièrement rendus côté serveur à l'aide de sockets Web. Il y a même un exemple du jeu Web Snake écrit sur Elixir sans code JavaScript du tout.
Cependant, les développeurs doivent comprendre qu'il n'y a pas de solution miracle. Elixir ne peut pas vous donner plus que ce à quoi la machine virtuelle Erlang avait initialement droit. Il traduit simplement une nouvelle syntaxe pour que le compilateur ancien mais bon créé par Ericsson à la fin des années 90 soit capable de le comprendre. Ceci est un parfait exemple de la façon dont une technologie éprouvée combinée à une nouvelle peut ouvrir de nouvelles possibilités aux développeurs, mais il y a toujours des contraintes.
Quels sont vos conseils lorsque vous commencez à utiliser Elixir? Quelle technologie faut-il étudier pour être opérationnel plus rapidement?
Eh bien, la syntaxe d'Elixir a certaines choses en commun avec Ruby. Les langues sont entièrement différentes, mais il est toujours bon de voir les symboles et les éléments auxquels vous êtes habitué. La chose la plus simple est d'utiliser certains des nouveaux frameworks de développement Web compatibles avec Elixir. Le framework web le plus populaire pour Elixir est Phoenix. Vous devriez certainement l'essayer, surtout si vous avez l'habitude d'utiliser Ruby on Rails. Cela simplifiera le développement tout en rendant l'application plus rapide et plus fiable.