4

我刚刚在 scala 中完成了一个相对较大的项目,很快就会开始另一个相关的项目。

我还没有选择这种语言,我希望我的决定更多地基于语言或可用库的特性,而不是互操作性问题。

这就是问这个的原因。

我的要求是(顶部更重要):

  1. 各种编程语言/平台之间的互操作性(可能是 JVM、Haskell、Python、C/C++)
  2. 易于原型/重构
  3. 易于编程
  4. 性能卓越,无需过多关注我的优化(这可能不包括使用文件)
4

4 回答 4

5

在以各种语言编写并分布在各种平台上的程序之间进行通信的最简单方法之一是使用消息传递库。

ZeroMQ 是我最喜欢的一种,因为它简单、速度快,并且可以为大量语言提供绑定:http ://www.zeromq.org/bindings:_start

您还可以使用 ActiveMQ、RabbitMQ 或您遇到的任何其他具有多种语言绑定的东西。

于 2012-04-05T11:44:33.333 回答
2

我几乎所有的交流都是通过Redis进行的,在语言之间准确快速地移动数据非常简单。它是一个简单的密钥/存储数据库,允许我在 python 中执行此操作,并且

import redis
r = redis.Redis()
r.set("a", 33)

然后,java中几乎相同的代码(减去大量初始化,因为java很冗长)

r.get("a"); // in java
于 2012-04-05T11:45:09.763 回答
2

对消息传递 +1,尤其是当图书馆将在收件人不可用时推迟传递时。如果您决定使用消息传递,则需要定义消息传递协议。一个不错的选择是Representational State Transfer (ReST),尽管它的名字叫它,但它是一种基于 HTTP 的无状态、基于消息的交互协议。它需要非常仔细的 API 定义,这本身就是一件非常好的事情。

希望这会有所帮助。

于 2012-04-05T11:53:13.883 回答
2

有很多方法,但它们分为三个主要选项:

  1. 使用某种集中式通信节点(消息队列、键值存储、可能是数据库);
  2. 跨平台分布式对象技术(如 CORBA);
  3. HTTP 使用你喜欢的任何 web 服务方法(尽管大多数人没有被 Enterprise Borg 洗脑,比如各种 restful web 服务),直接在组件之间。

我会忽略 2(事实证明它从来没有那么容易)。

至于 1,请注意数据库通常不应用作虚假的消息传递平台。只有当它真的是关于存储数据集时才使用它。另请注意,http://redis.io是一个消息队列和键值存储。

于 2012-04-05T11:53:32.633 回答