Paradigm | multi-paradigm : функциональный, параллельный, распределенный, ориентированный на процесс |
---|---|
Впервые появился | 2011 г.; 9 лет назад (2011 г.) |
Стабильный выпуск | 1.11.1 / 16 октября 2020 г.; 15 дней назад (2020-10-16) |
Дисциплина набора текста | динамический, сильный, утка |
Платформа | Erlang |
Лицензия | Лицензия Apache 2.0 |
Расширения имен файлов | .ex,.exs |
Веб-сайт | elixir-lang.org |
Под влиянием | |
Clojure, Erlang, Ruby | |
Influenced | |
LFE |
Elixir - это функциональный, параллельный, универсальный язык программирования, который работает на BEAM виртуальной машине, используемой для реализации языка программирования Erlang. Elixir построен на основе Erlang и использует те же абстракции для создания распределенных, отказоустойчивых приложений. Elixir также предоставляет эффективные инструменты и расширяемый дизайн. Последнее поддерживается с помощью метапрограммирования во время компиляции с макросами и полиморфизмом через протоколы.
Elixir используется такими компаниями, как PagerDuty, Discord, E-MetroTel, Pinterest, Moz, Bleacher Report, The Outline, Inverse, Divvy, FarmBot и для построения встроенных систем. Сообщество ежегодно организует мероприятия в США, Европе и Японии, а также небольшие местные мероприятия и конференции.
Хосе Валим - создатель языка программирования Elixir, исследование и разработка проект Plataformatec. Его цели состояли в том, чтобы обеспечить более высокую расширяемость и продуктивность виртуальной машины Erlang при сохранении совместимости с экосистемой Erlang.
Хосе Валим стремился создать язык программирования для крупномасштабных сайтов и приложений. Будучи разработчиком Ruby, он использовал функции Ruby, Erlang и Clojure для разработки языка с высокой степенью параллелизма и малой задержкой. Эликсир был разработан для обработки больших объемов данных. Его скорость и возможности распространяют Elixir в телекоммуникациях, электронной коммерции и финансах.
12 июля 2018 г. Honeypot выпустила мини-документальный фильм об Эликсире.
Эликсир в основном следует семантическому управлению версиями и имеет только 1 основной версия без планов на секунду. Каждая из дополнительных версий поддерживает определенный диапазон версий Erlang / OTP.
with
Следующие ниже примеры можно запустить в оболочке iex
или сохранить в файл и запустить из командной строки, набрав elixir
.
Classic Hello world пример:
iex>IO.put s ("Привет, мир!") Привет, мир!
Пояснения
iex>для 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 ("путь / к / файлу") do iex>{: ok, contents} ->IO.puts ("found file: # {contents}") iex>{: error, cause} ->IO.puts ("missing file: # {cause}") iex>end
Оператор конвейера
iex>"1" |>String.to_integer () |>Ядро. * (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
Последовательное порождение тысячи процессов
для 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