![](/img/trans.png)
[英]How to reliably influence generated code at near machine level using 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.