Что происходит в комьюнити ELM?

Мой первый опыт с Elm датируется началом 2016 года. Ни документации, ни учебных материалов, ни примеров тогда толком не было. Покрутил эту игрушку и благополучно забыл.

1.5 года назад, когда брал интервью у знакомого из Германии, пересматривал ситуацию. В тот раз отпугнула история смены концепций, терминов, синтаксиса языка. Лично для меня, переход между 0.16 и 0.17 воспринимался как переход на другой язык... 0.18 также не обошёлся без кучи переименований и удалений "ненужного" синтаксиса.

С 0.18 этот карнавал, как-будто, удалось ввести в некоторые рамки. Компилятор и платформа стабилизировались. Так что решил позволить себе инвестировать немного времени в исследование.

1. Опыт разработки

Плагин для WebStorm перестал безбожно глючить. Работать можно. Hot reload нет и не предвидится, если это кому важно (мне – нет). В целом – неплохо.

В официальной CLI тулзе "elm" до сих пор нет возможности удалять пакеты автоматически. При удалении вручную начинаются проблемы. В качестве решения предлагают ставить какую-то стороннюю либу... Выглядит так, что исправить этот вопрос дело 15 минут, но подвижек нет.

2. Дизайн языка

Очень круто. Программирование будущего будет выглядеть примерно так. Сравнительно с TypeScript в плюсах оказывается: синтаксис (месиво скобочек в TS вызывает отвращение), типизация сайд-эффектов, отсутствие ООП, простота языка. Сравнительно с PureScript радуют: списки вместо массивов по дефолту, наличие Tuples, отсутствие навязчивого матана из ТК, минимум операторов, более внятный и логичный синтаксис, в т.ч. записей. Булевские значения, построенные на кастомных типах, а не костылях. Сравнительно с Reason ML: pure functional vs impure functional, оба варианта приводят к совершенно разным архитектурам приложения. Первый сложнее писать (требует перестройки мышления), но проще тестировать. В активе Elm адекватный синтаксис, а не карго-мешанина, дизайн языка в целом, простота. Впрочем, эти пункты подойдут к любому другому сравнению. Тот факт что из Elm за эти годы не позаимствовал хотя бы одну идею только ленивый разработчик фреймворка, говорит сам за себя.

3. Экосистема

Тут всё по прежнему печально. Число доступной информации и библиотек постепенно растёт, но недостаточно быстро. За примерами приходится буквально охотиться. Число (неустаревших) книг, например, измеряется пальцами на одной руке. Из бесплатных источников: elmprogramming и официальный гайд. С одной стороны, это не Idris. Разобраться, при желании и избытке времени, можно. С другой – делать продакшен проект на Elm я бы решился только в команде со знакомыми разработчиками на этом языке. Ну или это должен быть пет-проект без временных лимитов. Вероятность того, что придётся городить свои библиотеки оцениваю в 99.9%

4. Комьюнити

У руководства Elm интересный подход к созданию комьюнити. Много лет они яростно блокируют "хейтеров", всячески борются с ними, буквально ищут с фонарями по улицам. В разряд "хейтеров" записываются, например, те кто задают "неприятные" вопросы. А в разряд "неприятных", в свою очередь, попадают вопросы, на которые уже "много раз отвечали" (в закрытых от индексации чатах). В общем, идея понятна.... Последние два года Эван на конференциях рассказывает как сложно жить в мире, где столько троллей и хейтеров. До вопроса "Почему у других языков подобных сложностей не возникает?" они пока не дошли. Но тот факт, что определённая ПРОБЛЕМА есть, как-будто, заметили. Что радует.

В качестве эксперимента, 4 раза задавал вопросы в Slack чате. На три из них мне ответили, четвёртый не заметили. Отвечали в течение МИНУТ, не нужно ждать пока США проснётся, как это стандартно происходит с вопросами по софту. В общем, по этому пункту, остался приятно удивлён. Фидбек и ответы получить реально. Главное – не выглядеть хейтером :)

5. Выводы

В данный момент могу рекомендовать Elm для саморазвития миддлам и сениор-разработчикам. Как следующий шаг после TypeScript. Последний, в силу множества объективных причин, вряд-ли когда-нибудь дойдёт до Elm по выразительности и мощности системы типов. В лучшем случае, вы будете работать на унылом клоне типа Redux. Про переусложнённость TypeScript я промолчу: JS легаси есть JS легаси. Ценность SSR будет падать (так как бизнес ценность "индексации Гуглом", в свою очередь, усыхает с каждым годом – про это могу написать отдельно). Ценность "переиспользования кода на фронте и беке" также падает, в силу роста BAAS опций. Firebase, GraphCMS, Hasura, etc, и по другим причинам.

Ограничения Elm, однажды, могут показаться бизнесу и тимлидам не столь уж существенными. В ближайшие годы TS, очевидно, будет доминировать. А вот о том, что будет актуально через 5-10 лет, можно поспорить. Имеет ли смысл заглядывать так далеко в будущее? Для бизнеса, для стартапов – вряд ли. Для самообразования – да, имеет.