我最近在某處讀過模式匹配發生在運行時而不是編譯時。 (我正在尋找來源,但目前無法找到它。)這是真的嗎?如果是這樣,功能守衛有相同的表現嗎?模式匹配比守衛更高性能嗎?
讀這對我來說令人驚訝,因爲我曾經認爲GHC能夠在編譯期間優化一些(可能不是全部)模式匹配決策。這是否發生?
一種示例情況:
f 1 = 3
f 2 = 4
VS
f' a | a == 1 = 3
| a == 2 = 4
做f
和f'
編譯成相同數目的(在覈心和/或較低例如)指令?
如果我在構造函數而不是值上匹配模式,情況會有什麼不同嗎?例如。如果GHC發現某個位置的函數總是用一個構造函數調用,那麼它是否會以消除運行時檢查的方式優化該調用?如果是這樣,你能給我一個例子說明優化產生了什麼?
綜合
在性能方面,瞭解這兩種方法有什麼好處?
什麼時候最好的性能?
您是在問如何從GHC獲得核心產出,或者如何使用標準? – jberryman
相關:[Haskell GHC:與N個構造函數匹配的模式的時間複雜度是多少?](http://stackoverflow.com/q/9027384/2751851) – duplode
我傾向於認爲模式匹配速度更快,考慮到「Eq」實例通常基於模式匹配。 – AJFarmar