我打算在矢量庫和注意到{-# INLINE_FUSED transform #-}
,我不知道它做什麼?我看到它在vector.h
中定義,但沒有其他地方。INLINE_FUSED編譯哈斯克爾
12
A
回答
11
的定義是指INLINE_FUSED
相同INLINE [1]
; INLINE_INNER
與INLINE [0]
相同。 [1]
和[0]
是用於排序內聯階段的標準ghc。請參閱標題7.13.5.5下的討論。相位控制 in http://www.haskell.org/ghc/docs/7.0.4/html/users_guide/pragmas.html
vector
需要控制ghc
內嵌各種定義的階段。第一它想要的功能stream
和unstream
暴露所有用途,使得(上述全部)stream.unstream
可以通過id
在其他情況下取代,並且類似地,根據分佈在整個所述(改寫)RULE編譯指示。
典型向量到向量函數寫爲unstream . f . stream
,其中f是一個流至流函數。 unstream
從Stream
在內存中構建實際向量; stream
將真實載體讀入Stream
。遊戲的目標是減少構建的實際向量的數量。所以三個向量的組成向量函數
f_vector . g_vector . h_vector
真的
unstream . f_stream . stream . unstream . g_stream . stream . unstream . h_stream . stream
其中他改寫,
unstream . f_stream . g_stream . h_stream . stream
等。所以我們寫一個新的矢量而不是三個。
爲transform
的規則比這個票友了一點,但在訂購的同一微妙系統屬於:
transform f g (unstream s) = unstream (Bundle.inplace f g s)
transform f1 g1 (transform f2 g2 p) = transform (f1 . f2) (g1 . g2) p
在https://github.com/haskell/vector/blob/master/Data/Vector/Generic/New.hs#L76
所以你可以看到什麼形式如何內聯:
unstream . h_stream . stream . transform f1 g1 . transform f2 g2
. unstream . j_stream . stream $ input_vector
被改寫。
相關問題
- 1. 哈斯克爾編譯DLL
- 2. 編譯哈斯克爾-MPI
- 3. 哈斯克爾到JavaScript編譯器?
- 4. 模板哈斯克爾編譯錯誤
- 5. 哈斯克爾模塊不能編譯
- 6. 哈斯克爾 - 編譯錯誤
- 7. 哈斯克爾
- 8. 哈斯克爾
- 9. 哈斯克爾
- 10. 在哈斯克爾
- 11. 在哈斯克爾
- 12. 在哈斯克爾
- 13. Control.Monad.Writer哈斯克爾
- 14. 哈斯克爾 - div`
- 15. 在哈斯克爾
- 16. Control.Monad.State哈斯克爾
- 17. zipWith哈斯克爾
- 18. 在哈斯克爾
- 19. 哈斯克爾Monad.Writer
- 20. 哈斯克爾 - 布爾RoseTree
- 21. 哈斯克爾並行編程
- 22. 哈斯克爾CGI Web編程幫助
- 23. 簡單哈斯克爾階乘函數不編譯
- 24. 評估在編譯時使用模板哈斯克爾
- 25. 真實世界哈斯克爾,第5章,SimpleJSON編譯錯誤
- 26. 與在data.set哈斯克爾程序犯規編譯
- 27. 應用函數兩次編譯錯誤哈斯克爾
- 28. 編譯哈斯克爾源作爲動態庫
- 29. 哈斯克爾多維數組與編譯器執行長
- 30. 哈斯克爾編譯DLL「未定義的引用」
謝謝亞瑟,你已經解釋清楚了。 – jap