2

我已经读到可以通过编写一个共享库来扩展 Python ,Python 解释器可以将其作为导入语句的一部分加载。

谁能给我指出一个简单的例子或教程,通过使用Chicken Scheme而不是C/C++来完成这样的努力?据说鸡肉可以生产“便携且高效的 C”——因此它应该适合这样的任务,不是吗?

干杯!

4

1 回答 1

3

这是个有趣的问题。您的建议看起来是个好主意,但是我认为以前没有人尝试过并开始编写教程。有一个从小鸡方案调用 python 的接口,见pyffi,这看起来像一个围绕 python C 接口的包装器。Pyffi 不允许在问题中提出的另一个方向进行呼叫。

在 C 中为 python 创建一个模块涉及使用相当多的 python API 来操作 python 对象,因为 python 是动态类型的,所有基于 C 代码的参数都是类型PyObject,这适用于内置类型、用户定义类型和集合。然后,C API 提供了操作这些对象、执行算术、将它们添加到集合和从集合中添加等功能。此外,必须对所有pyObjects 进行手动引用计数,以确保可以在 python 中正确执行垃圾收集。可以在此处查看相关文档。

可以PyObject在 C 代码中将 a 转换为 C 类型,例如 int、double 等,如果函数很大,或者正在使用本机 C 集合,则可以更轻松地编写模块。然后必须将输出包装回PyObjects 以将数据返回给 python 代码。

在 chicken 中创建 python 模块可能比 C 容易得多,因为两者都是动态类型语言,无需显式操作PyObjects,还有创建高效 C 代码的额外好处。看起来 pyffi 在映射类型方面已经取得了一些进展,尽管需要进一步的工作才能允许它编写模块。

于 2013-11-08T21:59:16.703 回答