Хочу всё знать. Язык Elm

Функциональное программирование в вебе.
3 минуты10272

Как вы наверняка заметили, в 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. Много времени он не отнимет, но наверняка вы вместе сможете провести пару весёлых часов.

web_developerfrontendwebjavascript
Нашли ошибку в тексте? Напишите нам.
Спасибо,
что читаете наш блог!