我打算在矢量库和注意到{-# 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