Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Микрооптимизация R5-Lexer.ref + таблица частот лексем
Оптимизация была сделана с учётом частоты встречаемости различных лексем. Вот эта таблица: 79019 пробелы 22420 конец строки 15199 переменные 7789 идентификаторы 6347 TkOpenBracket 6347 TkCloseBracket 5397 TkSemicolon 4499 * комментарий 3314 TkAssign 2796 TkCloseCall 2683 <Ident 2541 $КЛЮЧЕВОЕСЛОВО 1806 '...' 1014 TkOpenBlock 1014 TkCloseBlock 696 /* ... */ 652 TkComma 557 TkColon 398 Digit 265 TkRedefinition 248 "..." 123 TkAmpersand 104 [Ident 104 TkCloseADT 99 <var 37 $EXTENDED 13 <+, <*, ... 1 <... Эта таблица получена для исходников компилятора Рефала-5λ, бо́льшая часть которых ранее была Простым Рефалом (так что может быть не репрезентативна). Оптимизация заключалась в простом переупорядочивании предложений функции DoScan и подобным оптимизациям в других функциях. И действительно она оказалась микрооптимизацией. Измерения делались на машине Intel® Core™ i5-2430M CPU @ 2.40GHz с 8 Гбайтами ОЗУ, ОС Windows 10. Было выполнено по 13 измерений текущего коммита и родительского стандартным бенчмарком. Программа ускорилась на 0,63 %, с 21,640 (21,475…21,772) до 21,503 (21,393…21,561). Результат статистически недостоверен, доверительные интервалы перекрываются сильно. Но делать большее число замеров очень долго, один проход бенчмарка занимает около 10 минут. Статистически достоверным оказывается ускорение линейного времени сопоставления с образцом — на 5,3 % с 7,789 (7,545…8,003) до 7,393 (7,277…7,626). Впрочем, именно это и оптимизировалось. Также уменьшилось число шагов рефал-машины, с 20691929 до 20421909, на 1,3 %. Коммит интересен таблицей, которая находится в его сообщении. Возможно, она пригодится для дальнейшей оптимизации лексера.
- Loading branch information