Узнайте об одном из новых дополнений к современному веб-стеку
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, на которые стоит обратить внимание:
- Phoenix - веб-фреймворк для новой сети
- Введение в Phoenix Framework и принципы его работы в действии
- Phoenix: введение в веб-платформу Elixir
Если вы хотите масштабировать, выберите эликсир
Эликсир используют тонна компаний:
- Adobe использовала Elixir для создания клиентского / облачного приложения для совместной работы с фотографиями.
- Discord использует Elixir для своей крупномасштабной системы обмена сообщениями, о которой вы, наверное, слышали. 5 миллионов одновременных пользователей? "Не стоит беспокоиться."
- Moz использует Elixir в качестве основной части своего набора инструментов цифрового маркетинга и SEO, Moz Pro.
- Financial Times использовала Elixir для разработки нескольких приложений.
- Motorola Solutions использует Erlang и Elixir для критически важных систем связи, которые должны быть надежными и отказоустойчивыми.
Многие другие также используют Erlang, например WhatsApp и Heroku.
Как мы видим из вышеупомянутых компаний, Elixir позволяет нам писать отказоустойчивый, масштабируемый код для параллельных систем, и поэтому он идеально подходит для систем обмена сообщениями и веб-приложений, которым может потребоваться эффективная обработка большого количества пользователей. Итак, если у вас есть планы построить что-то подобное, теперь вы знаете, в каком направлении смотреть.