Elixir (язык программирования)

Поделись знанием:
Перейти к: навигация, поиск
Elixir
Класс языка:

мультипарадигмальный: функциональный, параллельный, распределённый, процессо-ориентированный

Появился в:

2012

Выпуск:

1.3.2 / 15 июля 2016 (2016-07-15)[1]

Система типов:

динамическая, строгая

Испытал влияние:

Erlang, Ruby, Clojure

Лицензия:

Apache License 2.0[2]

Сайт:

[elixir-lang.org lang.org]

Платформа:

Erlang

Elixir — функциональный, распределённый, язык программирования общего назначения, который работает на виртуальной машине Erlang (BEAM). Elixir построен поверх Erlang, что обеспечивает распределённость, отказоустойчивость, исполнение в режиме мягкого реального времени, метапрограммирование с макросами и полиморфизмом, реализованным через протоколы[3]. Elixir использует Erlang/OTP для работы с деревьями процессов[4].





История

Elixir был создан Хосе Валимом (José Valim), ранее являвшимся одним из основных разработчиков фреймворка Ruby on Rails и сооснователем компании Plataformatec[5][6]. Его целью было включить более высокую расширяемость и производительность в Erlang VM, сохраняя совместимость с инструментами и экосистемой Erlang[7].

Возможности

Описание языка

Типы данных

На низком уровне Elixir использует примитивные типы, доступные в виртуальной машине Erlang. Так, список — всего лишь упорядоченный набор значений. Кроме того, соответствующие модули и синтаксический сахар позволяют использовать более высокоуровневые абстракции. Например, тип Keyword является модулем Elixir, а его реализация основана на списке кортежей, и, естественно, со значениями типа Keyword можно работать и как со списками[10].

Elixir имеет следующие встроенные типы данных (см. также типы данных Erlang)[11]:

На основе этих примитивных типов в Elixir в частности построены строки и структуры[11].

Сравнение с Erlang

Elixir был задуман как улучшение Erlang, в частности, значительного упрощения синтаксиса. Одним из основных отличий является возможность повторного присваивания значений переменных. В Elixir не требуется завершать каждую команду точкой (по примеру Пролога), так как выражения разделяются переводом строки и точкой с запятой (;). В Elixir не требуется экспортировать функции модуля, тогда как в Erlang по умолчанию все функции недоступны из других модулей, если не упомянуты в директиве -export. Тем самым, синтаксис Elixir больше похож на синтаксис Ruby[6].

Примеры

Следующие примеры могут быть запущены в оболочке iex или могут быть сохранены в файл и запущены с помощью команды elixir <filename>.

Пример классической программы Hello world:

IO.puts "Hello World!"

Создание нового списка (List) на основе существующего с помощью свёртки:

for n <- [1,2,3,4,5], rem(n,2) == 1, do: n*n
#=> [1, 9, 25]

Сопоставление с образцом:

[1, a] = [1, 2]
# a = 2

{:ok, [hello: a]} = {:ok, [hello: "world"]}
# a = "world"

Модули:

defmodule Fun do
  def fib(0), do: 0
  def fib(1), do: 1
  def fib(n) do 
    fib(n-2) + fib(n-1)  
  end
end

Внутреннее представление кода:

quote do: (k = 1; k + 2)    # в результате даёт
{:__block__, [],
 [{:=, [], [{:k, [], Elixir}, 1]},
  {:+, [context: Elixir, import: Kernel], [{:k, [], Elixir}, 2]}]}

Инструментарий

Для работы с проектами на Elixir: создания новых, управления зависимостями, компиляции, тестирования, запуска на выполнение — имеется утилита автоматизации (англ. build tool) под названием Mix. Например, команда mix new myproject создаёт новый проект по шаблону, в результате чего появляется каталог проекта (версия Mix 1.1.1)[12]:

myproject/
├── config
│   └── config.exs
├── .gitignore
├── lib
│   └── myproject.ex
├── mix.exs
├── README.md
└── test
    ├── myproject_test.exs
    └── test_helper.exs

Где config содержит конфигурацию приложения, lib — исходный код, tests — тесты, mix.exs — конфигурацию проекта.

Напишите отзыв о статье "Elixir (язык программирования)"

Примечания

  1. [github.com/elixir-lang/elixir/blob/v1.3/CHANGELOG.md elixir/CHANGELOG.md at v1.3 · elixir-lang/elixir · GitHub]
  2. [github.com/elixir-lang/elixir/blob/master/LICENSE elixir/LICENSE at master · elixir-lang/elixir · GitHub]
  3. [elixir-lang.org Elixir]. José Valim. Проверено 17 февраля 2013.
  4. Thomas, 2014, When Processes Die.
  5. [rubyonrails.org/core/ The core team]
  6. 1 2 Mihalis Tsoukalos, «Elxir: Take a functional swig», Linux Format, issue 203, 2015
  7. [vimeo.com/53221562 Elixir - A modern approach to programming for the Erlang VM]. Проверено 17 февраля 2013.
  8. 1 2 3 4 5 6 [elixir-lang.org/ Elixir]. Проверено 7 сентября 2014.
  9. [leanpub.com/erlangandelixirforimperativeprogrammers Erlang and Elixir for Imperative Programmers]. — "Chapter 16: Code Structuring Concepts", section title "Actor Model": Leanpub.
  10. Thomas, 2014, An Aside—What Are Types?.
  11. 1 2 Thomas, 2014, Built-in Types.
  12. Thomas, 2014.

Литература

  • Dave Thomas. Programming Elixir. — Pragmatic Bookshelf, 2014. — 280 p. — ISBN 978-1-937785-58-1.
  • Paulo A. Pereira. Elixir Cookbook. — Packt Publishing, 2015. — 236 p. — ISBN 978-1-78439-751-7.
  • Simon St. Laurent, J. David Eisenberg. Introducing Elixir. — O'Reilly Media, Inc., 2014. — 210 p. — ISBN 978-1-4493-6999-6.
  • Chris McCord. Metaprogramming Elixir. — Pragmatic Bookshelf, 2015. — 120 p. — ISBN 978-1-68050-041-7.
  • Saša Jurić. Elixir in Action. — Manning Publications, 2015. — 376 p. — ISBN 978-1-61729-201-9.
  • Bruce A. Tate, Ian Dees, Frederic Daoud, Jack Moffitt. Elixir // Seven More Languages in Seven Weeks. — Pragmatic Bookshelf, 2014. — 350 p. — ISBN 978-1-941222-15-7.

Ссылки

  • [elixir-lang.org Официальный сайт]
  • [github.com/elixir-lang/elixir/ Исходный код на GitHub]
  • [vimeo.com/53221562 Elixir — A modern approach to programming for the Erlang VM video presentation]
  • [joearms.github.io/2013/05/31/a-week-with-elixir.html Joe Armstrong: «A Week with Elixir» (blog entry)]
  • [elixir-lang.org/crash-course.html Erlang/Elixir Syntax: A Crash Course] (сравнение синтаксисов Elixir и Erlang на примерах)

Отрывок, характеризующий Elixir (язык программирования)

