一个项目中多种语言如何相互交互?

101

我听说有些人在同一个项目中使用多种编程语言。我无法想象这些语言是如何相互交互的。

我的意思是,Java没有像

myProgram.callCfunction(parameters);

从来没有发生过,或者我错了吗?

13个回答

2

有几种方法可以让不同语言的代码直接交互。只要在位和字节级别上传递的数据格式正确,那么不同语言之间就可以进行交互操作。这种方法是传统Windows DLL开发中使用的。即使在不同平台上,如果您能够正确设置格式(有兴趣的话,请查看大/小端),只要您的链接器(而不是编译器)知道如何将代码组合在一起,它就可以正常工作。

除此之外,还有许多其他方式可以让不同语言相互通信。在.Net世界中,代码被编译成IL代码,对于每种语言来说都是相同的,因此C#、VB.Net在内部都是相同的,并且可以无缝调用/处理彼此的代码。


2

除了上面列举的例子,将Python代码优化为C或C++也是相当常见的,或者编写一个C库来将另一个库绑定到Python。


0

进程间通信是更好的方法,如果你想要使用 Node.js 调用 Python 函数,可以参考这段代码。

index.js

让 { spawn } = require("child_process");

// 作为子进程生成Python文件
// 在Linux上将“py”替换为“python”
let PythonSpawn = spawn("py", [join(__dirname, "index.py"), "say_hello","MaDz"]);
PythonSpawn.stdout.on("data", (data) => {
console.log(data.toString());
});

module.py

def say_hello(name): print(f"你好 {name}")

index.py

import sys
from module import say_hello
if sys.argv[1] == "say_hello":
say_hello(sys.argv[2])

如果您运行index.js文件,它将使用py应用程序生成子进程,并将index.py文件路径作为argv传递以运行该文件。 index.py将检查argv,如果index 1中的argv是say_hello,则将使用模块中的say_hello函数,并将存在于argv [2]中的名称传递给该函数。最后,print函数将写入stdout,javascript文件正在侦听来自stdout的“data”事件,然后在获取数据后,index.js将使用console.log函数在终端中打印输出为“hello MaDz”。

在高级方式中,应用程序使用stdin和stdout,不依赖于argv,我不是Python专业人员,无法做到这一点。



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接