·

Что такое Эликсир?

Мы уже выучили наизусть, что

Эликсир – динамический функциональный язык программирования, предназначенный для создания масштабируемых и поддерживаемых приложений.

Пришло время прояснить человеческую суть, лежащую под этим википедизмом.

Начнём с конца. На Эликсире пишут приложения. О, как! Они написаны настолько понятно, что становится легко добавлять новые возможности и сопровождать их в эксплуатации. Благодаря простому синтаксису и правильным идеям в основе языка, понять незнакомый проект на Эликсире не составляет труда. Другими словами, приложения являются легко поддерживаемыми.

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

Под словом динамический подразумевается динамическая типизация. Это не значит, что строки складываются со списками – тут произойдёт ошибка. Типизация хоть и динамическая, но строгая. Типы в Эликсире просто не указываются явно – компилятор сам разберётся что к чему.

Осталось разъяснить последний термин, что же такое ф…

– А что такое функциональный язык? – нетерпеливый читатель.

…ункциональный язык программирования. Как раз об этом расскажем дальше.

Функциональное программирование

Парадигма, которой придерживаются языки программирования, – вещь туманная. Любой язык относится к главной парадигме, например, объектно-ориентированной, при этом дополнительно использует особенности других парадигм. Привычная практика программирования тесно связана с классами, объектами, прототипами и процедурами. Работа с этими абстракциями предполагает изменение внутреннего состояния компонентов системы. Из-за таких изменений бывает, что методы одного и того же класса, дают разный результат. Виновата в этом инкапсуляция.

Инкапсуляция позволяет хранить данные внутри объектов вместе с методами для работы с ними. Изменяя состояние данных, изменяется результат выполнения методов. Такая ситуация называется побочным эффектом – вроде подаём на вход метода одно и то же, а на выходе получаем разный результат. Становится сложно разобраться с таким кодом при отладке.

Спасают нас чистые функции, работа которых достигается неизменяемостью данных, говоря на сленге – иммутабельностью. В чистых функциях при одинаковом входе воспроизводится одинаковый выход. В качестве примера, возьмём реализацию хеш-функции MD5: если сто раз подадим на вход строку Elixir, то сто раз получим в ответ a12eb062eca9d1e6c69fcf8b603787c3. Без вариантов.

Добиться такого кода можно, отказавшись от инкапсуляции. Было бы странно отказываться от объектно-ориентированных механизмов в объектно-ориентированном языке. Куда разумнее перенестись в функциональную плоскость и отдать решение задачи функциональному языку.

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

Под этот критерий точно подходит Эрланг, благодаря OTP – фреймворку для создания распределённых сетевых приложений (говоря грубо). Мешает одна проблема, язык застыл в прошлом (позапрошлом?) десятилетии, а главные изменения нужны в первую очередь мейнтейнерам, а не разработчикам его использующим.

Почему не Эрланг?

В диком мире можно встретить самых настоящих эрлангистов. Более того, свежая кровь до сих пор приходит в Эрланг, но не в том количестве, чтобы выстраивать современную экосистему вокруг языка. На помощь пришёл рубист со стажем – Жозе Валим, и решил провести ребрендинг.

Эликсир можно назвать Эрлангом 2.0. Помимо надёжности прародителя, в Эликсире:

  • появилась экосистема под современные нужды: пакетные менеджеры, инструменты выполнения задач, фреймворк для тестирования и т.п.;
  • улучшился синтаксис – порог вхождения снизился;
  • началась кампания по пиару «свежего» языка для оживления сообщества;
  • упростилось метапрограммирование;
  • устранились некоторые недостатки, например, работа со строками;
  • были написаны новые полезные абстракции и надстройки.

Эликсир всё ещё продолжает искать себя, и как только он встанет на ноги, отличий станет ещё больше.

Почему функциональные языки снова становятся популярными?

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

Сравнение с конкурентами

Каждый язык старается занять свою нишу. Го и Раст – фантастические по скорости языки, они обгоняют в том числе и Эликсир. Однако сфера применения каждого из них разнится. Раст – системный язык программирования для решения низкоуровневых задач. Вряд ли на нём получится быстро написать отказоустойчивый бэкенд для приложения реального времени.

Сравнивать Эликсир с Го немного сложнее – они похожи. Начнём с того, что Го более низкоуровневый, чем Эликсир. Приготовьтесь, что вам придётся писать много кода с нуля. Го подходит для написания веб-микросервисов, как и Эликсир, однако второй из них гораздо лучше справится с группами микросервисов объединенными в одну систему. Го отлично подойдёт для конкретных небольших задач, в которых важна производительность. Эликсир же поможет легко написать распределённые веб-приложения с элементами реального времени.

А если нужна повышенная надёжность работы системы, то Эликсир точно ваш выбор – ему не страшны ошибки и падения, т.к. в языке существуют механизмы для обработки подобных ситуаций. Написать безопасный конкурентный код на другом языке программирования – та ещё задача.

С чего начать?

Надеемся, вас впечатлил Эликсир, и вам не терпится его попробовать. Предлагаем реализовать живую распределённую «записную книжку» на Эликсире. Таким образом, вы сможете пощупать Эликсир и познакомиться с его ключевыми возможностями на практике. Ответы на многие вопросы вы сможете найти в документации, а также в любой момент обратиться к статьям, которые мы регулярно переводим.

Удачи в изучении!

P. S. И не забудьте подписаться на нашу почтовую рассылку. Всё самое интересное мы пишем именно туда.

© 2020 / Россия Любые мысли и вопросы пишите на elixir@wunsh.ru.