为什么PureScript编译器生成大量“| 0”

时间:2017-06-27 11:11:23

标签: purescript

以下PureScript代码:

fibs 0 = 1
fibs 1 = 1
fibs n = fibs (n-1) + fibs (n-2)

编译为以下JavaScript:

var fibs = function (v) {
    if (v === 0) {
        return 1;
    };
    if (v === 1) {
        return 1;
    };
    return fibs(v - 1 | 0) + fibs(v - 2 | 0) | 0;
};

除了“| 0”似乎有点不必要之外,这一切都很有意义。这是优化吗?或者使其对未定义或NaN具有鲁棒性?

1 个答案:

答案 0 :(得分:3)

为整数插入|0可确保值不会意外地变为浮点或超出int32的范围 - 这可以保证按位操作在Int值上的行为也符合预期。

理论上它可能是一个优化,因为asm.js认为|0暗示一个值也是一个int,但我认为在实践中这是一厢情愿的想法它会对普通的JS程序产生影响!