LINUX.ORG.RU

Вышел Elixir 1.8.0

 , , , ,


0

2

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 ---------------------|
    

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

★★★★★

Проверено: Shaman007 ()

Ответ на: комментарий от umren

тебе ПРИДЕТСЯ учить оба языка + платформу что бы пользоваться эликсиром

Точно та же ситуация, как и с жабозаменителями. Вердикт: ненужно.

bread ()
Ответ на: комментарий от bread

Очевидно что так. Факта, что некоторым нужно, это не отменяет.

ddidwyll ★★ ()
Ответ на: комментарий от Bad_ptr

с лиспом не сравнишь

Если со Scheme, то примерно также. Если с Common Lisp, то в Elixir есть нормальная гигиена.

monk ★★★★★ ()

Какой-то лисп, только синтаксис изуродовали запятыми и разными скобками.

Gentooshnik ★★★ ()
Ответ на: комментарий от loz

Там такие же акторы поверх тред пула. Они должны или делать неблокирующие операции или использовать цепочки из future. Что в этом не так?

vertexua ★★★★☆ ()
Ответ на: комментарий от vertexua

В эрланге нет таких ограничений, планировщик может остановить процесс в любой момент. Даже на операции сложения.

loz ★★★★★ ()

А какая все таки скрость работы, если сравнивать с python? Например гонять по сети и обрабатывать большие объемы json из базы? Видел мнение, что реально работать можно только начиная от 32 узлов, а меньше сильно тормозит.

Deleted ()
Ответ на: комментарий от Partisan

А как-же N2O для Erlang ? Или что вы имеете ввиду без «интерфейса»

HasKup9012 ()
Ответ на: комментарий от Deleted

А какая все таки скрость работы, если сравнивать с python? Например гонять по сети и обрабатывать большие объемы json из базы? Видел мнение, что реально работать можно только начиная от 32 узлов, а меньше сильно тормозит.

Очень странное мнение, это сильно зависит от того что делаешь. Скорость работы какой-нибудь однопоточной программы на питоне будет сильно выше.

Но как раз гонять по сети и обрабатывать запросы параллельно, в том числе на разных машинах, эрланг выигрывает сразу же и по скорости и по простоте написания. Не говоря уже про устойчивость к отказам, обновления на лету, удаленный дебаггинг, деплоймент и прочее.

loz ★★★★★ ()
Ответ на: комментарий от loz

однопоточной программы на питоне

а многопоточной программы? Наверное на Elixir десктопные приложения не пишут, а если сравнить даже на простом сервере с 2 процессорами по 8 ядер в каждом? Грубо говоря с учетом HT 32 потока. Опыта работы с ними нет, поэтому очень сильно интересуюсь.

Deleted ()
Ответ на: комментарий от loz

Во сколько долларов эта фича конвертируется как профит компании? Я сколько знаю людей которые выбирают религию, а потом носятся с практически не очень полезной фичей их религии как полным must have

vertexua ★★★★☆ ()
Ответ на: комментарий от vertexua

о серьёзные разговоры пошли
https://habr.com/en/post/433672/
особенно смешно как это погромисты описывают:
ещё недавно кипяточком писали про руби, теперь говорят фууу гавно
и так постоянно
причём понятно что фичи для обожания и обсирания придуманы непойми на каком основании, раз такой разброс в мыслях
тупо каждый пытается рационализировать непонятную реальность

Bad_ptr ★★★★ ()

Это такая рубя для тех кто не захотел в ирлонг?

Deleted ()
Ответ на: комментарий от Bad_ptr

В Руби кстати особой драмы нету. TL;DR всей статьи: Руби стал популярен когда существовал единственный рельсоподобный фреймворк в мире - сами рельсы. Сейчас этого как говна и все шагнуло вперед, Руби перестал быть особенным, остались только минусы. Как раз с Руби не было нездоровой оправдаловки дерьма, ведь тогда у него была заслуженая ниша. Кто-то, да, мог перегибать палку, предоставляя это как панацею

Ты я так понял говоришь о абсолютном «ссали кипяточком», мол вот все, приехали, больше ничего никогда не изобретут. Я говорю что тогда ссать было своевременно, сейчас - нет. Времена поменялись и это естественно

vertexua ★★★★☆ ()
Последнее исправление: vertexua (всего исправлений: 2)
Ответ на: комментарий от Bad_ptr

Ха, забавно кстати, даже в этой статье пиарят эликсик по небалуйся. Что в нем нашли, не пойму

vertexua ★★★★☆ ()
Ответ на: комментарий от vertexua

руби это не только рельсы, есть hanami, rom-rb, dry-rb и много чего другого.

anonymous ()
Ответ на: комментарий от Bad_ptr

Почти каждый уважающий себя рубист уходит на Golang.

Шикарно. Лучшая иллюстрация насколько все эти рубисты были нескучными похапешниками по сути.

bread ()
Ответ на: комментарий от anonymous

Список адского ненужно, где ты только это откопал?

bread ()
Ответ на: комментарий от vertexua

мол вот все, приехали, больше ничего никогда не изобретут.

Это и есть ссать кипяточком. Такое было с рубями, потом недолго со скалой, потом с нодежс, теперь с го и рустом. Хипстота попрыгала по вагонам, короче.

bread ()
Ответ на: комментарий от bread

Ну так думают только психи. В когда на данный момент что-то показывает какие-то лучшие характеристики рантайма или семантики языка, то без какой-либо религиозности стоит ими пользоваться. Изобретут что-то лучше, можно переходить. Все вышеназванные языки являются в чем-то уникальными и оправдывают популярность.

vertexua ★★★★☆ ()
Ответ на: комментарий от Deleted

Почитал тьюториал. Нет, это на рубя это совсем не похоже. Лисп засахаренный — вижу. Эрланга уши — вижу. Рубя — не вижу.

От рубей там, видимо, только сообщество.

anonymous ()
Ответ на: комментарий от vertexua

Зависит от компании же, в одной не будет конвертироваться, в друго конвертируется значительно. Я показываю что это разные системы и у них разные свойства. А ты уже сам решай какая тебе конвертируется в профит.

loz ★★★★★ ()
Ответ на: комментарий от loz

поделись конфигом емакаса, плз, а то разбираться только для «попробовать» лень

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.