Эликсир (язык программирования) - Elixir (programming language)
Парадигма | мультипарадигма : функциональная , параллельная , распределенная , ориентированная на процессы |
---|---|
Впервые появился | 2011 |
Стабильный выпуск | |
Печатная дисциплина | динамичный , сильный , утка |
Платформа | Erlang |
Лицензия | Лицензия Apache 2.0 |
Расширения имени файла | .ex, .exs |
Интернет сайт | elixir-lang |
Под влиянием | |
Clojure , Erlang , Ruby | |
Под влиянием | |
LFE |
Эликсир является функциональным , одновременно , универсальным языком программирования , который работает на ЛУЧЕВОЙ виртуальной машине , используемая для реализации Эрланга языка программирования. Эликсир строит на вершине Erlang и разделяют те же абстракции для построения распределенных , отказоустойчивые приложения. Elixir также предоставляет производительные инструменты и расширяемый дизайн. Последнее поддерживается метапрограммированием во время компиляции с макросами и полиморфизмом через протоколы.
Elixir используется такими компаниями, как PagerDuty , Discord , Brex , E-MetroTel, Pinterest , Moz, Bleacher Report , The Outline , Inverse , Divvy , FarmBot, а также для создания встроенных систем . Сообщество ежегодно организует мероприятия в США, Европе и Японии, а также небольшие местные мероприятия и конференции.
История
Хосе Валим - создатель языка программирования Elixir, научно-исследовательского проекта, созданного в Plataformatec. Его цели состояли в том, чтобы обеспечить более высокую расширяемость и производительность виртуальной машины Erlang при сохранении совместимости с экосистемой Erlang.
Хосе Валим стремился создать язык программирования для крупномасштабных сайтов и приложений. Будучи разработчиком Ruby, он использовал функции Ruby, Erlang и Clojure для разработки языка с высокой степенью параллелизма и малой задержкой. Эликсир был разработан для обработки больших объемов данных. Его скорость и возможности распространяют Elixir в телекоммуникациях, электронной коммерции и финансах.
12 июля 2018 года Honeypot выпустила мини-документальный фильм об Эликсире.
Управление версиями
Elixir в основном следует семантическому управлению версиями и имеет только одну основную версию без каких-либо планов на секунду. Каждая из дополнительных версий поддерживает определенный диапазон версий Erlang / OTP .
Функции
- Компилируется в байт-код для виртуальной машины Erlang (BEAM)
- Все является выражением
- Функции Erlang можно вызывать из Elixir и наоборот, без влияния на время выполнения , благодаря компиляции в байт-код Erlang.
- Мета-программирование, позволяющее напрямую управлять абстрактным синтаксическим деревом (AST)
- Полиморфизм с помощью механизма, называемого протоколами. Как и в Clojure , протоколы предоставляют механизм динамической отправки . Однако это не следует путать с множественной отправкой, так как протоколы Elixir отправляются по одному типу.
- Поддержка документации через Python-подобные строки документации на языке форматирования Markdown.
- Ничего не разделяемое параллельное программирование через передачу сообщений ( модель актора )
- Акцент на рекурсию и высшие порядки функций вместо побочного эффекта основанного зацикливание
- Легкий параллелизм с использованием механизмов Erlang
-
Железнодорожно-ориентированное программирование через
with
конструкт - Встроенные инструменты для управления зависимостями, компиляции кода, запуска тестов, форматирования кода, удаленной отладки и многого другого.
- Ленивые и асинхронные коллекции с потоками
- Сопоставление с образцом для продвижения напористого кода
- Unicode поддержка и UTF-8 строк
Примеры
Следующие примеры можно запустить в iex
оболочке или сохранить в файле и запустить из командной строки, набрав .
elixir <filename>
Классический пример Hello world :
iex> IO.puts("Hello World!")
Hello World!
Понимания
iex> for n <- [1,2,3,4,5], rem(n, 2) == 1, do: n*n
[1, 9, 25]
Сопоставление с образцом (деструктуризация)
iex> [1, a] = [1, 2]
iex> a
2
iex> {:ok, [hello: a]} = {:ok, [hello: "world"]}
iex> a
"world"
Сопоставление с шаблоном (несколько предложений)
iex> case File.read("path/to/file") do
iex> {:ok, contents} -> IO.puts("found file: #{contents}")
iex> {:error, reason} -> IO.puts("missing file: #{reason}")
iex> end
Оператор трубы
iex> "1" |> String.to_integer() |> Kernel.*(2)
2
Модули
defmodule Fun do
def fib(0), do: 0
def fib(1), do: 1
def fib(n), do: fib(n-2) + fib(n-1)
end
Последовательное порождение тысячи процессов
for num <- 1..1000, do: spawn fn -> IO.puts("#{num * 2}") end
Асинхронное выполнение задачи
task = Task.async fn -> perform_complex_action() end
other_time_consuming_action()
Task.await task
Примечательные проекты Elixir
- Mix - это инструмент автоматизации сборки, который предоставляет задачи для создания, компиляции и тестирования проектов Elixir, управления его зависимостями и многого другого.
- Phoenix - это среда веб-разработки, написанная на Elixir, которая реализует шаблон контроллера представления модели ( MVC ) на стороне сервера .