Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Functional programming 如何在Scheme中使用声明(类型、内联、优化)?_Functional Programming_Scheme_Racket - Fatal编程技术网

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

Functional programming 如何在Scheme中使用声明(类型、内联、优化)?,functional-programming,scheme,racket,Functional Programming,Scheme,Racket,如何声明参数的类型以避免类型检查 我如何优化速度以告诉编译器尽可能快地运行函数,如(优化速度(安全0)) 如何在Scheme中生成内联函数 如何使用数据对象的非固定表示 最后,这些是重要的还是必要的?我可以依靠我的编译器来进行这些优化吗 谢谢, 昆詹 你不能用任何便携式的方式做这些 您可以使用宏获得“某种”内联,但几乎总是尝试这样做。编写Scheme(或任何其他语言)编译器的人通常比您更好地决定何时最好内联函数 不能将值取消装箱;一些Scheme编译器会将其作为一种优化,但不会以任何可见的方式进

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

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

如何在Scheme中生成内联函数

如何使用数据对象的非固定表示

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

谢谢, 昆詹

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

  • 如果要帮助编译器,请考虑在可能的情况下减少顶层定义。 如果编译器在顶层看到一个函数,它很难猜测程序如何使用或修改该函数。 如果函数是在使用它的函数的范围内定义的,那么编译器的工作就会简单得多

    Chez方案手册中有一节介绍了这一点:

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