代码之家  ›  专栏  ›  技术社区  ›  sylvanaar

语言不可知API生成

  •  2
  • sylvanaar  · 技术社区  · 15 年前

    我目前正在为一系列子系统进行设计,我希望能够提供给定子系统公开的API供其他子系统使用。

    在过去,我使用Swig将C API公开给各种其他语言。这对我来说很好,但最终API是用C定义的,所以基本上,API的一个方面是语言不可知论,而另一个方面则不是。

    我真正想要的是拥有类似于swig的东西,它可以基于对API的一些描述在两种任意语言之间生成接口。

    我不想使用Web服务。

    例如,我想从Java调用一个“函数”,并在Python中实现“函数”。我希望能够使用代码生成器生成语言互操作。

    今天有什么可以做到的吗?至少对于简单的“函数”调用-忽略更复杂的情况,如回调和需要在“函数”调用本身之外维护引用的情况。

    2 回复  |  直到 15 年前
        1
  •  1
  •   elifiner    15 年前

    COM (在较小程度上,火狐的 XPCOM )可能是你想要的。在COM中,您使用名为IDL的语言定义API,然后可以将其编译成不同的语言。当使用相同的语言时,调用通常退化为有效的函数调用。

    然而,COM是一个非常复杂的技术,我永远不会用它来做一个新的项目。

        2
  •  1
  •   sylvanaar    15 年前

    我在跟踪古力的链接后发现了这个 Protocol Buffers .

    这看起来很有说服力,我打算把它作为我自己问题的答案。

    http://incubator.apache.org/thrift/

    节俭是一个可扩展的跨语言服务开发的软件框架。它将一个软件栈和一个代码生成引擎结合起来,在C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、Cype、CoCa、SimalTalk和OcAML之间高效地无缝地构建服务。

    whitepaper :

    …我们面临的挑战是建立一个透明的, 跨多座高性能桥梁 程序设计语言。我们发现 大多数可用的解决方案都是 太有限,报价不够 数据类型自由,或 次要绩效

    也从 白皮书 :

    A.类似的系统以下是类似于节俭的软件系统。 每个都是(非常!)简要描述:

    • 肥皂。基于XML的。通过HTTP为Web服务设计,XML过多 分析开销。

    • CORBA。相对全面,有争议的过度设计和 重量级人物。相当麻烦 软件安装。

    • 通用域名格式。主要包含在Windows客户端软件中。不是完全开放的 解决方案。

    • 柱子。重量轻,性能高,但缺少 版本控制和抽象。

    • 协议缓冲区。封闭源代码,归谷歌所有。在Sawzall中描述 纸张。

    关于协议缓冲区的最后一部分是过时的——它是开放源代码的