LINUX.ORG.RU

Erlang


69

3

Всего сообщений: 137

См. также:

 , , , , , , , ,

Вышел 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<id: 1, name: "Jane", age: 33, ...>
    
  • Теперь 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/1 and Date.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 ---------------------|
    

>>> Полный список изменений, улучшений и багфиксов

 , , , ,

loz ()

Еще новости

2017

2015

2014

2013

2013

2012

Галерея

Форум

Февраль 2019

Декабрь 2018

Октябрь 2018

Сентябрь 2018

Август 2018

Июль 2018

Июнь 2018

2018

2017

2016