如何在Scheme中使用声明(类型,内联,优化)?

时间:2009-07-08 01:40:12

标签: functional-programming scheme racket

如何声明参数类型以避免类型检查?

如何优化速度以告诉编译器尽可能快地运行该功能(优化速度(安全0))?

如何在Scheme中创建内联函数?

如何使用数据对象的未装箱表示?

最后这些是重要的还是必要的?我可以依靠我的编译器来进行这些优化吗?

感谢, kunjaan。

2 个答案:

答案 0 :(得分:5)

  1. 你不能以任何便携的方式做任何这些。
  2. 您可以使用宏进行“某种”内联,但几乎总是尝试这样做。编写Scheme(或任何其他语言)编译器的人在决定何时最好内联函数时通常比你好得多。
  3. 您不能将值取消装箱;一些Scheme编译器会将其作为优化,但不以任何可见的方式(因为 是一种优化 - 所以它应该保留语义)。
  4. 关于你的上一个问题,答案是非常主观的。有些人在不知道某些功能使用了多少CPU周期的情况下无法入睡。有些人并不关心并且相信编译器能够合理地优化事物。至少在您更多地是语言学生而不是实施者的阶段,最好坚持使用后者。

答案 1 :(得分:2)

如果您想帮助编译器,请考虑尽可能减少顶级定义。 如果编译器在顶层看到一个函数,那么它很难猜测程序如何使用或修改该函数。 如果函数在使用它的函数范围内定义,则编译器的工作变得更加简单。

Chez Scheme手册中有一节内容如下: http://www.scheme.com/csug7/use.html#./use:h4

显然,Chez是最快的Scheme实施之一。如果它需要这种“指导”来做出很好的优化,我怀疑其他实现也离不开它(或者它们只是一起忽略它)。