Парадигмы | мультипарадигмальный : функциональный , параллельный , распределенный , ориентированный на процесс |
---|---|
Разработано | Хосе Валим |
Впервые появился | 2012 ( 2012 ) |
Стабильный релиз | 1.17.3 [1] / 18 сентября 2024 г. ( 18 сентября 2024 ) |
Дисциплина набора текста | динамичный , сильный |
Платформа | Эрланг |
Лицензия | Лицензия Apache 2.0 [2] |
Расширения имени файла | .ex, .exs |
Веб-сайт | elixir-lang.org |
Под влиянием | |
Clojure , Erlang , Ruby | |
Под влиянием | |
Проблеск , LFE |
Elixir — это функциональный , параллельный , высокоуровневый язык программирования общего назначения , работающий на виртуальной машине BEAM , которая также используется для реализации языка программирования Erlang . [3] Elixir построен на основе Erlang и использует те же абстракции для построения распределенных отказоустойчивых приложений. Elixir также предоставляет инструментарий и расширяемую конструкцию. Последнее поддерживается метапрограммированием во время компиляции с макросами и полиморфизмом через протоколы. [ 4]
Сообщество организует ежегодные мероприятия в Соединенных Штатах, [5] Европе, [6] и Японии, [7] , а также небольшие местные мероприятия и конференции. [8] [9]
Хосе Валим создал язык программирования Elixir как проект исследований и разработок в Plataformatec. Его целью было обеспечить более высокую расширяемость и производительность в Erlang VM, сохраняя при этом совместимость с экосистемой Erlang. [10] [11]
Elixir нацелен на крупномасштабные сайты и приложения. Он использует возможности Ruby , Erlang и Clojure для разработки языка с высокой степенью параллелизма и низкой задержкой. Он был разработан для обработки больших объемов данных. Elixir также используется в телекоммуникациях, электронной коммерции и финансах. [12]
В 2021 году было объявлено о проекте Numerical Elixir, цель которого — привнести в экосистему Elixir машинное обучение, нейронные сети, компиляцию на GPU, обработку данных и вычислительные блокноты. [13]
Каждая из второстепенных версий поддерживает определенный диапазон версий Erlang/ OTP . [14] Текущая стабильная версия релиза — 1.17.3 [1] .
with
конструкции [18]Следующие примеры можно запустить в iex
оболочке или сохранить в файле и запустить из командной строки , введя .elixir <filename>
Классический пример Hello world :
iex> IO . puts ( "Привет, мир!" ) Привет , мир!
Оператор трубы:
iex> "Эликсир" |> Строка . графемы () |> Перечисление . частоты () %{"E" => 1, "i" => 2, "l" => 1, "r" => 1, "x" => 1} iex> %{ значения : 1 .. 5 } |> Карта . получить ( : значения ) |> Перечисление . карта ( & &1 * 2 ) [2, 4, 6, 8, 10] iex> |> Перечисление . сумма () 30
Сопоставление с образцом (также известное как деструктуризация):
iex> %{ влево : x } = %{ влево : 5 , вправо : 8 } iex> x 5 iex> { :ок , [ _ | отдых ]} = { :ok , [ 1 , 2 , 3 ]} iex> отдых [2, 3]
Сопоставление шаблонов с несколькими предложениями:
iex> case File.read ( "путь/к/файлу" ) do iex > { :ok , содержимое } -> IO.puts ( " найден файл: # { содержимое } " ) iex > { : error , причина } - > IO.puts ( "отсутствует файл: #{ причина } " ) iex> end
iex> для n <- 1 .. 5 , rem ( n , 2 ) == 1 , do : n * n [1, 9, 25]
Асинхронное чтение файлов с помощью потоков:
1 .. 5 |> Задача . async_stream ( & Файл . read! ( " # { &1 } . txt " )) |> Поток . filter ( fn { : ok , содержимое } -> Строка . trim ( содержимое ) != "" конец ) |> Перечисление . join ( " \ n " )
Многофункциональные корпуса с защитой :
def fib ( n ) когда n в [ 0 , 1 ], do : n def fib ( n ), do : fib ( n - 2 ) + fib ( n - 1 )
Реляционные базы данных с библиотекой Ecto:
схема "погода" do поле :city # По умолчанию тип :string поле :temp_lo , :integer поле :temp_hi , :integer поле :prcp , :float , по умолчанию : 0.0 конец Погода |> где ( город : "Краков" ) |> order_by ( :temp_lo ) |> limit ( 10 ) |> Repo . all
Последовательное порождение тысячи процессов:
для num <- 1 .. 1000 , do : spawn fn -> IO . puts ( " #{ num * 2 } " ) end
Асинхронное выполнение задачи:
задача = Задача . асинхронная функция -> выполнить_сложное_действие () конец другое_время_потребляющее_действие () Задача . ожидание задачи
{{cite book}}
: CS1 maint: местоположение ( ссылка )