Эликсир (язык программирования)
![]() Эликсир | |
Парадигмы | мультипарадигмальность : функциональная , параллельная , распределенная , процессно-ориентированная. |
---|---|
Разработано | Хосе Валим |
Впервые появился | 2012 год |
Стабильная версия | 1.16.3 [1] ![]() |
Дисциплина набора текста | динамичный , сильный |
Платформа | Эрланг |
Лицензия | Лицензия Апач 2.0 [2] |
Расширения имен файлов | .ex, .exs |
Веб-сайт | эликсир-ланг |
Под влиянием | |
Кложур , Эрланг , Руби | |
Под влиянием | |
Блеск , ЛФЭ |
Elixir — это функциональный , параллельный , высокоуровневый общего назначения язык программирования , работающий на BEAM виртуальной машине , который также используется для реализации языка программирования Erlang . [3] Elixir построен на основе Erlang и использует те же абстракции для создания распределенных отказоустойчивых приложений . 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.16.3. [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> ИО . ставит ( «Привет, мир!» )
Привет, мир!
Оператор трубы:
iex> «Эликсир» |> Строка . графемы () |> Enum . частоты ()
%{"E" => 1, "i" => 2, "l" => 1, "r" => 1, "x" => 1}
iex> %{ значения : 1 .. 5 } |> Карта . получить ( :значения ) |> Перечисление . map ( & &1 * 2 )
[2, 4, 6, 8, 10]
iex> |> Enum . сумма ()
30
Сопоставление с образцом (также известное как деструктуризация):
iex> %{ влево : x } = %{ влево : 5 , вправо : 8 }
iex> x
5
iex> { :ok , [ _ | отдых ]} = { :ok , [ 1 , 2 , 3 ]}
iex> отдых
[2, 3]
Сопоставление шаблонов с несколькими предложениями:
iex> дела файл . read ( "путь/к/файлу" ) do
iex> { :ok , contents } -> IO . puts ( "найден файл: #{ содержание } " )
iex> { :error , причина } -> IO . puts ( "отсутствует файл: #{ причина } " )
iex> end
iex> for n <- 1 .. 5 , rem ( n , 2 ) == 1 , do : n * n
[1, 9, 25]
Асинхронное чтение файлов с потоками:
1 .. 5
|> Задача . async_stream ( & File . read! ( " #{ &1 } .txt" ))
|> Stream . filter ( fn { :ok , contents } -> String.trim " ( " contents ) != end > )
| Enum . присоединиться ( « \n » )
Многофункциональные тела с защитой :
def fib ( n ) , когда n в [ 0 , 1 ], do : n
def fib ( n ), do : fib ( n - 2 ) + fib ( n - 1 )
Реляционные базы данных с библиотекой Ecto:
схема "погода" do
field :city # По умолчанию тип :string
field :temp_lo , :integer
field :temp_hi , :integer
field :prcp , :float , по умолчанию : 0.0
end
Погода |> where ( город : "Краков" ) |> order_by ( :temp_lo ) |> лимит ( 10 ) |> Репо . все
Последовательно порождая тысячу процессов:
для числа - 1 .. 1000 выполните : spawn fn . -> IO < ставит ( " # { num * 2 } " ) конец
Асинхронное выполнение задачи:
задача = Задача . async fn -> Perform_complex_action () endother_time_sumption_action
Task (
. ) ждать задания
[ нужна цитата ]
См. также [ править ]
Ссылки [ править ]
- ^ Перейти обратно: а б «Выпуск 1.16.3» . 20 мая 2024 г. Проверено 22 мая 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 .