c++ - 语言整合

标签 c++ architecture integration heterogeneous-services

我可能是这里的少数,但似乎在我的整个学术/职业生涯中,我都被教授过不同的语言。在此期间,语法和编程范式是重点,但我们从未被教导如何集成使用不同语言编写的系统以及做出此决定的正确方法。

郑重声明,我不是在谈论规范的网络堆栈或更新、更性感、对 JVM 友好的语言。我想知道是否有“已知资源”可以让我了解绑定(bind)语言(例如 Java 和 C++)背后的决策过程。

当然,我会想到 XML、JSON 和 XMPP 等工具。再一次,我看到系统使用序列化绑定(bind) Java 和 C++。我不是在寻找一种一劳永逸的解决方案。我更有兴趣了解不同的解决方案以及我应该如何做出此类决定。

如果这对于这个论坛来说过于宽泛,我深表歉意,但至少我没有要求人们更正或重写我的拙劣代码;)

最佳答案

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

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

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

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

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

关于c++ - 语言整合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1258238/

相关文章:

Azure AD 刷新 token 过期

c++ - C++ 中的简明列表/vector

javascript - Angular 2——在不重新加载这些页面通用的组件的情况下浏览网页

architecture - 异步微服务架构中的同步通信

java - 全局并最终存储 SecurityManager 的检查是否可以接受

python - 在 python 中集成 OCaml - 如何从 python 中保持 ocaml session ?

c++ - 使用 Define 抛出异常

c++ - HTTP 内容长度非常大时崩溃

c++ - 是否可以在多个 gpus 上运行 cuda 内核

.net - Azure 逻辑应用程序 502 - "Bad Gateway"错误