Y a-t-il des choses qu'Elixir peut faire qu'Erlang ne peut pas faire, ou vice versa?

103

Cette question se situe dans le contexte de la machine virtuelle Beam et des capacités qu'elle fournit, et non dans le contexte général de ce qu'un langage complet de Turing peut faire. Je veux investir du temps pour apprendre l'Erlang pur ou l'Elixir. Je comprends les différences fondamentales entre les deux et je me penche vers Elixir en raison des macros, d'une meilleure syntaxe et d'un développement plus rapide du langage aujourd'hui.

Ma question est: si je choisis Elixir, vais-je tomber sur quelque chose que je ne peux pas faire dedans, mais que je peux faire à Erlang? Puis-je utiliser tous les éléments OTP, toutes les bibliothèques Erlang, le rechargement de code, etc. avec Elixir?

Je ne demande pas la préférence de quelqu'un entre les deux; juste des faits sur les possibilités des langues. De préférence de quelqu'un qui a utilisé les deux en production.

Saša Šijak
la source
20
@hedgehog pas une opinion, un fait. La question est "Ma question est: si je choisis Elixir, est-ce que je vais tomber sur quelque chose que je ne peux pas faire, mais que je peux faire à Erlang? Puis-je utiliser tous les trucs OTP, toutes les bibliothèques Erlang, recharger du code, etc. avec Elixir?" et la réponse est basée sur des faits et non sur des opinions.
Saša Šijak
4
Pour cette question, la réponse est: tout ce que vous pouvez faire à Erlang est possible dans Elixir. Mais le titre suggère que la question est de savoir dans quoi investir et ici la réponse est "ça dépend". Qu'est-ce que tu veux faire? Pour les applications Web, Elixir est beaucoup plus agréable, car il a été créé pour résoudre ce problème. Pour certains types de systèmes distribués, vous pouvez trouver la simplicité d'Erlang supérieur. Le manque de fonctionnalités est souvent la bonne chose. Apprendre seulement Erlang vous aidera à vous concentrer sur l'élément le plus important: OTP.
tkowal
2
@ SašaŠijak J'ai changé le titre de la question pour que l'OMI reflète mieux ce dont il s'agit - revenez si vous n'êtes pas d'accord.
Paweł Obrok
2
@ PawełObrok super montage, il résume à juste titre ce que j'étais intéressé de savoir
Saša Šijak
3
chaque fois que je fais ce genre de questions, je reçois -10
votes négatifs

Réponses:

37

Pour commencer, je n'ai utilisé que Elixir dans la production et non Erlang.

Je recommanderais honnêtement Elixir. Ceci est mon opinion et pas nécessairement la bonne pour vous, mais ci-dessous je vais énumérer mes raisons.

  1. Productivité: Je viens d'un fond Ruby / Rails, donc la syntaxe et le style d'Elixir sont quelque chose qui m'est très familier. L'un des principaux facteurs qui m'aide à déterminer si j'apprends ou non une langue est ma productivité - principalement la raison pour laquelle j'ai choisi Ruby. L'élixir est le même. Je peux y travailler aussi vite que je peux Ruby avec tous les avantages supplémentaires de la concurrence et de la correspondance de modèles.
  2. Erlang: Puisque Elixir est construit au-dessus d'Erlang et se compile en erlang et le beam vm, vous avez accès à tous les modules et packages erlang. Donc, si vous craignez d'utiliser elixir et de manquer toutes les fonctionnalités d'Erlang, vous ne devriez pas l'être. Elixir a même ses propres implémentations de la plupart des plus grandes fonctionnalités Erlang / OTP telles que GenServer, GenEvent, etc.
  3. Communauté / Ressources: La communauté Elixir est vraiment formidable. La chaîne Slack est très populaire et constitue un excellent moyen d'obtenir des réponses aux questions des débutants. Il existe déjà de très bons livres écrits sur le langage (Programming Elixir 1.2 - Dave Thomas, auteur de Ruby Pickaxe) qui facilitent également l'accès au langage.