– Бог милостив, голубка. – Няня зажгла перед киотом обвитые золотом свечи и с чулком села у двери. Княжна Марья взяла книгу и стала читать. Только когда слышались шаги или голоса, княжна испуганно, вопросительно, а няня успокоительно смотрели друг на друга. Во всех концах дома было разлито и владело всеми то же чувство, которое испытывала княжна Марья, сидя в своей комнате. По поверью, что чем меньше людей знает о страданиях родильницы, тем меньше она страдает, все старались притвориться незнающими; никто не говорил об этом, но во всех людях, кроме обычной степенности и почтительности хороших манер, царствовавших в доме князя, видна была одна какая то общая забота, смягченность сердца и сознание чего то великого, непостижимого, совершающегося в эту минуту.
В большой девичьей не слышно было смеха. В официантской все люди сидели и молчали, на готове чего то. На дворне жгли лучины и свечи и не спали. Старый князь, ступая на пятку, ходил по кабинету и послал Тихона к Марье Богдановне спросить: что? – Только скажи: князь приказал спросить что? и приди скажи, что она скажет.
– Доложи князю, что роды начались, – сказала Марья Богдановна, значительно посмотрев на посланного. Тихон пошел и доложил князю.
– Хорошо, – сказал князь, затворяя за собою дверь, и Тихон не слыхал более ни малейшего звука в кабинете. Немного погодя, Тихон вошел в кабинет, как будто для того, чтобы поправить свечи. Увидав, что князь лежал на диване, Тихон посмотрел на князя, на его расстроенное лицо, покачал головой, молча приблизился к нему и, поцеловав его в плечо, вышел, не поправив свечей и не сказав, зачем он приходил. Таинство торжественнейшее в мире продолжало совершаться. Прошел вечер, наступила ночь. И чувство ожидания и смягчения сердечного перед непостижимым не падало, а возвышалось. Никто не спал.

Была одна из тех мартовских ночей, когда зима как будто хочет взять свое и высыпает с отчаянной злобой свои последние снега и бураны. Навстречу немца доктора из Москвы, которого ждали каждую минуту и за которым была выслана подстава на большую дорогу, к повороту на проселок, были высланы верховые с фонарями, чтобы проводить его по ухабам и зажорам.
Княжна Марья уже давно оставила книгу: она сидела молча, устремив лучистые глаза на сморщенное, до малейших подробностей знакомое, лицо няни: на прядку седых волос, выбившуюся из под платка, на висящий мешочек кожи под подбородком.
Няня Савишна, с чулком в руках, тихим голосом рассказывала, сама не слыша и не понимая своих слов, сотни раз рассказанное о том, как покойница княгиня в Кишиневе рожала княжну Марью, с крестьянской бабой молдаванкой, вместо бабушки.
– Бог помилует, никогда дохтура не нужны, – говорила она. Вдруг порыв ветра налег на одну из выставленных рам комнаты (по воле князя всегда с жаворонками выставлялось по одной раме в каждой комнате) и, отбив плохо задвинутую задвижку, затрепал штофной гардиной, и пахнув холодом, снегом, задул свечу. Княжна Марья вздрогнула; няня, положив чулок, подошла к окну и высунувшись стала ловить откинутую раму. Холодный ветер трепал концами ее платка и седыми, выбившимися прядями волос.
– Княжна, матушка, едут по прешпекту кто то! – сказала она, держа раму и не затворяя ее. – С фонарями, должно, дохтур…
– Ах Боже мой! Слава Богу! – сказала княжна Марья, – надо пойти встретить его: он не знает по русски.
Княжна Марья накинула шаль и побежала навстречу ехавшим. Когда она проходила переднюю, она в окно видела, что какой то экипаж и фонари стояли у подъезда. Она вышла на лестницу. На столбике перил стояла сальная свеча и текла от ветра. Официант Филипп, с испуганным лицом и с другой свечей в руке, стоял ниже, на первой площадке лестницы. Еще пониже, за поворотом, по лестнице, слышны были подвигавшиеся шаги в теплых сапогах. И какой то знакомый, как показалось княжне Марье, голос, говорил что то.
– Слава Богу! – сказал голос. – А батюшка?
– Почивать легли, – отвечал голос дворецкого Демьяна, бывшего уже внизу.
Потом еще что то сказал голос, что то ответил Демьян, и шаги в теплых сапогах стали быстрее приближаться по невидному повороту лестницы. «Это Андрей! – подумала княжна Марья. Нет, это не может быть, это было бы слишком необыкновенно», подумала она, и в ту же минуту, как она думала это, на площадке, на которой стоял официант со свечой, показались лицо и фигура князя Андрея в шубе с воротником, обсыпанным снегом. Да, это был он, но бледный и худой, и с измененным, странно смягченным, но тревожным выражением лица. Он вошел на лестницу и обнял сестру.
– Вы не получили моего письма? – спросил он, и не дожидаясь ответа, которого бы он и не получил, потому что княжна не могла говорить, он вернулся, и с акушером, который вошел вслед за ним (он съехался с ним на последней станции), быстрыми шагами опять вошел на лестницу и опять обнял сестру. – Какая судьба! – проговорил он, – Маша милая – и, скинув шубу и сапоги, пошел на половину княгини.


