Functional programming 在CL中优化速度声明的功能是什么?

Functional programming 在CL中优化速度声明的功能是什么?,functional-programming,lisp,scheme,racket,Functional Programming,Lisp,Scheme,Racket,此命令执行哪些优化步骤 `(optimize speed (safety 0))` 我可以在我的Lisp/Scheme程序中手工编写其中一些技术吗 这些东西在CL中的作用取决于实现。通常发生的情况是:有一系列优化和其他代码转换可以通过各种权衡应用于代码,这些声明被用作更高级别的规范,并被转换为这些单独的转换。大多数实现还允许您控制单独的设置,但这是不可移植的 在该方案中,没有此类标准设施,即使某些方案使用类似的方法。问题是,总体上(即,在标准中)方案避免了此类“现实世界”问题。可以在这里或那里

此命令执行哪些优化步骤

`(optimize speed (safety 0))`
我可以在我的Lisp/Scheme程序中手工编写其中一些技术吗

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

  • 更高的速度设置将导致编译器在常量折叠、编译时类型推断(从而消除泛型操作的运行时动态调度)和其他代码分析/转换方面更加努力;较低的安全性将跳过运行时类型检查、数组绑定检查等。有关更多详细信息,请参阅的章节,该章节同时适用于和(或多或少)。

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

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

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

    您简要提到了“这里和那里的优化技术”。有没有一些书籍或地方可以让我学到更多关于如何使我的程序尽可能高效的知识?@kunjaan:正如Eli所说,你应该更准确地说明你正在使用的lisp/scheme实现,因为建议会有很大的不同。kunjaan:当然,也有很多关于编译器和优化的书籍;它们可能会有很大的不同,这取决于您所针对的语言,甚至是平台。有没有一些书籍或地方可以让我学到更多关于如何使我的程序尽可能高效的知识?@kunjaan:正如Eli所说,你应该更准确地说明你正在使用的lisp/scheme实现,因为建议会有很大的不同。kunjaan:当然,也有很多关于编译器和优化的书籍;它们可能会非常不同,这取决于您针对的语言,甚至是平台。