【问题标题】:Chicken for python: Extending python with the use of a shared libraryChicken for python:使用共享库扩展 python
【发布时间】:2013-11-07 23:47:20
【问题描述】:

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

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

干杯!

【问题讨论】:

  • 也许您可以使用wiki.call-cc.org/man/4/Extensions#find-header 来加载python 扩展的标准c/c++ 开发所需的Python.h 头文件?
  • 感谢您的建议!我向鸡肉用户邮件列表发送了一封电子邮件,指向该线程。让我们看看结果如何。

标签: python scheme shared-libraries extend chicken-scheme


【解决方案1】:

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

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

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

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

【讨论】:

  • 您好,感谢您详细说明与将 C 代码与 Python 链接相关的问题。我会为您的回答投赞成票,但我目前缺乏这样做的声誉。
  • 还有其他的解决方案比如cython,虽然这个不用scheme。
猜你喜欢
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多