2012-04-13 2 views
19

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

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

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

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

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

ответ

18

Да, вы правы.

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

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

+0

Спасибо большое, Эли. – Scott

11

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

Примечание: Эли ответил в то же время, что и я. См. Его ответ для более подробной информации.