Язык программирования Elm, его возможности

Язык программирования Elm, его возможности

В области программирования набирает популярность такая парадигма: всё чаще приложения строят так, что в них нет глобального состояния, которое произвольно меняется разными частями кода. Это можно заметить в появлении таких фреймворков, как React-js, Redux, Apache Samza или Lambda-архитектура. Главными компонентами такого подхода являются чистый функциональный язык, явное представление состояния приложения в виде одной сущности и шинная обработка событий, которые единообразно сохраняются в журнал и строго упорядочиваются по времени.

Преимущество подхода заключается в том, что эти события могут быть воспроизведены заново. При этом не требуется ни повторения действий во внешних системах, ни их симуляции. Можно просто изменить логику или пользовательский интерфейс в приложении и сразу посмотреть на конечный результат, к которому приводит та же самая последовательность действий. Кроме того, можно в любой момент остановить выполнение и откатиться к любому предыдущему моменту времени, что очень удобно при отладке кратковременных событий в UI, таких как анимация или скрывающиеся/раскрывающиеся элементы. Ниже приведен пример компонента для автозаполнения. Вверху отображается панель с кнопками управления и журнал событий.

 

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

К счастью, благодаря virtual-dom и React-js и практике их применения, первое не является проблемой, по крайней мере, в мире web-приложений. Даже наоборот, код приложения становится проще за счет того, что он пишется так, будто весь пользовательский интерфейс перерисовывается заново. Функциональная чистота языка при этом добавляет преимущество - если функция вызывается с одним и тем же аргументом несколько раз, то можно просто закэшировать результат ее выполнения. Вторая же проблема решается с помощью конструкций, которые не столь изящны, но достаточно просты.

Таким образом, можно сказать, что язык программирования Elm реализует данный подход являясь чистым, функциональным и реактивным. Он компилируется в JS-код и предназначен для реализации HTLM5-приложений (хотя проект по его использованию на серверной части также проводится). На официальном сайте Elm можно попробовать сам язык и посмотреть множество примеров, в том числе tutorial по архитекутре приложения с асинхронными запросами.

 ПредыдущаяСледующая