Elixir est un langage de programmation fonctionnel , concurrent et généraliste de haut niveau qui s'exécute sur la machine virtuelle BEAM , également utilisée pour implémenter le langage Erlang . Elixir s'appuie sur Erlang et partage les mêmes abstractions pour la création d'applications distribuées et tolérantes aux pannes . Elixir fournit également des outils et une conception extensible . Cette dernière est prise en charge par la métaprogrammation à la compilation avec des macros et le polymorphisme via des protocoles.
La communauté organise des événements annuels aux États-Unis, en Europe, et au Japon, ainsi que des événements et conférences locaux de moindre envergure.
Histoire
José Valim a créé le langage de programmation Elixir dans le cadre d'un projet de recherche et développement chez Plataformatec. Son objectif était d'améliorer l'extensibilité et la productivité de la machine virtuelle Erlang tout en maintenant la compatibilité avec l'écosystème Erlang.
Elixir est destiné aux sites et applications de grande envergure. Il utilise des fonctionnalités de Ruby , Erlang et Clojure pour développer un langage à haute concurrence et faible latence. Il a été conçu pour gérer de grands volumes de données. Elixir est également utilisé dans les télécommunications, le commerce électronique et la finance.
En 2021, l'initiative Numerical Elixir a été annoncée dans le but d'intégrer l'apprentissage automatique, les réseaux neuronaux, la compilation GPU, le traitement des données et les notebooks de calcul à l'écosystème Elixir.
Caractéristiques
- Compile en bytecode pour la machine virtuelle BEAM d' Erlang . Interopérabilité complète avec le code Erlang, sans impact sur l'exécution .
- Évolutivité et tolérance aux pannes, grâce aux mécanismes de concurrence légers d'Erlang
- Outils intégrés pour la gestion des dépendances, la compilation du code, l'exécution des tests, le formatage du code, le débogage à distance et bien plus encore.
- Un REPL interactif intégré aux programmes en cours d'exécution, y compris les serveurs web Phoenix , avec rechargement du code et accès à l'état interne
- Tout est une expression
- Correspondance de modèles pour promouvoir un code assertif
- Suggestions de type pour les outils d'analyse statique
- Données immuables, avec une emphase, comme dans d'autres langages fonctionnels , sur la récursivité et les fonctions d'ordre supérieur plutôt que sur les boucles à effets de bord.
- Programmation concurrente sans partage via passage de messages ( modèle d'acteurs )
- Collections paresseuses et asynchrones avec flux
- Programmation orientée vers le secteur ferroviaire via la
withconstruction - Métaprogrammation hygiénique par accès direct à l' arbre de syntaxe abstraite (AST). Les bibliothèques implémentent souvent de petits langages spécifiques au domaine , comme pour les bases de données ou les tests.
- Exécution du code à la compilation. Le compilateur Elixir s'exécute également sur la BEAM ; les modules en cours de compilation peuvent donc exécuter immédiatement le code déjà compilé.
- Le polymorphisme s'effectue via un mécanisme appelé protocoles. La répartition dynamique , comme en Clojure , n'est cependant pas multiple car les protocoles Elixir répartissent les appels sur un seul type.
- Prise en charge de la documentation via des chaînes de documentation de type Python dans le langage de formatage Markdown
- Prise en charge d'Unicode et des chaînes UTF-8
Exemples
Les exemples suivants peuvent être exécutés dans un iexshell ou enregistrés dans un fichier et exécutés à partir de la ligne de commande en tapant .elixir <filename>
Exemple classique de « Hello world » :
Opérateur de canalisation :
Appariement de motifs (ou déstructuration) :
Correspondance de modèles avec plusieurs clauses :
Lecture asynchrone de fichiers avec des flux :
Corps multifonctionnels avec gardes :
Bases de données relationnelles avec la bibliothèque Ecto :
Génération séquentielle de mille processus :
Exécution asynchrone d'une tâche :