3

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

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

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

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

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

谢谢,昆贾恩。

4

2 回答 2

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

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

Chez Scheme 手册中有一个关于此的部分: http ://www.scheme.com/csug7/use.html#./use:h4

显然 Chez 是目前最快的 Scheme 实现之一。如果它需要这种“指导”来进行良好的优化,我怀疑其他实现也不能没有它(或者他们只是一起忽略它)。

于 2009-07-10T20:16:53.930 回答