目标¶
该接口基于 LuaJIT's FFI,并遵循如下一些原则:
- 目标是在不学习第三种编程语言的情况下从Python调用C语言代码: 现有的替代方案要求用户学习特定领域语言 (Cython,SWIG) 或 API (ctypes)。 CFFI设计目的要求用户只知道C和Python,最大限度地减少需要学习API的额外部分。
- 将所有与Python相关的逻辑代码保存在Python中,这样您就不需要编写很多C语言代码 (不同于 CPython原生C扩展).
- 首选方法是在API (Application Programming Interface)级别运行 : C语言编译器根据您编写的声明直接链接C语言结构。 或者,也可以选择ABI级别(Application Binary Interface),这种方法通过 ctypes 运行。 但是,在非Windows平台上,C语言库通常具有指定的C API但不具有ABI (例如 他们可能将 "struct" 记录为至少包含这些字段,但可能更多)。
- 尽量完成。 目前不支持一些C99结构,但所有C89结构都应该支持,包括宏 (包括 "abuses",你可以 手动包装 在看起来很神奇的C语言函数)。
- 尝试同时支持PyPy和CPython,为IronPython和Jython等其他Python实现提供合理的路径。
- 注意,与 Weave 不同 的是,这个项目并不是要在Python中嵌入可执行C代码。 而是从Python调用现有的语言库。
- 没有支持 C++。 有时,围绕C++代码编写一个C包装器然后用CFFI调用这个C API是合理的。 否者,看看其他项目。 我会推荐 cppyy,它有一些相似之处 (并且还可以在CPython和PyPy上高效工作)。
开始阅读 概述.