Жидкий Erlang

24/09/2013

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

На самом деле, если проникнутся всей красотой и простотой Эрланга, вдруг осознаешь, что Эликсир и не нужен вообще, по крайней мере для того узкого круга задач, для которого создавался его отец. Elixir отличный сахарок, поможет новичкам проникнутся виртуальной машиной Эрланга и даст им волю писать хипстерский код. Он отлично подойдет для разработки веб приложений, т.к. код на нем читать намного легче, но это лишь дело привычки, тем более что сейчас уже есть как минимум два фреймворка для этих дел: Dynamo и weber. Первый пошел по соглашениям Эрланга, второй от них ушел намного дальше и смотрится привычнее.

Если честно, я до сих пор не знаю какую цель преследуют разработчики. Это не ООП, это сложно назвать ФП, на этом сейчас сложно писать. Сам язык как-то плывет в своих соглашениях: почему в большинстве функций данные идут первым аргументом, а в Regex - вторым? Первое понятно – для оператора pipe |>, но что их заставило сделать все наоборот в Regex? Я, например, хочу писать так:

"Hello World!"
|> String.downcase
|> Regex.replace(%r/[!\?;,.]/, " ")
|> Regex.replace(%r/\s+/, "_")

Но использовать регэкспы так я не смогу. Кто мне объяснит зачем они так поступают со мной? В Эрланге, кстати, у некоторых тоже есть с этим проблемы или такой код в порядке вещей?

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

Еще один момент, который мне не по душе – они оставили без внимания OTP. Хочешь OTP? Юзей его хардкорно, без сахара, вызывай нативные функции и пиши код как в Эрланге, но для нашего лексера. Я считаю это неправильным, но надеюсь что проблему решат. Зато есть решения от коммьюнити.

Последнее преследует не только Elixir, проблема имеет место быть и в других языках, это менеджер зависимостей. Почему все они используют git (github в частности)? Надо установить библиотеку? Клонируй репозиторий и жди. Ладно, если бы оно просто было медленным (гитхаб в последнее время стал каким-то тормозным или проблема только у меня?), так самое обидное – не все держат главные ветки в «зеленом» статусе. В Ruby эта проблема решена – RubyGems. В Elixir эту проблему тоже пытаются решить, но ее как-то не особо продвигают, кажется, что об expm знают только избранные.

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

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