我是否编译一个Racket程序似乎对运行时性能没有任何影响.
最初是通过编译改进了文件的加载吗?换句话说,运行时racket src.rkt是否正在进行jit编译,这就是为什么我认为编译与交互没有区别?
即使对于整数运算的紧密循环,我认为会发生一些差异,无论我以前是否做过,配置文件时间都相等raco make.
我错过了一些简单的事吗?
PS,我注意到我可以对源文件(.rkt)或.zo文件运行racket .球拍是否会自动使用.zo找到与.rkt文件对应的if ,或者是否.zo需要明确使用该文件?无论哪种方式,它对我所看到的性能数字没有任何影响.
Eli*_*lay 26
你是对的.
Racket分两个阶段编译代码:首先,代码被编译成字节码形式,然后当它运行时,它会被嵌入到机器代码中.编译文件时,基本上就是创建字节码,以便以后重新编译它.由于通常不需要花费大量时间来处理小块代码,因此您不会在运行时看到任何明显的差异.举一个极端的例子,您可以删除*.zo集合树中的所有文件并启动DrRacket - 由于有大量代码,因此需要花费大量时间才能启动,但一旦启动,它就会像往常一样运行.(单击"运行"也会很慢,因为这将重新加载并重新编译一些文件.)更大的代码片段的另一个问题是编译过程会使内存消耗更高,但这也不是小代码片段的问题.
有关如何提高性能的提示,另请参阅指南中的" 性能"一章.