Узнайте об одном из новых дополнений к современному веб-стеку

Elixir - это функциональный язык с динамической типизацией, который построен на основе виртуальной машины Erlang и компилируется до байт-кода Erlang.

С момента своего выпуска в 2011 году Elixir стал одним из самых любимых языков, согласно опросу разработчиков Stack Overflow - и не зря. Это позволяет создавать очень масштабируемые и очень надежные приложения, а синтаксис также довольно приятный.

Хотя язык продвинулся в веб-приложениях с высокой степенью параллелизма, некоторые из наших читателей, возможно, еще не знакомы с ним. В этой статье мы дадим краткое введение в то, что такое Elixir и почему его можно использовать для программного проекта, в отличие от таких технологий, как Java, Ruby и другие.

Что такое Эрланг? Краткая история

Каждое обсуждение Elixir неизбежно должно начинаться с обсуждения Erlang.

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

Чтобы сделать этот замечательный набор инструментов более доступным, Хосе Валим создал Elixir.

Elixir был задуман как Ruby-подобный язык, который предоставит разработчикам доступ ко всем мощным инструментам, которые Erlang предоставляет своим разработчикам для выполнения параллельных и параллельных вычислений. Elixir должен был включать функции, которые были необходимы, но отсутствовали в Erlang.

В этом смысле это удалось. В то время как Erlang и Elixir по-прежнему широко используются в своих областях, Elixir гораздо более популярен и набирает популярность.

Основные характеристики Эликсира

«Язык программирования Elixir объединяет функциональное программирование с неизменяемым состоянием и акторный подход к параллелизму в аккуратном современном синтаксисе. И он работает на промышленной высокопроизводительной распределенной виртуальной машине Erlang. Но что все это значит? "

- Дэйв Томас, Эликсир программирования

  • Elixir построен на основе виртуальной машины Erlang. Elixir имеет доступ ко всем инструментам параллелизма, к которым имеет доступ Erlang, что делает его одним из самых мощных современных языков для создания масштабируемых распределенных систем.
  • Elixir имеет синтаксис, подобный Ruby. Если вы уже программировали на Ruby, синтаксис Elixir покажется вам очень знакомым. Ruby - один из самых кратких и ориентированных на производительность языков, но ему не хватает производительности и параллелизма. Erlang VM решает обе эти проблемы, поэтому Elixir - лучшее из обоих миров.
  • Elixir работает. Хотя Elixir и Erlang можно охарактеризовать как принадлежащие к отдельной группе (они оба ориентированы на процессы), Elixir также имеет все конструкции, которые вы ожидаете от современных языков программирования FP. В частности, неизменяемые структуры данных очень сильно помогают параллелизму, а сопоставление с образцом отлично подходит для написания декларативного кода.
  • В Elixir есть динамическая типизация. В Elixir есть динамическая типизация, в отличие от других функциональных языков, таких как Haskell и Scala. Это означает, что типы проверяются во время выполнения, а не во время компиляции. Хотя это может быть недостатком при создании критически важных систем, это также увеличивает скорость разработки простых веб-приложений. Статические типы могут быть введены в Elixir через typespecs (спецификации типов).

Преимущества Эликсира

ЛУЧ

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

Что касается Erlang, Elixir имеет следующие три характеристики:

  • Параллелизм. Эликсир использует легкие потоки выполнения (называемые процессами). Они изолированы, работают на всех ЦП и обмениваются сообщениями. Вместе с неизменностью данных, обусловленной функциональной природой языка, это упрощает написание параллельных программ на Elixir.
  • Масштабируемость. Эти же процессы позволяют нам легко масштабировать системы либо по горизонтали (добавление дополнительных машин в кластер), либо по вертикали (более эффективно используя доступные ресурсы машины).
  • Надежность. У Elixir и Erlang есть уникальный подход к отказоустойчивости. В то время как в производственной среде иногда неизбежно возникают сбои, легковесные процессы могут быть быстро перезапущены системой супервизора. Это касается большинства ошибок, которые не связаны с серьезными ошибками в разработке программного обеспечения.

От Erlang Elixir также получает Open Telecom Platform. OTP является частью стандартной библиотеки Erlang, которая использовалась для обеспечения отказоустойчивости в телекоммуникационных системах, но в настоящее время его использование намного шире - его можно использовать практически для любого типа параллельного программирования.

По сравнению с обычными решениями OTP дает отличную основу, позволяющую разработчику тратить время на реализацию реальной бизнес-логики. С другими языками много времени тратится на сантехнику.

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

Кроме того, Elixir во многом является функциональным языком программирования.

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

В отличие от основных языков программирования, таких как Java или Python, код Elixir структурирован в виде функций и модулей (групп функций), а не объектов и классов. Кроме того, все типы данных неизменяемы. Например, вызов функции для переменной приведет к созданию новой переменной, а не к изменению переменной на месте.

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

  • лучшая ремонтопригодность
  • более четкое тестирование и отладка
  • более легкая работа с параллельными программами
  • абстракции высокого уровня, которые упрощают написание и понимание кода

Феникс

Если вы хотите использовать лучший в мире веб-фреймворк, вам придется использовать Elixir.

Phoenix так же прост в использовании, как и любой из ваших обычных веб-фреймворков MVC (например, Rails и Django), но он также поддерживается BEAM. Это позволяет эффективно создавать веб-приложения, не жертвуя при этом скоростью или удобством обслуживания.

Оказывается, облегченные процессы Elixir / Erlang отлично подходят для решения проблем параллелизма и масштабируемости в веб-сервисах. Хотя Phoenix Channels может обеспечить 2 миллиона соединений WebSocket на одном устройстве, емкость можно увеличить, распределяя трафик по большему количеству узлов.

Однако у него есть и недостатки. Экосистема Phoenix и Elixir не так развита, как Ruby on Rails или Python Django, поэтому можно столкнуться с проблемой, когда «включены не все батареи». Но в целом преимущества перевешивают затраты.

Вот несколько полезных ресурсов по Phoenix, на которые стоит обратить внимание:

Если вы хотите масштабировать, выберите эликсир

Эликсир используют тонна компаний:

  • Adobe использовала Elixir для создания клиентского / облачного приложения для совместной работы с фотографиями.
  • Discord использует Elixir для своей крупномасштабной системы обмена сообщениями, о которой вы, наверное, слышали. 5 миллионов одновременных пользователей? "Не стоит беспокоиться."
  • Moz использует Elixir в качестве основной части своего набора инструментов цифрового маркетинга и SEO, Moz Pro.
  • Financial Times использовала Elixir для разработки нескольких приложений.
  • Motorola Solutions использует Erlang и Elixir для критически важных систем связи, которые должны быть надежными и отказоустойчивыми.

Многие другие также используют Erlang, например WhatsApp и Heroku.

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