簡體   English   中英

為什么沒有javascript引擎支持尾調優化?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM