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

10
我简要研究了Haskell的类引语库。这些库允许Haskell与其他语言集成。为了与C集成,似乎有两个具有类似功能的包: 我正在考虑构建自己的类引语库,因此我对设计选择、API差异和性能感兴趣。
据我所知,唯一的区别是 language-c-quote 支持C和Objective-C,而 inline-c 支持C。
你如何区分这些包?它们有什么根本区别?实际上,它们是否相似?
1个回答

8

inline-c的reddit公告中简要讨论了一些区别:

language-c-inline相比,有什么不同呢?

  • inline-c中,我们有一个非常简单的核心库,可以轻松地通过附加反引号扩展。我希望核心功能非常可预测,并将更复杂的编组留给特定用例。 在language-c-inline中,编组使用硬编码规则和用户提供的 Template Haskell 函数混合工作。
  • 我们希望将包含 C 代码的语言尽可能简单。 内联C与准引用器一起拼贴,没有 Template Haskell 函数。 内联C代码使用反引号指定要捕获的Haskell变量,目标类型都使用C语法指定。正如我在博客文章中所说的,我非常在意这一点,以确信您在C中得到的是您期望的内容。相关的是,只有反引号被检查:其余的 C 代码未经解析,并且保留原样,因此我们不必担心用户使用的 C 编译器与 language-c-inline 使用的 Haskell C 解析器之间的潜在不兼容性。
  • 我们还确保基础架构和构建过程非常顺畅。 使用 addTopDecl 函数可避免像 language-c-inline 那样在运行时填充表,并且我还使用各种技巧,以确保一切都可以在构建之间平稳工作。例如,生成的 C 函数的名称是基于函数本身内容的哈希值。这对于保证使用 cabal 重复编译同一文件时(例如在编译支持分析的情况下)生成相同的 C 符号非常重要,同时确保仅当模块中的 C 代码相同时才是相同的符号。

    [...]

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

fpcomplete 的公告也包含其他信息,但总的来说,它们有些类似。


谢谢!我没有意识到inline-c是多么近期的技术。 - Steven Shaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接