【问题标题】:What are the things that optimize speed declaration do in CL?CL中优化速度声明的作用是什么?
【发布时间】:2010-11-08 21:45:28
【问题描述】:

这个命令做了哪些优化步骤

`(optimize speed (safety 0))`

我可以在我的 Lisp/Scheme 程序中手动编码其中一些技术吗?

【问题讨论】:

    标签: functional-programming lisp scheme racket


    【解决方案1】:
    1. 这些东西在 CL 中的作用取决于实现。通常发生的情况是:有一堆优化和其他代码转换可以通过各种权衡应用于您的代码,并且这些声明用作转换为这些单独转换的更高级别的规范。大多数实现还可以让您控制各个设置,但这不是可移植的。
    2. 在Scheme 中没有这样的标准工具,尽管一些Scheme 使用了类似的方法。问题是Scheme 通常(即在标准中)避免了这样的“现实世界”问题。可以在这里和那里使用一些优化技术,但这取决于实现。例如,在 PLT 中,您应该做的第一件事是确保您的代码在模块中定义——这确保编译器能够进行一系列优化,例如内联和展开循环。

    【讨论】:

    • 您简要提到了“这里和那里的优化技术”。是否有书籍或地方可以让我了解更多关于让我的程序尽可能高效的信息?
    • @kunjaan:正如 Eli 所说,您应该详细说明您正在使用的 lisp/scheme 实现,因为建议会有很大差异。
    • kunjaan:当然还有很多关于编译器和优化的书籍;根据您所针对的语言甚至平台,它们可能会有很大的不同。
    【解决方案2】:

    我不知道,但如果你想探索,我认为SBCL internals wiki 可能有一些起点。

    【讨论】:

      【解决方案3】:

      更高的速度设置将导致编译器在常量折叠、编译时类型推断(因此消除通用操作的运行时动态分派)和其他代码分析/转换方面更加努力;较低的安全性将跳过运行时类型检查、数组绑定检查等。有关更多详细信息,请参阅 CMUCL User's Manual Advanced Compiler Use and Efficiency Hints 章节,该章节适用于 CMUCLSBCL(或多或少)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 2017-02-08
        • 2021-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-01
        相关资源
        最近更新 更多