我想知道花时间为Google脚本做尾叫优化是否值得。
因此,我理解Google脚本使用ES2015 (ES6)版本的JavaScript规范(ref1,ref2),运行关于V8运行时实现。
据推测,ES2015支持 (适当的)尾调用优化来自规范。但是,有一些一些指征认为V8实际上没有实现它:
此外,我了解到这里有一个重要的细微差别:
正确的尾调用(PTC)和尾呼叫优化(TCO)的术语经常被混淆。以下是两者之间的区别:
PTC只处理堆栈操作,而TCO将递归函数重写为迭代函数。
所以考虑到这个..。
做Google脚本(GAS):
发布于 2022-04-17 16:48:25
(这里是V8开发人员。)
谷歌应用程序脚本(GAS)支持正确的尾调用吗?
不是的。V8不支持PTCs (也不支持STCs);您已经对背景故事进行了连系处理。因为GAS是为JS执行而构建在V8上的,所以它也不能支持它们。
想知道花时间为脚本做尾调用优化是否值得。/ GAS是否支持尾部调用优化,在任何方面都值得这样做,以提高性能?
我不知道你是什么意思: TCO是编译器可能做的事情,而不是你做的事情。
如果您的意思是“将调用移动到尾位置,所以编译器可以将它们转换为迭代”:不,V8不会这样做,所以这不值得您花时间。呼叫是否发生在尾部位置对性能没有影响。(我也不会在短期内对这种改变下注。)
如果您的意思是“手动将递归转换为迭代”:对于性能关键的代码来说,这可能是值得的;在特定情况下是否值得这样做只能通过尝试和度量效果来回答。(和往常一样,一种小的人工测试。“微基准”很可能产生不适用于其他情况的误导性结果。)
这不需要任何气体或V8的“支持”。
https://stackoverflow.com/questions/71875854
复制相似问题