1

我遇到了一些编程语言中的一个功能,可以调用其他编程语言中的方法。它被称为Foreign Function Interface. 例如,我可以在 Python 程序中调用 C 语言函数。或者我可以用 Python 语言为一些 C 库编写一个包装器,供其他 Python 用户使用。

一个简单的例子是ctypesPython 中的。所以使用它,我可以访问timelibc 中的函数。我理解到这个程度。但是,我无法清楚地了解这个 ctypes 本身是如何实现的以及其他“幕后”的东西!

我在这里提出的问题是:

  1. 这种语言的编译器需要什么样的功能才能使用外部函数接口。因为它也应该编译外语。
  2. 因此,如果宿主语言是面向对象的,而外语不是,那么我需要某种与对象之间的映射。这是如何处理的?
  3. 如果宿主语言在虚拟机上运行怎么办?在那种情况下,指令集会有所不同,对吧?
4

1 回答 1

3

因为它也应该编译外语。

没有。ctypes 之类的,只需要能够链接到目标代码即可。这取决于目标外语在目标代码中具有适当的名称修改约定,C 就是这样做的。

如果宿主语言是面向对象的,而外语不是,那么我需要某种与对象之间的映射。这是如何处理的?

C 代码需要为宿主语言公开适当的接口;或者等效地,使用一些 C 语言库来执行此操作。CPython 是用 C 语言编写的,所以在这种情况下,从广义上讲,这很容易。

如果宿主语言在虚拟机上运行怎么办?在那种情况下,指令集会有所不同,对吧?

VM 必须具有适当的工具来加载已编译的目标代码。

于 2014-12-12T18:26:13.413 回答