簡體   English   中英

比較ghc中生成的代碼

[英]Compare generated code in ghc

在C世界中比較C的兩個碎片的一個常見做法是查看它們產生的組件。 我想知道GHC在以下情況下會產生什么代碼:

afmap :: Functor f => (a -> b -> c) -> f b -> a -> f c
afmap fn fb a' = (fn a') <$> fb

afmap  = flip . (((.).(.)) fmap ($))

所以我嘗試過:

$ ghc -S test.hs -o test.S

其中(不出所料)產生了或多或少不可讀的代碼。

評估ghc如何優化代碼的正確方法(如果有的話)是什么?

裝配可能有點太低級了。 你可能想看看GHC的中間優化語言Core。

本質上,GHC將Haskell轉換為Core,對其進行各種優化傳遞,最終將Core轉換為STG,然后轉換為C--和本機代碼生成器(即匯編)或通過LLVM(我不知道)很多關於那個特定的途徑)。

特別是,Core仍然相當高級,並且有點類似於Haskell(即,它具有類似的抽象,如模式匹配和惰性評估)。 如果兩個程序生成相同的Core,那么顯然它們會生成相同的機器代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM