【问题标题】:Racket Interactive vs Compiled Performance球拍交互与编译性能
【发布时间】:2012-04-25 11:49:36
【问题描述】:

我是否编译 Racket 程序似乎对运行时性能没有影响。

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

即使对于整数算术的紧密循环,我认为会出现一些差异,但无论我之前是否执行过 raco make,配置文件时间都是相同的。

我错过了一些简单的东西吗?

PS,我注意到我可以对源文件 (.rkt) 或 .zo 文件运行球拍。如果找到与.rkt 文件对应的.zo,球拍会自动使用.zo,还是需要显式使用.zo 文件?无论哪种方式,这对我看到的性能数据没有影响。

【问题讨论】:

    标签: racket


    【解决方案1】:

    是的,你是对的。

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

    另请参阅指南中的Performace chapter,了解有关如何提高性能的提示。

    【讨论】:

      【解决方案2】:

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

      注意:Eli 与我同时回复。详情请参阅他的回复。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-17
        • 1970-01-01
        • 1970-01-01
        • 2013-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多