Пользователь
0,0
рейтинг
10 апреля 2014 в 08:26

Разработка → Вышел Erlang/OTP 17.0

9 апреля вышел мажорный релиз платформы Erlang/OTP 17.0.

Erlang — функциональный язык программирования со строгой динамической типизацией, предназначенный для создания распределённых вычислительных систем.



В релизе 17.0 достаточно много новых возможностей и изменений. Первое, что можно заметить, изменена схема нумерации версий, раньше было R16B, R15B и так далее.

Добавлен новый тип данных — Maps

Пожалуй одно из самых главных нововведений, которое все давно ждали. Лучше всего показать на примере:

1> Map = #{ key1 => "Value1", key2 => "Value2"}.
#{key1 => "Value1",key2 => "Value2"}
2> maps:get(key1, Map).
"Value1"
#{key2 := MatchValue} = Map.
#{key1 => "Value1",key2 => "Value2"}
4> MatchValue.
"Value2"
Map2 = Map#{key3 => "Value3"}.
#{key1 => "Value1",key2 => "Value2",key3 => "Value3"}
Map3 = Map2#{key1 := change_value1}.
#{key1 => change_value1,key2 => "Value2",key3 => "Value3"}

В текущем релизе, данный тип помечен как экспериментальный и имеет ряд ограничений, а именно:
  • Значение можно извлекать только вспомогательными функциями, но нельзя использовать следующую конструкцию: Value = Map#{key1}
  • Нельзя задать ключ, который не известен во время компиляции

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

Erlang/OTP портирован на ОС реального времени OSE

OSE — это высоко-производительная, POSIX совместимая операционная система реального времени, которая призвана увеличить эффективность использования оборудования.
В highlights указано, что не все части платформы были портированы.

Теперь анонимным функциям можно давать имена

И использовать их рекурсивно:

1> TestFun = fun Factorial(0) -> 1; Factorial(Num) when Num > 0 -> Num * Factorial(Num - 1) end.
#Fun<erl_eval.30.106461118>
2> TestFun(4).
24

Усовершенствование поддержки юникода

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

Так же

  • Новая опция {active, N} для TCP, UDP и SCTP сокетов
  • Улучшен маппинг из ASN.1 OCTET STRING и битовых строк в Erlang типы, и другие улучшения и оптимизации в ASN.1
  • Добавлен новый, опциональный, механизм балансировки использования планировщика
  • Добавлена экспериментальная возможность использования «dirty» планироващиков


LYSE доработали новую главу по мапам — learnyousomeerlang.com/maps
Joe Armstrong об изменениях — http://joearms.github.io/2014/02/01/big-changes-to-erlang.html
Готовые пакеты для вашей системы можно найти здесь.
Полный лог изменений
Официальная новость
Сергей Абрамян @saa
карма
6,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (5)

  • +2
    В нагрузку:
    Статья на lyse learnyousomeerlang.com/maps
    Статья от Joe Armstrong joearms.github.io/2014/02/01/big-changes-to-erlang.html
    • 0
      Да, про эти ссылки совсем забыл, спасибо, добавил в пост.
  • 0
    Теперь анонимным функциям можно давать имена

    Тем самым они автоматически перестают быть анонимными и становятся просто объектами первого класса.
    • 0
      Не совсем понял, куда пропадает анонимность? Это имя используется только для вызова функции самой себя. Чтобы не городить костыли подобного плана:

      SomeFun = fun(Fun) -> do_something(), Fun(Fun) end,
      SomeFun(SomeFun).
      


      Нововведение полезное, я считаю.
    • 0
      Это совсем разные вещи, функции в эрланге и так объекты первого класса.

      Как подметили выше, это сделано для другого.

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