Вышел 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
    Готовые пакеты для вашей системы можно найти здесь.
    Полный лог изменений
    Официальная новость
    • +36
    • 8,2k
    • 5
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 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
            Это совсем разные вещи, функции в эрланге и так объекты первого класса.

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

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