📜  关于 Cython 编程语言的事实

📅  最后修改于: 2022-05-13 01:54:47.692000             🧑  作者: Mango

关于 Cython 编程语言的事实

Cython是一种编程语言。它可以在 Windows、macOS 和 Linux 操作系统上运行。它的版本范围从 2.6 到 3.8。 Cython 3.0.0 正在开发中。在 Cython 中,用Python编写的代码被转换为 C 语言。 Quora 等高流量网站使用 Cython 编程语言。

历史

Cython 实际上源自 Pyrex 语言。它比 Pyrex 语言更先进,具有更多的功能和优化。 Cython 在 2007 年从 Pyrex 开发中分离出来,因为它的开发人员设想了比 Pyrex 更广泛的语言范围。这是一个名为 Sage 的项目的一部分。 Cython 编程语言具有 .pyx 扩展名。 Python的科学用户经常使用 Cython 编程语言。它由Guido van Rossum创建,由Robert BradshawStefan Behnel开发。它最初于 2007 年 7 月 28 日发布。它于 2020 年 3 月 24 日稳定发布。

如何使用 Cython 编程语言

Cython 旨在成为Python编程语言的超集。它的设计使其具有类似 C 的性能以及主要用Python语言编写的代码,允许受 C 启发的额外语法。编译 Cython 时,它提供了 CPython 扩展模块。它在运行时提供的计算开销比Python少。 C 和 C++ 代码可以包装到 Cython 模块中。 Cython 依赖于Python解释器和标准库。 Cython 采用乐观优化、可选类型推断、低控制结构开销和低函数调用开销。它的性能取决于 C 代码的生成和实现。 Cython 编程语言很像Python ,差别很小。为了理解这一点,让我们以Python代码及其相关的 Cython 代码为例。
Python代码:

Python3
def f(x):
    return x**2-x
  
def integrate_f(a, b, N):
    s = 0
    dx = (b-a)/N
    for i in range(N):
        s += f(a+i*dx)
    return s * dx


Python3
cdef double f(double x):
    return x**2-x
def integrate_f(double a, double b, int N):
    cdef int i
    cdef double s, x, dx
    s = 0
    dx = (b-a)/N
    for i in range(N):
        s += f(a+i*dx)
    return s * dx


赛通代码:

Python3

cdef double f(double x):
    return x**2-x
def integrate_f(double a, double b, int N):
    cdef int i
    cdef double s, x, dx
    s = 0
    dx = (b-a)/N
    for i in range(N):
        s += f(a+i*dx)
    return s * dx

在这两个代码中,可以看出变化很小。只有变量已被显式声明,它会影响性能,从而提高其速度。

Cython 编程语言的优点

Cython 编程语言用于加快编写代码的速度。 Cython 语言允许轻松使用 C 库。 Cython 还支持 C++。 Cython 允许在没有Python的情况下与Python库轻松交互。 Cython 库具有与Python相同的垃圾收集。也可以使用 malloc/free 管理 C 级结构。 Cython 会自动检查 C 中出现的运行时问题。Cython 生成的 C 代码非常安全。如果在运行时不需要错误检查,甚至可以禁用它们。 Cython 还使用Python的全局解释器锁。它用于解决资源争用问题。 Cython 可用于需要额外保护免受诸如窥探之类的攻击的Python应用程序和软件模块。

Cython 的局限性

当 Cython 遇到Python代码时,它无法完全转换为 C 语言,这会导致对Python解释器的多次调用。这可能会带来一点加速(15-20%),或者在某些情况下没有影响或性能下降。当 Cython 代码仅用 C 语言编写时,它的性能最好。 Cython 提供了一个源代码报告,说明了它的哪些部分是用Python编写的,以避免性能瓶颈。

赛通麻木

Cython 有能力改进第三方数字处理库(如基于 C 的 NumPy)的使用。它使用 NumPy 通过将Python瓶颈问题排除在循环之外来解决它们。 Cython 提供对 Numpy 数组的快速访问。为 Numpy 编写的 Cython 中的语法类似于Python中使用的语法。为了更快地绑定 Cython 和 Numpy,需要 Cython 的自定义。这包括使用语句“cimport”。 Cython 编程语言使用此语句在程序编译时查看 C 级结构。