我们可以使用哪些方法来互操作编程语言?

时间:2009-03-19 19:07:53

标签: programming-languages interop

我们如何将用语言编写的代码与用其他语言编写的代码集成?哪种技术更多/更少知道?我知道有些/大多数语言可以编译成Java字节码,但我们如何处理其余的呢?

8 个答案:

答案 0 :(得分:5)

你提到了“编译为Java”的方法,并且还有“使用.NET语言”方法,所以让我们看看其他案例。您可以通过多种方式进行互操作,这取决于您要完成的任务,这取决于具体情况。想到的事情是

  • Web服务(SOAP或REST)
  • 文件系统中的文本(或其他)文件
  • 使用数据库中继状态或其他数据
  • MSMQ或MQSeries等消息传递环境
  • TCP套接字或UDP消息
  • Mailslots和命名管道

答案 1 :(得分:3)

这取决于您想要的整合程度。

  • 您是否需要代码来共享数据?使用平台中立的数据格式,例如JSON,XML,Protocol Buffers,Thrift等。
  • 您是否需要能够使用一种语言编写代码来执行另一种语言的代码任务?使用Web服务或类似的进程间通信层。
  • 您是否需要能够在一个进程内调用代码?那时的答案完全取决于你所说的语言。

答案 2 :(得分:2)

直接调用:

  • 直接调用(如果编译器了解彼此的调用堆栈)
  • 远程程序调用(90年代初)
  • CORBA(90年代后期)
  • 远程方法调用(Java,在目标环境中使用RMI堆栈/库)
  • .Net Remoting

不太紧密的整合:

  • Web服务/ SOAP
  • REST

答案 3 :(得分:1)

我经常看到的两个是SWIGThrift。主要区别在于(IIRC)Thrift打开一个端口并将服务器放在那里以封送不同语言之间的数据,而SWIG构建库接口文件并使用它们来调用指定的方法。

答案 4 :(得分:1)

我认为不同语言的节目中有一些可能的关系 ......

共享运行时(例如C#和Visual Basic)并编译到同一个应用程序/进程中......

一个调用另一个(例如调用C程序的perl脚本)...

通过盒子上的IPC或通过网络(例如管道和网络服务)相互交谈......

答案 5 :(得分:1)

不幸的是,你的问题很模糊。

通常可以通过在可执行文件中嵌入VM或解释器,在同一进程中使用不同语言。如果你需要通过流程边界进行沟通,那么其他答案已经提到了其中许多可能性。

我建议您优化问题以获得更多有用的答案。

答案 6 :(得分:1)

在Web上,可以设置cookie以在ASP / PHP / JavaScript之间传递变量。在我之前的一个项目中,我们使用它来创建一个用于下载PDF的PHP文件,而不会从ASP应用程序中显示它们在文件系统上的位置。

答案 7 :(得分:1)

几乎所有假装某种系统开发用途的语言都能够通过标准OS接口或C函数接口与外部例程链接。这就是我倾向于使用的。