facebookarchive/prepack

Eliminate unnecessary object allocations for residual functions

Open

#495 opened on 2017年5月2日

GitHub で見る
 (3 comments) (0 reactions) (1 assignee)JavaScript (14,268 stars) (520 forks)batch import
enhancementhelp wantedserializer

説明

Prepacking

function() {
    function f() {
        let obj = { f: 42 };
        return function() { return obj.f; }
    }
    g = f();
})();

currently yields the following:

(function () {
    var _1 = {
        f: 42
    };

    function _0() {
        return _1.f;
    }

    g = _0;
})();

The object allocation for _1 is silly. #494 suggests delaying the allocation, but in this example, it could be completely eliminated. Prepack could generate the following code:

(function () {
    let _1_f = 42;
    function _0() {
        return _1_f;
    }

    g = _0;
})();

Or even better:

(function () {
    function _0() {
        return 42;
    }

    g = _0;
})();

If instead of 42 the field obj.f may either hold an object reference or may be mutated by the residual code, then another variable similar to _1 would be needed.

コントリビューターガイド

Eliminate unnecessary object allocations for residual functions · facebookarchive/prepack#495 | Good First Issue