Эликсир (язык программирования)
Парадигмы | мультипарадигмальность : функциональная , параллельная , распределенная , процессно-ориентированная. |
---|---|
Разработано | Хосе Валим |
Впервые появился | 2012 год |
Стабильная версия | 1.17.1 [1]
/ 18 июня 2024 г |
Дисциплина набора текста | динамичный , сильный |
Платформа | Эрланг |
Лицензия | Лицензия Апач 2.0 [2] |
Расширения имен файлов | .ex, .exs |
Веб-сайт | эликсир-ланг |
Под влиянием | |
Кложур , Эрланг , Руби | |
Под влиянием | |
Блеск , ЛФЭ |
Elixir — это функциональный , параллельный , высокоуровневый общего назначения язык программирования , работающий на BEAM виртуальной машине , который также используется для реализации языка программирования Erlang . [3] построен на основе Erlang и использует те же абстракции для создания распределенных отказоустойчивых Elixir приложений. Elixir также предоставляет инструменты и расширяемый дизайн. Последнее поддерживается метапрограммированием во время компиляции с макросами и полиморфизмом через протоколы. [4]
Сообщество организует ежегодные мероприятия в США. [5] Европа, [6] и Япония, [7] а также небольшие местные мероприятия и конференции. [8] [9]
История [ править ]
Хосе Валим создал язык программирования Elixir в рамках научно-исследовательского проекта Plataformatec. Его целью было обеспечить более высокую расширяемость и производительность виртуальной машины Erlang при сохранении совместимости с экосистемой Erlang. [10] [11]
Elixir предназначен для крупных сайтов и приложений. Он использует возможности Ruby , Erlang и Clojure для разработки языка с высоким уровнем параллелизма и низкой задержкой. Он был разработан для обработки больших объемов данных. Эликсир также используется в телекоммуникациях, электронной коммерции и финансах. [12]
В 2021 году было объявлено о создании Numerical Elixir с целью внедрения в экосистему Elixir машинного обучения, нейронных сетей, компиляции на графических процессорах, обработки данных и вычислительных ноутбуков. [13]
Управление версиями [ править ]
Каждая из второстепенных версий поддерживает определенный диапазон версий Erlang/ OTP . [14] Текущая стабильная версия — 1.17.1. [1] .
Особенности [ править ]
- Компилируется в байт-код машины BEAM Erlang виртуальной . [15] Полная совместимость с кодом Erlang без влияния на время выполнения .
- Масштабируемость и отказоустойчивость благодаря облегченным механизмам параллелизма Erlang. [15]
- Встроенные инструменты для управления зависимостями, компиляции кода, запуска тестов, форматирования кода, удаленной отладки и многого другого.
- Интерактивный REPL внутри запущенных программ, включая веб-серверы Phoenix , с перезагрузкой кода и доступом к внутреннему состоянию.
- Все есть выражение [15]
- Сопоставление с образцом [15] продвигать ассертивный код [16]
- Подсказки по вводу для инструментов статического анализа
- Неизменяемые данные с упором, как и в других функциональных языках, на рекурсию и функции высшего порядка вместо побочных эффектов. на основе циклов
- Ничего общего, параллельное программирование через передачу сообщений ( модель актера ) [17]
- Ленивые и асинхронные коллекции с потоками
- Железнодорожное ориентированное программирование через
with
построить [18] - Гигиеническое метапрограммирование путем прямого доступа к абстрактному синтаксическому дереву (AST). [15] Библиотеки часто реализуют небольшие предметно-ориентированные языки , например, для баз данных или тестирования.
- Выполнение кода во время компиляции. Компилятор Elixir также работает на BEAM, поэтому компилируемые модули могут сразу запускать уже скомпилированный код.
- Полиморфизм через механизм, называемый протоколами. Динамическая диспетчеризация , как в Clojure , однако без множественной отправки , поскольку протоколы Elixir отправляют данные одного типа.
- Поддержка документации через строки документации в стиле Python на Markdown . языке форматирования [15]
- Поддержка Unicode и UTF-8. строки
Примеры [ править ]
Следующие примеры можно запустить в iex
оболочке или сохранить в файле и запустить из командной строки , набрав elixir <filename>
.
Классический Hello world пример :
iex> IO.puts("Hello World!")
Hello World!
Оператор трубы:
iex> "Elixir" |> String.graphemes() |> Enum.frequencies()
%{"E" => 1, "i" => 2, "l" => 1, "r" => 1, "x" => 1}
iex> %{values: 1..5} |> Map.get(:values) |> Enum.map(& &1 * 2)
[2, 4, 6, 8, 10]
iex> |> Enum.sum()
30
Сопоставление с образцом (также известное как деструктуризация):
iex> %{left: x} = %{left: 5, right: 8}
iex> x
5
iex> {:ok, [_ | rest]} = {:ok, [1, 2, 3]}
iex> rest
[2, 3]
Сопоставление шаблонов с несколькими предложениями:
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> for n <- 1..5, rem(n, 2) == 1, do: n*n
[1, 9, 25]
Асинхронное чтение файлов с потоками:
1..5
|> Task.async_stream(&File.read!("#{&1}.txt"))
|> Stream.filter(fn {:ok, contents} -> String.trim(contents) != "" end)
|> Enum.join("\n")
Многофункциональные тела с защитой :
def fib(n) when n in [0, 1], do: n
def fib(n), do: fib(n-2) + fib(n-1)
Реляционные базы данных с библиотекой Ecto:
schema "weather" do
field :city # Defaults to type :string
field :temp_lo, :integer
field :temp_hi, :integer
field :prcp, :float, default: 0.0
end
Weather |> where(city: "Kraków") |> order_by(:temp_lo) |> limit(10) |> Repo.all
Последовательно порождая тысячу процессов:
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
[ нужна ссылка ]
См. также [ править ]
Ссылки [ править ]
- ↑ Перейти обратно: Перейти обратно: а б «Выпуск 1.17.1» . 18 июня 2024 г. Проверено 21 июня 2024 г.
- ^ «эликсир/ЛИЦЕНЗИЯ в мастере · elixir-lang/elixir · GitHub» . Гитхаб .
- ^ «Самые популярные языки программирования 2018 года — блог Elite Infoworld» . 2018-03-30. Архивировано из оригинала 9 мая 2018 г. Проверено 8 мая 2018 г.
- ^ «Эликсир» . Хосе Валим . Проверено 17 февраля 2013 г.
- ^ «ЭликсирКонф» . Проверено 11 июля 2018 г.
- ^ «ЭликсирКонф» . Проверено 11 июля 2018 г.
- ^ «Эрланг и Эликсир Фест» . Проверено 18 февраля 2019 г.
- ^ «Эликсир ЛДН» . Проверено 12 июля 2018 г.
- ^ «EMPEX - Конференция по эликсиру Эмпайр-Стейт» . Проверено 12 июля 2018 г.
- ^ Эликсир — современный подход к программированию для Erlang VM . Проверено 17 февраля 2013 г.
- ^ Хосе Валим – Основной доклад ElixirConf EU 2017 . Архивировано из оригинала 17 ноября 2021 г. Проверено 14 июля 2017 г.
- ^ «За кодом: Тот, кто создал эликсир» . Проверено 25 ноября 2019 г.
- ^ «Численный эликсир (Nx)» . Проверено 6 мая 2024 г.
- ^ Elixir — это динамический функциональный язык, предназначенный для создания масштабируемых и поддерживаемых приложений: elixir-lang/elixir , Elixir, 21 апреля 2019 г. , получено 21 апреля 2019 г.
- ↑ Перейти обратно: Перейти обратно: а б с д и ж «Эликсир» . Проверено 7 сентября 2014 г.
- ^ «Написание уверенного кода с помощью Elixir» . 24 сентября 2014 года . Проверено 5 июля 2018 г.
- ^ Лодер, Вольфганг (12 мая 2015 г.). Эрланг и Эликсир для императивных программистов . «Глава 16: Концепции структурирования кода», заголовок раздела «Модель актера»: Leanpub . Проверено 7 июля 2015 г.
{{cite book}}
: CS1 maint: местоположение ( ссылка ) - ^ Влашин, Скотт (май 2013 г.). «Железнодорожно-ориентированное программирование» . F# для удовольствия и прибыли . Архивировано из оригинала 30 января 2021 года . Проверено 28 февраля 2021 г.
Дальнейшее чтение [ править ]
- Симон Сен-Лоран; Дж. Айзенберг (22 декабря 2016 г.). Знакомство с Elixir: Начало работы с функциональным программированием, 2-е издание . О'Рейли Медиа . АСИН B01N9KCTIC . ISBN 978-1491956779 .
- Трудный Юрич (12 января 2019 г.). Эликсир в действии, 2-е издание . Публикации Мэннинга . АСИН B0978KZTJG . ISBN 978-1617295027 .