Vraiment, si vous avez un désordre avec les deux, vous arriverez probablement à la même décision qu'Elixir est un langage beaucoup plus agréable avec toutes les fonctionnalités d'Erlang + More. Il est également à la hausse, je ne me souviens pas des chiffres exacts, mais je me souviens avoir lu quelque chose sur le site Web Hex (gestionnaire de paquets) à propos d'une augmentation considérable des téléchargements de paquets.

Harrison Lucas
la source
14
Elixir ne compile pas en Erlang, il se compile en code BEAM. Elixir n'est PAS similaire à coffeescript, et. Al. qui écrivent juste JS.
Peter R
64

Vous ne devriez pas tomber sur tout ce que vous pouvez faire dans l'un que vous ne pouvez pas dans l'autre, car vous pouvez appeler librement le code Elixir depuis Erlang et vice-versa. Vous pouvez même facilement mélanger des fichiers Erlang et Elixir dans un seul projet.

Dans Elixir:

:erlang_module.erlang_function(args)

à Erlang:

'Elixir.ElixirModule':elixir_function(args)
Paweł Obrok
la source
2
Cela peut parfois être un peu délicat lors de la construction de versions avec des dépendances imbriquées ou d'autres cas très spécifiques, mais je pense que c'est certainement la bonne réponse. REMARQUE : si vous utilisez des machines très limitées en ressources, l'ajout de dépendances Elixir et Elixir à une version peut être plus lourd en termes de mémoire. Donc, si je ne me trompe pas, il peut parfois arriver que s'en tenir à l'Erlang pur puisse avoir l'avantage d'économiser quelques mégaoctets de mémoire, ce qui permet d'éviter plus facilement les plantages lorsqu'il n'y a plus d'espace pour étendre la VM.
Laymer
37

TL; DR - Commencez avec Elixir

Erlang a une courbe d'apprentissage plus raide que Elixir. Une fois que vous aurez commencé à apprendre Elixir, vous commencerez automatiquement à apprendre Erlang. Par conséquent, commencez par Elixir. Elixir est écrit en Erlang et Elixir. Voir la distribution sur Github (puisque Elixir regorge de macros aka méta-programmation). Distribution du code de projet Elixir

Vous pouvez utiliser Elixir avec Erlang et vice-versa, d'où l'écosystème Erlang complet de plus de 20 ans de bibliothèques.

Plus de détails d' Erlang Solutions

La productivité «prête à l'emploi» d'Elixir est obtenue grâce à une forte concentration sur l'outillage et la commodité dans l'expression de la manipulation des données. La conception du système est la même dans Elixir et Erlang, mais Elixir supprime beaucoup de code standard et est plus facile à étendre. La suppression du passe-partout augmente la productivité et permet aux programmeurs d'obtenir des commentaires plus rapidement, ce qui est crucial lorsque vous souhaitez lancer votre produit sur le marché le plus rapidement possible. Moins de passe-partout rend également les développeurs heureux, et les développeurs heureux sont des développeurs productifs sans surprise.

Article de blog de Joe Armstrong (l'inventeur d'Erlang) sur Elixir

Commencez ici pour en savoir plus sur Elixir - Premiers pas

Une fois que vous sentez que cela se passe bien, travaillez votre chemin vers la pratique de l' exercice et d' autres ressources .

Sairam
la source
3

Il y a plusieurs choses. Je pense que vous ne pouvez pas faire une fonction anon récursive dans Elixir. Maintenant, pour être honnête, c'est quelque chose que je ne pense pas avoir jamais eu besoin de faire en plus de 8 ans d'Erlang, et si je le faisais, cela pourrait être fait facilement d'une autre manière. Il y a probablement d'autres choses comme ça que vous pouvez ignorer très honnêtement.

En général, pour ce que la plupart des gens se soucient de tout ce que vous pouvez faire à Erlang, vous pouvez le faire dans Elixir et vice versa. La communauté du côté Elixir semble être plus active donc je suggérerais de commencer par là. J'ai récemment déménagé d'Erlang à Elixir et à l'exception de quelques choses fantaisistes dans Proper, je peux dire que c'est une transition assez facile

Zachary K
la source