inline-c和language-c-inline之间有什么区别?

Ste*_*haw 10 haskell ghc template-haskell

我一直在简要地研究Haskell的准引用库.这些库允许Haskell与其他语言集成.为了与C集成,似乎有两个具有类似功能的包:

由于我正在构建自己的准引用库,我对设计选择,API差异,性能等感兴趣.

我所知道的唯一区别是language-c-quote支持C和Objective-C,而inline-c支持C.

你会如何区分这些包裹?有什么根本区别?事实上,它们是否相似?

Zet*_*eta 8

inline-creddit公告中(稍后)讨论的一些差异:

这与language-c-inline相比如何?

  • inline-c我们有一个非常简单的核心库,是与其他抗quoters容易扩展.我希望核心功能是非常可预测的,并且让更高级的编组人员可以使用特定的用例.在language-c-inline编组工作中,混合使用硬编码规则和用户提供的模板Haskell函数.
  • 我们希望使语言尽可能简单地包含C代码.内联C拼接有准引号而没有模板Haskell函数.内联C代码指定使用反引号捕获的Haskell变量,目标类型都使用C语法指定.正如我在博客文章中所说,我非常关心这种情况,相信你在C中获得的是你所期望的.相关地,只检查反引号:C代码的其余部分没有被解析并且逐字逐句,因此我们不必担心用户正在使用的C编译器与使用的Haskell C解析器之间的最终不兼容性language-c-inline.
  • 我们还确保基础设施和构建过程顺利进行.该addTopDecl函数用于避免必须像运行时一样在运行时填充表language-c-inline,并且我还使用各种技巧来确保一切都能在整个构建中顺利运行.例如,生成的C函数的名称基于函数本身的内容的散列.这对于保证cabal重复构建同一文件非常重要 - 例如在使用分析支持进行编译时 - 导致生成相同的C符号,同时确保仅当C片段符号相同时才符号相同在模块中是相同的.

    [...]

简而言之,这两个库在精神上非常相似,但我们编码inline-c为更适合我们采用不同设计选择的需求.上面的一些优点可以很容易地移植到language-c-inline,尤其是最后一点.

关于fpcomplete公告还包含其他信息,但总而言之,它们有点类似.