Language agnostic 了解外文功能接口(FFI)和语言绑定
Language agnostic 了解外文功能接口(FFI)和语言绑定,language-agnostic,programming-languages,binding,ffi,Language Agnostic,Programming Languages,Binding,Ffi,长期以来,混合使用不同的编程语言一直是我不太理解的事情。根据,外部功能接口(或FFI)可以通过几种方式完成:
要求以特定方式指定或实现可由宿主语言调用的来宾语言函数;通常使用某种兼容库
使用工具自动“包装”带有适当粘合代码的来宾语言函数,执行任何必要的翻译
包装器库的使用
限制可跨语言使用的主机语言功能集。例如,从C调用的C++函数可能不包括(通常)引用参数或抛出异常。
我的问题:
两者之间的区别是什么
第一、第二和第三种方式?似乎
我想他们都是来编译代码的
这种语言被称为某种语言
具有对象文件
长期以来,混合使用不同的编程语言一直是我不太理解的事情。根据,外部功能接口(或FFI)可以通过几种方式完成:
要求以特定方式指定或实现可由宿主语言调用的来宾语言函数;通常使用某种兼容库
使用工具自动“包装”带有适当粘合代码的来宾语言函数,执行任何必要的翻译
包装器库的使用
限制可跨语言使用的主机语言功能集。例如,从C调用的C++函数可能不包括(通常)引用参数或抛出异常。
我的问题:
两者之间的区别是什么
第一、第二和第三种方式?似乎
我想他们都是来编译代码的
这种语言被称为某种语言
具有对象文件和标题的库
文件,然后由
呼叫语言
说,,
外国金融机构的实施可以通过以下方式完成:
有几种方法:
- 要求目标语言中的被调用函数实现
具体协议
- 实现采用给定低级语言的包装器库
函数,并用代码“包装”它,以便与
高级语言约定
- 要求声明为本机的函数使用高级功能的子集(与低级语言兼容)
我想知道第一条路是不是
链接的源与链接的源相同
维基百科的第一条路
第三种方式是什么
来源是什么?它是否对应于维基百科中的第四种方式
实际上,当比较它列出的三种方式时,它似乎是这样说的
填补两者之间差距的工作
这两种语言是逐渐发展起来的
从被调用的语言转移
对呼叫语言。我是
想知道怎么理解吗?维基百科中的四种方式也是如此吗李>
你和外国金融机构是谁
等价概念?他们怎么样
相关与不同
来自编程语言的绑定
对于库或操作系统服务来说,API
在公共场所提供这种服务
语言
我想知道在维基百科的引文中,或者在来源中,下面的每个例子都属于哪一种
C++调用C,由C++中的“C”外部声明
禁用名称损坏
在Matlab中调用C,即首先通过通用C将C代码编译到共享库中
编译器,如gcc,然后
从中加载、调用函数
以及卸载共享库
通过Matlab函数
loadlibrary()、calllib()和
unloadlibrary()
在Matlab中调用C
用C调用Matlab
在爪哇调用C++,在C++中调用和调用java,也用
在其他语言中调用C/C++时,使用
在Python中调用C
在Python中调用R
,例如Python、Fortran和Java
C库的绑定,例如来自各种语言的绑定,
如C++、Python、java、通用LISP
谢谢你的启发!致以最良好的祝愿!可能是一个有帮助的具体例子。让我们将宿主语言设为Python,将来宾语言设为C。这意味着Python将调用C函数
第一种选择是以特定的方式编写C库。在Python的情况下,标准的方法是使用第一个参数Py_Object*
以及其他条件编写C函数。例如():
是一个可从Python调用的C函数。为此,编写库时必须考虑Python兼容性
如果要使用现有的C库,则需要另一个选项。一种是使用一个工具,以适合宿主语言使用的格式生成并包装现有库。可以用来连接多种语言的Take。给定现有的C库,您可以使用swig有效地生成调用现有库的C代码,同时遵守Python约定。有关构建Python模块的详细信息,请参见
对我们来说,已经存在的C库的另一个选择是从Python库中调用它,该库在运行时有效地包装了调用,如。虽然在选项2中编译是必要的,但这次不是
另一件事是,从一种语言调用另一种语言的函数有很多选项(它们确实重叠)。有FFI(据我所知,相当于语言绑定),它通常指在同一进程中的多种语言之间进行调用(可以说是同一可执行文件的一部分),还有进程间通信手段(本地和网络)。CORBA和Web服务(SOAP或REST)以及COM+和远程过程调用通常属于第二类,不被视为FFI。事实上,他们大多没有规定在交流的任何一方使用任何特定的语言。我将把它们松散地放在IPC(进程间通信)选项中,尽管这在基于网络的APi(如CORBA和SOAP)的情况下是简化的
试一试你的清单,我大胆提出以下意见:
- 公共对象请求代理体系结构:IPC,而不是FFI
C++调用C,C++中的<代码>外部“C”<代码>声明,禁用名称的修改。李>
- 在Matlab中调用C,通过Matlab接口访问共享库选项3(类似ctypes)
- 在Matlab中调用C,通过创建C/C++语言MEX文件选项2(类似swig)
- 通过mcc编译器调用C中的Matlab选项2(类似swig)
- 在爪哇调用C++
static PyObject *
spam_system(PyObject *self, PyObject *args)
{
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
return NULL;
sts = system(command);
return Py_BuildValue("i", sts);
}