Подтвердить что ты не робот

Racket Interactive vs Compiled Performance

Независимо от того, компиляция программы Racket не влияет на производительность выполнения.

Это только загрузка файла, изначально улучшенная путем компиляции? Другими словами, работает ли racket src.rkt компиляция jit на лету, поэтому я не вижу разницы в компиляции vs interactive?

Даже для жестких циклов целочисленной арифметики, где я думал, что какая-то разница произойдет, времена профиля эквивалентны, независимо от того, сделал ли я ранее raco make.

Я пропустил что-то простое?

PS, я замечаю, что я могу запустить ракетку против файла исходного файла (.rkt) или .zo. Использует ли racket автоматически .zo, если он найден, который соответствует файлу .rkt, или файл .zo должен использоваться явно? В любом случае, это не имеет никакого значения для показателей производительности, которые я вижу.

4b9b3361

Ответ 1

Да, вы правы.

Ракетка компилирует код в два этапа: во-первых, код скомпилирован в форму байт-кода, а затем, когда он запускается, он превращается в машинный код. Когда вы компилируете файл, вы в основном создаете байт-код, который экономит время на повторную компиляцию. Поскольку обычно это не то, что занимает много времени для небольших фрагментов кода, вы не увидите заметной разницы в времени выполнения. В крайнем случае вы можете удалить все файлы *.zo в дереве коллекций и запустить DrRacket - для начала потребуется много времени, так как есть тонна кода, но как только он начнется, он будет работать почти как обычно, (Также было бы медленно нажать "запустить", поскольку это перезагрузит и перекомпилирует некоторые файлы.) Еще одна проблема для больших фрагментов кода заключается в том, что процесс компиляции может увеличить потребление памяти, но это также не проблема с меньшими фрагментами кода.

См. также главу в руководстве для подсказок о том, как повысить производительность.

Ответ 2

Racket всегда будет компилировать ваш код, независимо от того, выполняется ли он интерактивно в REPL или выполняется из командной строки. Здесь - это раздел в руководстве, который объясняет это. В интерактивном режиме компилятор превращает каждое выражение/определение в байт-код в память и выполняет это. В противном случае компиляторы выводят байт-код в файлы zo.

Примечание: Эли ответил в то же время, что и я. Подробнее см. Его ответ.