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

时间:2015-05-27 09:12:39

标签: haskell ghc template-haskell

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

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

我唯一知道的是language-c-quote支持C和Objective-C,而inline-c支持C。

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

1 个答案:

答案 0 :(得分:8)

inline-c's reddit announcement中讨论的(不久)讨论的一些差异:

  

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

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

         

    [...]

  •   
     

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

announcement on fpcomplete还包含其他信息,但总而言之,它们有点类似。