Маленькая княгиня лежала на подушках, в белом чепчике. (Страдания только что отпустили ее.) Черные волосы прядями вились у ее воспаленных, вспотевших щек; румяный, прелестный ротик с губкой, покрытой черными волосиками, был раскрыт, и она радостно улыбалась. Князь Андрей вошел в комнату и остановился перед ней, у изножья дивана, на котором она лежала. Блестящие глаза, смотревшие детски, испуганно и взволнованно, остановились на нем, не изменяя выражения. «Я вас всех люблю, я никому зла не делала, за что я страдаю? помогите мне», говорило ее выражение. Она видела мужа, но не понимала значения его появления теперь перед нею. Князь Андрей обошел диван и в лоб поцеловал ее.
– Душенька моя, – сказал он: слово, которое никогда не говорил ей. – Бог милостив. – Она вопросительно, детски укоризненно посмотрела на него.
– Я от тебя ждала помощи, и ничего, ничего, и ты тоже! – сказали ее глаза. Она не удивилась, что он приехал; она не поняла того, что он приехал. Его приезд не имел никакого отношения до ее страданий и облегчения их. Муки вновь начались, и Марья Богдановна посоветовала князю Андрею выйти из комнаты.
Акушер вошел в комнату. Князь Андрей вышел и, встретив княжну Марью, опять подошел к ней. Они шопотом заговорили, но всякую минуту разговор замолкал. Они ждали и прислушивались.
– Allez, mon ami, [Иди, мой друг,] – сказала княжна Марья. Князь Андрей опять пошел к жене, и в соседней комнате сел дожидаясь. Какая то женщина вышла из ее комнаты с испуганным лицом и смутилась, увидав князя Андрея. Он закрыл лицо руками и просидел так несколько минут. Жалкие, беспомощно животные стоны слышались из за двери. Князь Андрей встал, подошел к двери и хотел отворить ее. Дверь держал кто то.
– Нельзя, нельзя! – проговорил оттуда испуганный голос. – Он стал ходить по комнате. Крики замолкли, еще прошло несколько секунд. Вдруг страшный крик – не ее крик, она не могла так кричать, – раздался в соседней комнате. Князь Андрей подбежал к двери; крик замолк, послышался крик ребенка.
«Зачем принесли туда ребенка? подумал в первую секунду князь Андрей. Ребенок? Какой?… Зачем там ребенок? Или это родился ребенок?» Когда он вдруг понял всё радостное значение этого крика, слезы задушили его, и он, облокотившись обеими руками на подоконник, всхлипывая, заплакал, как плачут дети. Дверь отворилась. Доктор, с засученными рукавами рубашки, без сюртука, бледный и с трясущейся челюстью, вышел из комнаты. Князь Андрей обратился к нему, но доктор растерянно взглянул на него и, ни слова не сказав, прошел мимо. Женщина выбежала и, увидав князя Андрея, замялась на пороге. Он вошел в комнату жены. Она мертвая лежала в том же положении, в котором он видел ее пять минут тому назад, и то же выражение, несмотря на остановившиеся глаза и на бледность щек, было на этом прелестном, детском личике с губкой, покрытой черными волосиками.