语言整合

Joh*_*aus 4 c++ architecture integration heterogeneous-services

我可能是这里的少数民族,但似乎在我的整个学术/职业生涯中,我学习了不同的语言.在此期间,语法和编程范例是重点,但我们从未教过使用不同语言编写系统的集成以及做出此决策的正确方法.

现在为了记录,我不是在讨论规范的Web堆栈或更新,更性感,JVM友好的语言.我想知道的是,如果有"已知资源",我可以了解像Java和C++这样的绑定语言背后的决策过程.

当然,我想到了XML,JSON和XMPP等工具.然后,我再次看到系统使用序列化绑定Java和C++.我不是在寻找一种一刀切的解决方案.我更感兴趣的是了解不同的解决方案以及我应该如何做出这样的决定.

如果这对于这个论坛来说太宽泛,我很抱歉,但至少我不是要求人们纠正或重写我的拙劣代码;)

Kev*_*son 7

我能想到四种不同的模型:

  • 在应用程序中嵌入动态语言,该应用程序主要使用更多"系统"语言编写,例如嵌入Java,C++或C#应用程序的Lua,Python或Javascript.这主要用于应用程序的脚本/自定义组件.这将通过以动态语言可以使用的格式公开一些主机应用程序数据类型来实现.

  • 为具有性能问题的语言编写本机(或C#或Java)扩展.Python和Ruby有很多这些扩展.这与上面的不同之处在于动态语言是框架.这是通过编写本机库(或其他本机库的包装器)来实现的,以符合客户端语言的调用约定.在系统代码中将汇编程序与C混合时,这也是相同的一般结构.

  • 在不同的地址空间中运行应用程序,并通过套接字或管道进行通信.在这种情况下,应用程序在同一台机器上运行只是巧合 - 它们也可以通过网络进行通信.

  • 使用共享相同平台和调用约定的多种语言开发应用程序.例如,Java和Scala可以自由混合.