[英]Why do no javascript engines support tail call optimization?
我最近在Haskell中了解了尾部調用優化。 我從以下帖子中了解到這不是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;
}
}
那是 - 到一個循環。
至於為什么它只是新支持的,社區並沒有很大的需要這么快就這樣做,因為它是一個帶循環的命令式語言,所以對於絕大多數情況你可以自己編寫這個優化(不像需要這樣的MLs) ,正如Bergi指出的那樣)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.