制作使用不同语言编程的(桌面)软件?

2024-04-27 07:56:56 发布

您现在位置:Python中文网/ 问答频道 /正文

桌面软件的不同组件可以用不同的语言编程吗?例如,一个叫做多道程序的软件由Comp1、Comp2、Comp3等组成。 除了1,2,3外,所有组件都是java语言,1是C语言,2是Python语言,3是Scala语言等等。有没有可能做到这一点?什么时候需要这样做?在

这在软件行业很常见吗?当组件用不同的语言编写时,我们如何使它们进行通信?在


Tags: 语言软件编程组件java桌面行业scala
3条回答

这当然不稀奇。在

python标准库的许多部分都是用C编写的,许多流行的第三方库(如numpy)也有部分是用C编写的,您可以用cype创建到自己的C库的绑定。Python默认GUI库Tkinter的一部分是用Tcl/Tk编写的。在

Java具有Java本机接口(JNI),可用于集成针对物理机而不是Java虚拟机的模块。Scala可以使用为JVM编写的库(显然包括用Java编写的库),它也可以使用JNI。在

大多数大型软件都是用多种语言编写的。通常使用两种语言,一种是用于性能关键部分的快速编译语言(通常是C或C++),另一种是脚本语言(例如Python、Lisp、Lua)来编写复杂但性能不重要的部件。在

任何语言都有两个可以交互的要求。一个是它们必须能够以相互理解的格式共享内存中的数据,第二个是它们必须能够使用共同的“调用约定”调用彼此的函数。本机接口库解决了这些问题。在

当然可以做到。通常,您将使用某种粘合层(例如管道、套接字、文件监视、共享内存、protocol buffers)来允许不同的进程相互通信/调用。在

有两种方法可以做到。在

第一种方法是将不同的片段(用不同的语言)编译成目标文件并将它们链接起来。这只适用于某些语言,而不适用于其他语言,这取决于合适工具的可用性。例如,如果一种语言执行垃圾收集,就不能指望其他语言突然支持它。在

另一种方法是将应用程序构建为通信/协作的独立进程。这避免了链接问题,但意味着您有单独的进程(可能“不太干净”)和序列化/反序列化等

注意:还有第三种方法,就是在应用程序中构建一个解释器或其他东西来运行脚本。我不确定这是否算数(这取决于您是将脚本视为应用程序代码的一部分还是应用程序在运行时使用的数据的一部分)。在

通常情况下,没有人会无缘无故地混合语言,因为这对程序员来说是件麻烦事。大多数程序员懂很多种语言,但只是少数几个方面的专家,使用的语言越多,一个或多个程序员就越有可能无法理解应用程序的一个或多个源代码。在

相关问题 更多 >