Есть ли что-то, что может делать Elixir, чего нет в Erlang, или наоборот?

103

Этот вопрос находится в контексте виртуальной машины Beam и возможностей, которые она предоставляет, а не в общем контексте того, что может делать полный язык Тьюринга. Я хочу потратить некоторое время на изучение чистого Erlang или Elixir. Я понимаю основные различия между ними и склоняюсь к Эликсиру из-за макросов, лучшего синтаксиса и более быстрого развития языка в этот день.

У меня вопрос: если я выберу Elixir, наткнусь ли я на то, что я не могу сделать в нем, но могу сделать в Erlang? Могу ли я использовать с Elixir все OTP, все библиотеки Erlang, перезагрузку кода и т. Д.?

Я не спрашиваю о чьем-то предпочтении между ними; просто факты о возможностях языков. Желательно от того, кто использовал оба в производстве.

Саша Шияк
источник
20
@hedgehog не мнение, факт. вопрос: «У меня вопрос: если я выберу Elixir, наткнусь ли я на то, что я не могу сделать, но могу сделать в Erlang? Могу ли я использовать все OTP, все библиотеки Erlang, перезагрузку кода и т. д. с Elixir?» и ответ основан на фактах, а не на мнениях.
Saša Šijak
4
На этот вопрос ответ таков: все, что вы можете делать в Erlang, возможно в Elixir. Но название предполагает, что вопрос в том, во что вы должны инвестировать, и здесь ответ - «это зависит от обстоятельств». Что ты хочешь делать? Для веб-приложений Elixir намного лучше, потому что он был создан для решения этой проблемы. Для некоторых типов распределенных систем вы можете найти простоту Erlang лучше. Отсутствие функций часто бывает хорошо. Изучение только Erlang поможет вам сосредоточиться на самом важном: OTP.
tkowal
2
@ SašaŠijak Я изменил название вопроса, чтобы ИМО лучше отражало суть вопроса - вернитесь, если не согласны.
Paweł Obrok
2
@ PawełObrok отличное редактирование, оно правильно резюмирует то, что мне было интересно узнать
Саша Шияк
3
каждый раз, когда я задаю такие вопросы, я получаю -10 голосов против
arisalexis

Ответы:

37

Просто предисловие - я использовал только Elixir в производстве, а не Erlang.

Я честно рекомендую Эликсир. Это мое мнение и не обязательно правильное для вас, но ниже я перечислю свои причины, почему.

  1. Производительность: Я работаю с Ruby / Rails, поэтому синтаксис и стиль Elixir мне были очень знакомы. Один из основных факторов, который помогает мне определить, изучать ли язык или нет, - это то, насколько я могу продуктивно владеть им - в основном, почему я выбрал Ruby. Эликсир такой же. Я могу работать с ним так же быстро, как и с Ruby, со всеми дополнительными преимуществами параллелизма и сопоставления с образцом.
  2. Erlang: Поскольку Elixir построен на основе Erlang и компилируется до erlang и beam vm, у вас есть доступ ко всем модулям и пакетам erlang. Так что, если вы беспокоитесь об использовании эликсира и упускаете все возможности Erlang, вам не следует беспокоиться. В Elixir даже есть собственные реализации большинства более крупных функций Erlang / OTP, таких как GenServer, GenEvent и т. Д.
  3. Сообщество / Ресурсы: Сообщество Elixir действительно отличное. Slack-канал - действительно популярный и отличный способ получить ответы на вопросы новичков. По этому языку уже написано несколько действительно хороших книг (Programming Elixir 1.2 - Дэйв Томас, автор Ruby Pickaxe), которые упрощают освоение языка.

На самом деле, если у вас возникнут проблемы с этими двумя, вы, вероятно, придете к тому же решению, что Elixir - гораздо лучший язык со всеми функциями Erlang + More. Он тоже растет, я не могу вспомнить точные цифры, но я помню, как читал что-то с веб-сайта Hex (менеджер пакетов) о значительном увеличении загрузок пакетов.

Харрисон Лукас
источник
14
Elixir не компилируется до Erlang, он компилируется до кода BEAM. Эликсир НЕ похож на coffeescript и др. al. которые просто пишут JS.
Peter R
64

Вы не должны спотыкаться о том, что вы можете сделать в одном из них, чего не можете сделать в другом, поскольку вы можете свободно вызывать код Elixir из Erlang и наоборот. Вы даже можете легко смешивать файлы Erlang и Elixir в одном проекте.

В Эликсире:

:erlang_module.erlang_function(args)

в Эрланге:

'Elixir.ElixirModule':elixir_function(args)
Павел Оброк
источник
2
Иногда это может быть немного сложно при создании релизов с вложенными зависимостями или в других очень специфических случаях, но я думаю, что это определенно правильный ответ. ПРИМЕЧАНИЕ : при работе на машинах с очень ограниченными ресурсами добавление зависимостей Elixir и Elixir в выпуск может быть более тяжелым с точки зрения памяти. Так что, если я не ошибаюсь, иногда может случиться так, что использование чистого Erlang может иметь преимущество в виде экономии нескольких мегабайт памяти, что упрощает предотвращение сбоев, когда не остается места для расширения виртуальной машины.
Laymer
37

TL; DR - Начать с Эликсира

У Erlang более крутая кривая обучения по сравнению с Elixir. Как только вы начнете изучать Elixir, вы автоматически начнете изучать Erlang. Следовательно, начните с Эликсира. Эликсир написан на Эрланге и Эликсире. См. Распространение на Github (поскольку в Elixir полно макросов, известных как метапрограммирование). Распространение кода проекта Elixir

Вы можете использовать Elixir с Erlang и наоборот, отсюда и полная экосистема Erlang с более чем 20-летними библиотеками.

Подробнее о решениях Erlang

Производительность Elixir "из коробки" достигается за счет упора на инструменты и удобство манипулирования данными. Дизайн системы одинаков в Elixir и Erlang, но Elixir удаляет много шаблонного кода и его легче расширять. Удаление шаблонов повышает производительность и позволяет программистам быстрее получать обратную связь, что очень важно, если вы хотите как можно быстрее выпустить свой продукт на рынок. Меньше шаблонов также делает разработчиков счастливыми, а счастливые разработчики - это невероятно продуктивные разработчики.

Джо Армстронг (изобретатель Эрланга) блоге об Эликсире

Начните здесь, чтобы узнать об Эликсире - Начало работы

Как только вы почувствуете, что все идет хорошо, продолжайте практиковаться в упражнениях и других ресурсах .

Сайрам
источник
3

Есть несколько вещей. Я думаю, вы не можете сделать рекурсивную анонимную функцию в Elixir. Честно говоря, это то, что за 8+ лет работы с Erlang, я не думаю, что мне когда-либо приходилось делать, и если бы я сделал это, это можно было бы легко сделать другим способом. Вероятно, есть еще несколько подобных вещей, которые, честно говоря, вы можете игнорировать.

В общем, что касается вещей, которые волнуют большинство людей, все, что вы можете делать в Erlang, вы можете делать в Elixir и наоборот. Сообщество на стороне Elixir кажется более активным, поэтому я предлагаю начать с него. Я недавно перешел с Erlang на Elixir, и за исключением нескольких необычных вещей в собственном я могу сказать, что это довольно простой переход.

Захари К.
источник