Habr<p>Elixir: алхимия кодогенерации</p><p>Elixir - язык, вызвавшийся заново открыть Erlang современному миру. Синтаксис без приятных сердцу, но уже архаичных знаков пунктуации; культура разработки с особым вниманием к качеству и удобству инструментов; полноценный набор решений для написания web-сервисов; стандартная библиотека без груза в несколько десятилетий и настоящие макросы. Если задуматься, то непосредственно в самом языке не так уж и много нового. Действительно, зная и Elixir и Erlang, можно представить как код на одном языке будет выглядеть на другом. Хотя и не всегда - в Elixir имеются выражения, которым нет эквивалента в Erlang. Как же они работают? Очевидно, Elixir раскрывает их в какой-то дополнительный Erlang код на этапе компиляции. Иногда можно интуитивно представить в какой, а иногда (спойлер) компилятор может подкинуть пару сюрпризов. Эта статья - обзор преобразований, которые проходит код на Elixir прежде чем попасть в компилятор Erlang. Мы посмотрим на условные выражения вроде if и cond , уделим внимание точке, посмотрим на приключения с with и for , приоткроем тайны протоколов и удивимся оптимизациям, которые Elixir умудряется производить.</p><p><a href="https://habr.com/ru/articles/888650/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/888650/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/elixir" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>elixir</span></a> <a href="https://zhub.link/tags/erlang" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>erlang</span></a> <a href="https://zhub.link/tags/beam" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>beam</span></a> <a href="https://zhub.link/tags/compilers" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>compilers</span></a></p>