08.12.2022

Rakudo 2022.04

Rakudo — компилятор языка программирования Raku, до октября 2019 года называвшегося Perl6. Компиляция осуществляется для MoarVM, JVM и других виртуальных машин.

Изменения:

  • Улучшено сообщение об ошибке вызванной переназначением специальной переменной $/ (PR исправления).

Нововведения:

  • появилась возможность получать доступ к предыдущим значениям REPL-консоли:
[0] > 42
42
[1] > 666
666
[2] > $*0 + $*1
708
[3] > $*2
708
[4] > @*_
[42 666 708 708]
  • добавлена переменная окружения INSIDE_EMACS для улучшения интеграции с Emacs;
  • добавлен метод IO::Path.dir-with-entries, возвращающий значение типа Bool и помогающий безопасно проверить пуст ли каталог;
  • реализовано свойство will complain;

Удалено:

  • недокументированная константа $?COMPILATION-ID.

Производительность:

  • IO::Path.mkdir в случаях когда каталог уже существует работает в два раза быстрее;
  • внутри многих методов ускорена работа с пустыми (Empty) значениями. Теперь Empty возвращается сразу, без инициализации итераторов и последовательностей;
  • несколько оптимизаций в подстановочных регвырах ( 1,2,3);
  • микро-оптимизации для ускорения компиляции кода;
  • микро-оптимизации для ускорения загрузки модулей;
  • микро-оптимизация ускоряющая создание объектов IO::Special.

Исправления:

  • Добавлена подсказка о возможно пропущенном ключевом слове sub. Пример:
 Variable '$verbose' is not declared. Perhaps you forgot a 'sub' if this was intended to be part of a signature?
  • Откатили код с ошибкой этапа компиляции: «An object will never work if native is expected».
  • Теперь значение $/ изменяется во время подстановки только если указанная переменная доступна для записи.
  • Любые скрытые файлы (dotfiles) в «dist» каталоге теперь игнорируются (описание проблемы).
  • Инициализация *CWD перестала быть ленивой для предотвращения гонок.
  • Переменные PROCESS:: теперь инициализируются по одному разу.
  • Загрузка настроек защищена блокировкой.
  • Исправлены гонки в Rakudo::Supply::BlockState.
  • uniprop/uniprops теперь потокобезопасны.

>>> Полный список изменений

Источник.