2017-06-27 38 views
1

以下PureScript代碼:爲什麼PureScript編譯器產生大量的 「| 0」

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強健?

回答

3

爲整數插入|0可確保值不會意外變爲浮點或超出int32的範圍 - 這可確保按位操作的行爲與Int的值相同。

理論上它可能是一個優化,asm.js認爲|0作爲一個暗示,一個值是一個int過,但我認爲在實踐中這是一廂情願的想法,它使得在平均JS程序的區別!

+0

有趣!你能否給出一個例子,說明這種運行時行爲在捕獲一個在編譯時不會被類型系統捕獲到的錯誤時是可取的? – user3048859

相關問題