有什么优化速度声明在CL中做的事情?

时间:2009-07-08 01:45:09

标签: functional-programming lisp scheme racket

此命令有哪些优化步骤

`(optimize speed (safety 0))`

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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