【问题标题】:Why does the PureScript compiler generate lots of "| 0"为什么 PureScript 编译器会生成大量“| 0”
【发布时间】:2017-06-27 11:11:22
【问题描述】:

以下 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”似乎有点不必要。是优化吗?或者让它对 undefined 或 NaN 具有鲁棒性?

【问题讨论】:

    标签: purescript


    【解决方案1】:

    为整数插入 |0 可确保值不会意外变为浮点数或超出 int32 的范围 - 这保证了按位运算在 Int 值上的行为也将与预期一样。

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

    【讨论】:

    • 有趣!你能举一个例子,说明这种运行时行为对于捕捉一个在编译时不会被类型系统捕捉到的错误是可取的吗?
    猜你喜欢
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    相关资源
    最近更新 更多