Хочу всё знать. Язык Elm
Как вы наверняка заметили, в IT существует явный тренд функционального программирования. Это связано с растущими объёмами данных, желанием обрабатывать интерактивную информацию, да и вообще это помогает сократить количество кода.
Канонически так сложилось, что веб – последняя сфера IT, о которой вы подумаете, когда речь заходит про ФП. Хотя именно здесь часто приходится иметь дело с динамическими потоками данных и реагировать на последние действия пользователя, статическая основа всё ещё устраивает обе стороны. Но так будет далеко не всегда. Если вы хотите далеко пойти в этой области, придётся обучиться ФП на JavaScript. Или просто обратить внимание на Elm.
Откуда он взялся
Elm не задумывался как язык, который должен перевернуть мир и веб. Он был придуман студентом Эваном Чаплицки для дипломной работы. Он хотел показать, насколько упростится веб-разработка при помощи функционального программирования. Идея имела успех: год спустя, устроившись в компанию Prezi, он занялся полноценной разработкой языка. В 2016, перейдя в NoRedInk, он запустил проект Elm Software Foundation, где каждый желающий мог поучаствовать в развитии языка.
Преимущества
Чаще всего главная цель использования ФП – ориентация не на частные реализации, как в императивном случае, а на потоковые, динамические данные. В «классическом программировании» выражение z = x + y ориентируется состояние переменных к моменту исполнения. Дальнейшее изменение значений x и y на z никак не повлияет. В реактивном программировании (РП) результат выражения будет пересчитываться каждый раз при изменении аргументов. Если вы работаете с вебом, то наверняка знакомы с самой популярной реализацией РП – ReactiveX – библиотекой, призванной упростить событийное программирование. Elm – инструмент из той же серии.
Среди плюсов языка можно выделить следующие:
- Компиляция в JavaScript. Это универсальный инструмент для частных реализаций на популярном языке веба и не только.
- Никаких Runtime-ошибок. Все они отлавливаются на этапе компиляции. Подтверждение этой теории – более 80 тысяч строк кода в исполнении NoRedInk и ни одной Runtime-ошибки за 2 года.
- Производительность. На официальном сайте приведено сравнение программных реализаций, выполненных в разных фреймворках. По производительности Elm незначительно, но лидирует.
Синтаксис
Синтаксис также можно отнести к плюсам, так как формально это всё тот же JavaScript, только без ряда служебных символов. Во всяком случае, привыкнуть к нему просто:
import Html exposing (text) import String {- Usually we name all the functions we use. So the following function is named `increment` and we can refer to it by that name anywhere in this file. -} increment n = n + 1 add1 = \n -> n + 1 main = text (toString (increment (add1 40)))
Обратная сторона – это само по себе программирование на Elm. Как и в любом случае ФП, здесь необходимо мыслить широкими категориями. Как показывает практика, на перестройку хватит пары часов. После того, как голова заработает в нужном направлении, вы сможете полностью насладиться языком и его возможностями.
Как изучить
Основной источник мудрости, как и у любого молодого языка – официальный сайт. Здесь есть туториал по языку, FAQ и несколько примеров.
Видеопрезентация Эвана Чаплицки, посвящённая реактивному программированию на Elm, доступна, естественно, на YouTube.
Для любителей бумажных изданий есть редкий экземпляр – «Elm in Action» Ричарда Фелдмана. Правда, достать её будет достаточно тяжело, придётся попотеть с пересылками из США.
Я сам считаю, что куда удобнее скачать и распечатать книгу, посвящённую Elm, на ресурсе GitBook. Она наиболее полная, грамотно скомпонована из существующих в интернете, в том числе оригинала Чаплицки.
Перспективы
К сожалению, развитие Elm Software Foundation остановилось всё в том же 2016 году. Сам Чаплицки уже почти не работает над Elm. Вместо этого он ездит по миру, выступает на конференциях и университетах, рассказывает, почему это язык будущего.
Но списывать Elm пока рано. Во-первых, это действительно удобный язык и он медленно увеличивает число последователей естественным путём. К примеру, в рейтинге TIOBE он уже входит в первую сотню. Во-вторых, конкурентов у Elm практически нет. Все, кого можно к ним причислить, или покрывают больший пласт программирования, или практически неизвестны. А, в-третьих, кто знает, возможно завтра Эван или NoRedInk всерьёз возьмутся за развитие и тогда Elm станет мейнстримом.
В общем, если вы работаете в вебе, обязательно познакомьтесь с Elm. Много времени он не отнимет, но наверняка вы вместе сможете провести пару весёлых часов.