编程语言中C API的包装器

时间:2014-12-12 18:20:41

标签: python c cross-language

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

一个简单的例子是Python中的ctypes。所以使用它,我可以访问libc中的time函数。我理解这个级别。但是,我无法清楚地了解这种类型本身是如何实现的,以及其他类似的背后情况'东西!

这里出现的问题是:

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

1 个答案:

答案 0 :(得分:3)

  

因为它也应该编译外语。

没有。 ctypes等只需要能够链接到目标代码。这取决于目标外语在目标代码中具有适当的名称修改约定,C表示。

  

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

C代码需要为宿主语言公开适当的接口;或者等效地,使用一些C语言库来实现。 CPython是用C语言编写的,所以在这种情况下,这很容易说明。

  

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

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