Mazdaywik / Refal-05

Очень минималистичный компилятор Рефала
https://mazdaywik.github.io/Refal-05/
Other
4 stars 3 forks source link

Ошибка в профилировании копирования переменных #26

Closed Mazdaywik closed 5 years ago

Mazdaywik commented 6 years ago

Для файла, который во вложении, неправильно выводится результат профилирования.

C:\…>echo 5|lambda.exe
Enter a number:
120

Total program time: 220.528 seconds (100.0 %).
(Total refal time): 220.308 seconds (99.9 %).
Linear result time: 219.789 seconds (99.7 %).
t- and e-var copy time: 219.203 seconds (99.4 %).
Linear pattern time: 0.519 seconds (0.2 %).
Builtin time: 0.220 seconds (0.1 %).
Step count 1903576
Memory used 1969848 nodes, 1969848 * 16 = 31517568 bytes

В силу специфики реализации там выполняется действительно много операций копирования переменных, и, похоже, они не вычитаются из линейного времени. Либо какая-то там другая ошибка. Для сравнения, результат профилирования Рефала-5λ:

C:\…>echo 5|lambda.exe
Enter a number:
120

Total program time: 327.484 seconds (100.0 %).
(Total refal time): 326.922 seconds (99.8 %).
t- and e-var copy time: 324.539 seconds (99.1 %).
Linear result time: 1.462 seconds (0.4 %).
Linear pattern time: 0.921 seconds (0.3 %).
Native time: 0.282 seconds (0.1 %).
Runtime time overhead: 0.280 seconds (0.1 %).
Identifiers allocated: 101
Step count 3197998
Memory used 1969846 nodes, 1969846 * 16 = 31517536 bytes

Приложенный файл

Mazdaywik commented 6 years ago

Исправлено:

C:\…>echo 5|lambda.exe
Enter a number:
120

Total program time: 293.843 seconds (100.0 %).
(Total refal time): 293.687 seconds (99.9 %).
t- and e-var copy time: 292.729 seconds (99.6 %).
Linear pattern time: 0.486 seconds (0.2 %).
Linear result time: 0.472 seconds (0.2 %).
Builtin time: 0.156 seconds (0.1 %).
Step count 1903604
Memory used 2103882 nodes, 2103882 * 16 = 33662112 bytes
Mazdaywik commented 6 years ago

Как оказалось, та же ошибка была и в линейном сопоставлении с образцом.