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 теперь потокобезопасны.
>>> Полный список изменений