Рефал-5λ, версия 3.0.1
Документация (#149)
- Написано «Приложение B. Краткий справочник».
- На страницы документации добавлены содержания, исправлены уровни заголовков (которые стали заметны благодаря содержаниям).
Оптимизации (#194)
-
Незначительно оптимизирована библиотека Library:
__Step-Drop
для одношаговых обёрток, функцииFirst
,Last
иLenw
переписаны на Си++. -
Оптимизировано распределение памяти: время копирования повторных переменных ускорено примерно в 1,5–2 раза, линейное время построения результата — на 8 %.
-
Общее ускорение компилятора: использование более быстрой библиотеки, оптимизация в лексическом анализаторе. Кумулятивное ускорение в обычном режиме (без оптимизаций) составило 16 %.
Был выполнен стандартный бенчмарк на коммите, помеченном как 3.0 и на коммите-предке для 3.0.1.
Выполнялось 13 проходов с ключамиRLC_FLAGS=-OC
,RLMAKE_FLAGS=
,BENCH_FLAGS=
.
Компьютер: Intel® Core™ i5-2430M 2,40 ГГц, ОЗУ 8 Гбайт.
Операционная система: Windows 10 x64 1909.
Компилятор C++: Borland C++ Compiler 5.5.1 (2000 года).
Процент вычислялся для метрики Total program time,- до оптимизации: медиана 27,218 с, доверительный интервал 27,188…27,250 с,
- после оптимизации: медиана 22,875 с, доверительный интервал 22,750…23,094 с.
Прирост 4,3 с или 16,0 % является достоверным.
Замеры:
-
Ускорение работы компилятора в некоторых режимах:
- незначительное в режиме
-OD
: 5,5 %; - существенное в режиме
-OR
: примерно в 3 раза; - существенное в режиме
--log=filename.log
: примерно в 2 раза.
- незначительное в режиме
Флаги оптимизации
Добавлены пустые флаги: -OG
(глобальная оптимизация) как задел на будущее, экспериментальные -Ox
, -Oy
, -Oz
, которые нужны для удобства отладки (их можно поместить глобально в RLMAKE_FLAGS
и вызывать makeself-s.*
).
Улучшения отчёта профилировщика функций (#194)
- Вывод единиц измерения времени для функций (ms).
- Подсчёт относительной продолжительности шага функции (по отношению к продолжительности среднего шага). Величина много больше единицы означает, что функция работает медленно — содержит открытые, повторные или копируемые переменные, либо это функция ввода-вывода.
- Для функций учитываются их области видимости — одноимённые локальные функции считаются раздельно. Теперь если в отчёте видно, что, скажем
Map@3
выполняется долго, можно понять — из какой она единицы трансляции.
Исправлены ошибки
- Не выполнялась прогонка и встраивание в аргументах косвенных вызовов функций (#277).
- Мелкая ошибка в режиме
-OS
при специализации функций с условиями. - Мелкая ошибка анализе флагов оптимизации в командной строке.
Для установки на Windows скачайте и запустите файл setup-refal-5-lambda-3.0.1.exe
.
Для установки на Linux и macOS выполните в терминале следующую команду:
curl -L https://bmstu-iu9.github.io/refal-5-lambda/setup.bash | bash
При этом на компьютере должен быть установлен компилятор GCC C++ или Clang.
Либо программу можно собрать из исходников (архивы bootstrap-refal-5-lambda-3.0.1.zip
или bootstrap-refal-5-lambda-3.0.1.tar.gz
)