Racket Interactive与编译性能

Sco*_*ach 22 racket

我是否编译一个Racket程序似乎对运行时性能没有任何影响.

最初是通过编译改进了文件的加载吗?换句话说,运行时racket src.rkt是否正在进行jit编译,这就是为什么我认为编译与交互没有区别?

即使对于整数运算的紧密循环,我认为会发生一些差异,无论我以前是否做过,配置文件时间都相等raco make.

我错过了一些简单的事吗?

PS,我注意到我可以对源文件(.rkt)或.zo文件运行racket .球拍是否会自动使用.zo找到与.rkt文件对应的if ,或者是否.zo需要明确使用该文件?无论哪种方式,它对我所看到的性能数字没有任何影响.

Eli*_*lay 26

你是对的.

Racket分两个阶段编译代码:首先,代码被编译成字节码形式,然后当它运行时,它会被嵌入到机器代码中.编译文件时,基本上就是创建字节码,以便以后重新编译它.由于通常不需要花费大量时间来处理小块代码,因此您不会在运行时看到任何明显的差异.举一个极端的例子,您可以删除*.zo集合树中的所有文件并启动DrRacket - 由于有大量代码,因此需要花费大量时间才能启动,但一旦启动,它就会像往常一样运行.(单击"运行"也会很慢,因为这将重新加载并重新编译一些文件.)更大的代码片段的另一个问题是编译过程会使内存消耗更高,但这也不是小代码片段的问题.

有关如何提高性能的提示,另请参阅指南中的" 性能"一章.


Asu*_*awa 13

无论是在REPL上以交互方式运行还是从命令行运行,Racket都将始终编译您的代码.以下是指南中解释它的部分.在交互模式下,编译器将每个表达式/定义转换为内存中的字节码并执行该操作.否则,编译器将字节码输出到zo文件.

注意:Eli在我做的同时回复了.有关详细信息,请参阅他的回复