Подтвердить что ты не робот

Эликсир: обоснование, позволяющее восстановить переменные

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

4b9b3361

Ответ 1

Большинство функциональных языков не позволяют переупорядочивать переменные в одной области. Таким образом, эликсир, позволяющий это, определенно дает ему нефункциональное, императивное чувство. Проблема Эрланга - это, скорее, недостаток области видимости, а точнее, что в предложении целых функций имеется только одна область. У нас были серьезные дискуссии о том, следует ли вводить сферу применения, но в конце концов мы решили против него, поскольку это было обратно несовместимо с существующей системой. И разработчики ненавидят обратные противоречивые изменения.

У Erlang есть одно серьезное преимущество: когда вы ошибаетесь, вы обычно получаете сообщение об ошибке, чтобы вы могли СМОТРИ совершить ошибку. Это сравнило просто странное поведение, когда переменная не имеет значения, которое вы ожидаете от нее, которое MUCH сложнее обнаружить и исправить.

Лично я думаю, что проблема новых имен переменных, например, с использованием схемы номеров, сильно раздута. По сравнению с тем временем, которое требуется мне для разработки WHAT, я собираюсь сделать изменение имен переменных тривиально. И через некоторое время вы просто видите это, не задумываясь об этом. Честно.

EDIT:

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

Ответ 3

Потому что это проще.

Взгляните на этот вопрос, отправленный в список рассылки Erlang в 2009 году. В частности, эта часть:


Мне нравится сопоставление шаблонов в большинстве случаев, но я нахожу, что я пишу   достаточно кода, где мне нужно постепенно обновлять структуру данных и   что этот код является болью, когда у меня есть код:

X = foo(),
X1 = bar(X),
X2 = xyzzy(X1),
blah(X2).

а затем хотите изменить его на:

X = foo(),
X1 = whee(X),
X2 = bar(X1),
X3 = xyzzy(X2),
blah(X3).

Примечание редактора - это ответ на этот вопрос.

Это проходит через IRC. Это результат плохого присвоения имен переменных практика, и нет необходимости вводить переустройство для "исправления"; просто прекратите использовать отдельные буквы и счетчики в качестве имен переменных.

Если, например, было написано

 FooStateX    = foo(),
 PostBarX     = bar(FooStateX),
 OnceXyzziedX = xyzzy(PostBarX),
 blah(OnceXyzziedX).

Продемонстрированный код показывает, что в Erlang нет ничего необычного (обратите внимание на замечание "это проходит через IRC много" ). Возможность эликсира просто переписывать имена спасает нас от необходимости генерировать новые имена фиктивных вещей для вещей все время. Все это. Разумно иметь в виду, что оригинальные создатели Эрланг не пытались построить функциональный язык. Они были просто прагматичными разработчиками, у которых возникла проблема. Эликсирский подход - простой прагматизм.