Вышел Elixir 1.8.0

Elixir — динамически типизированный функциональный язык для написания распределенных и параллельных приложений разработанный как альтернатива Erlang и работающий на Erlang VM.
Версия 1.8 содержит множество изменений на уровне инфраструктуры, времени компиляции и добавляет новые возможности интроспектирования системы.
Главные изменения:
- Кастомизированный вывод структур.
Теперь можно использовать протокол
Inspectдля указания полей которые будут использоваться для форматирования структуры в строку, так что структураdefmodule User do @derive {Inspect, only: [:id, :name, :age]} defstruct [:id, :name, :age, :email, :encrypted_password] endбудет напечатана следующим образом:
#User - Теперь Elixir поддерживает базу часовых поясов
В языке существуют 4 типа данных для работы со временем:
Time,Date,NativeDateTime(время без часового пояса) иDateTime(с часовым поясом). Развитию последнего препятствовало отсутствие поддержки базы часовых поясов.Теперь появился интерфейс
Calendar.TimeZoneDatabaseкоторый позволит разработчикам подключать свои собственные базы часовых поясов. Так же это позволяет добавить новые возможности, вDateTime, напримерDateTime.shift_zone/3.Так же добавлены функции
Date.day_of_year/1,Date.quarter_of_year/1,Date.year_of_era/1andDate.day_of_era/1. - Добавлен ключ
$callersдля улучшения возможностей инструментарияОдин из самых распространенных способов запуска процессов является модуль
Task. При этом Elixir сохраняет идентификатор процесса родителя в словаре запущенного процесса по ключу$ancestors. Это позволяет утилитам анализировать систему и прослеживать происхождение различный событий. Однако этого недостаточно, так как часто дочерний процесс запускается не на прямую, а через посредника, напримерsupervisor. В таком случае хоть ваш код и вызывает запускTaskоднако родителем будет указан процесс супервизора.В новой версии Elixir добавлен ключ
$callersкоторый указывает на оригинальный процесс вызвывший запускTask.Например при таком вызове:[your code] -- calls --> [supervisor] ---- spawns --> [task]В
$callersбудет сохранен идентификатор изначального процесса:[your code] [supervisor] <-- ancestor -- [task] ^ | |--------------------- caller ---------------------|
>>> Полный список изменений, улучшений и багфиксов
