Cython - 概述¶
[Cython] 是一种编程语言,它使为 Python 语言编写 C 扩展变得像 Python 本身一样容易。它旨在成为 [Python] 语言的超集,赋予其高级、面向对象、函数式和动态编程特性。它最主要的特性是在这些特性之上支持作为语言一部分的可选静态类型声明。源代码被转换为优化的 C/C++ 代码并编译为 Python 扩展模块。这使得程序执行速度非常快,并且可以与外部 C 库紧密集成,同时保持 Python 语言以其著称的高程序员生产力。
主要的 Python 执行环境通常被称为 CPython,因为它是用 C 编写的。其他主要实现使用 Java (Jython [Jython])、C# (IronPython [IronPython]) 和 Python 本身 (PyPy [PyPy])。CPython 用 C 编写,有利于包装许多通过 C 语言进行接口的外部库。然而,编写必要的粘合代码在 C 中仍然不是一件容易的事,特别是对于那些更熟悉 Python 等高级语言而不是 C 等底层语言的程序员来说。
Cython 项目最初基于著名的 Pyrex [Pyrex],通过源代码编译器来解决这个问题,该编译器将 Python 代码转换为等效的 C 代码。此代码在 CPython 运行时环境中执行,但速度与编译后的 C 相当,并且能够直接调用 C 库。同时,它保留了 Python 源代码的原始接口,使其可以直接从 Python 代码中使用。这两种特性使 Cython 能够实现两种主要用例:使用快速二进制模块扩展 CPython 解释器,以及将 Python 代码与外部 C 库进行接口。
虽然 Cython 可以编译(大多数)常规 Python 代码,但生成的 C 代码通常会从 Python 和 C 类型可选的静态类型声明中获得重大(有时令人印象深刻)的速度提升。这些允许 Cython 为代码的某些部分分配 C 语义,并将它们转换为非常高效的 C 代码。因此,类型声明可以用于两种目的:将代码部分从动态 Python 语义移动到静态和快速的 C 语义,以及直接操作外部库中定义的类型。因此,Cython 将这两个世界合并成一种非常广泛适用的编程语言。
G. Ewing, R. W. Bradshaw, S. Behnel, D. S. Seljebotn 等人,Cython 编译器,https://cython.pythonlang.cn/.
Jim Hugunin 等人,https://archive.codeplex.com/?p=IronPython.
J. Huginin, B. Warsaw, F. Bock 等人,Jython:适用于 Java 平台的 Python,https://www.jython.cn.
PyPy 小组,PyPy:用 Python 编写的 Python 实现,https://pypy.pythonlang.cn/.
G. Ewing,Pyrex:Python 的 C 扩展,https://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/
G. van Rossum 等人,Python 编程语言,https://www.pythonlang.cn/.