为什么没有javascript引擎支持尾部调用优化?
Why do no javascript engines support tail call optimization?
我最近学习了Haskell中的尾部调用优化。我从下面的帖子中了解到这不是javascript的特性:
- 尾部递归优化JavaScript?
- 任何Javascript引擎尾部调用优化?
是否有一些内在的javascript的设计,使尾部调用优化特别困难?为什么这是像haskell这样的语言的主要特性,但现在才被讨论为某些javascript引擎的特性?
JavaScript支持尾部调用优化。目前还没有浏览器实现它,但随着规范(ES2015)的最终确定,所有环境都将有来实现它。像BabelJS这样的将新JavaScript转换为旧JavaScript的转译器已经支持它,你现在就可以使用它。
Babel的翻译非常简单:
function tcoMe(x){
if(x === 0) return x;
return tcoMe(x-1)
}
转换为:
function tcoMe(_x) {
var _again = true;
_function: while (_again) {
var x = _x;
_again = false;
if (x === 0) return x;
_x = x - 1;
_again = true;
continue _function;
}
}
即- to一个while循环。
至于为什么只有新支持,社区并没有很大的需要这样做,因为它是一种带有循环的命令式语言,所以在绝大多数情况下你可以自己编写这个优化(不像在ml中,这是必需的,正如Bergi指出的)。
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- 我需要从php调用javascript或jquery
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- JavaScript尾部调用中的函数是否经过优化
- 什么'这是“_函数:while“;Babel.js尾部调用中的语法
- 在 JavaScript 中封装尾部调用优化的实用程序
- 用被调用者的尾部调用函数'的参数列表
- JavaScript和尾部调用
- 是否可以在WebKit中检测尾部调用优化
- 不能在节点v6.4.0中启用尾部调用优化
- 如何在ES5中对递归匿名函数应用TCO(尾部调用优化)?
- 为什么没有javascript引擎支持尾部调用优化?
- Node.js尾部调用优化:可能与否