2009-11-12 29 views
1

我目前正在开发一个子系统集合的设计,我希望能够提供给定子系统暴露的API供其他子系统使用。语言不可知API生成

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

我真的想是有类似的东西痛饮,可以基于API的一些说明2种任意语言之间的接口。

我不想使用网络服务。

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

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

+0

我怀疑这样的事情存在,但我期待着看到的人说些什么。 – 2009-11-12 15:30:50

+0

我想你不希望CORBA如你所说你不想使用网络服务?整个系统运行时,子系统是否必须位于一个进程内? – 2009-11-12 16:29:58

+0

为了语言的互操作性,假定它们将处于相同的过程中。 – sylvanaar 2009-11-12 17:08:27

回答

1

我在跟随gooli的链接Protocol Buffers后发现这个。

这看起来非常引人注目,我会建议它作为我自己问题的答案。

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

节俭是可伸缩的跨语言服务开发一个软件框架。它将软件堆栈与代码生成引擎相结合,以构建在C++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C#,Cocoa,Smalltalk和OCaml之间高效无缝工作的服务。

whitepaper

...我们提出,在许多 编程语言建立一个透明, 高性能桥梁的挑战。我们发现,大多数 可用的解决方案要么 太有限了,没有提供足够的 数据类型的自由,或者从 欠佳表现

也遭受了whitepaper

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

  • SOAP。基于XML的。针对通过HTTP的Web服务而设计,过多的XML 解析开销。

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

  • COM。主要支持Windows客户端软件。不是完全开放的 解决方案。

  • 支柱。轻量级和高性能,但缺少版本和抽象。

  • Protocol Buffers。由Google拥有的封闭源代码。在Sawzall 论文中描述。

有关协议缓冲区的最后一部分是外的日期 - 它已经成为开源

1

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

但是,COM是一个非常复杂和垂死的技术,我永远不会用于新项目。

+0

是的,COM确实做了这项工作,尽管这不是我正在寻找的 - 正是你提到的原因。 – sylvanaar 2009-11-13 01:09:44

+1

谷歌协议缓冲区可能是另一种选择(http://en.wikipedia.org/wiki/Protocol_Buffers)。 – gooli 2009-11-14 09:36:11

+0

协议缓冲区引人注目 - 感谢那个链接+1 – sylvanaar 2009-11-16 12:02:19