Limitations

原文: http://docs.cython.org/en/latest/src/userguide/limitations.html

此页面用于列出 Cython 中的错误,这些错误使得编译代码的语义与 Python 中的语义不同。大多数缺失的功能已在 Cython 0.15 中修复。未来的 Cython 版本计划提供完整的 Python 语言兼容性。目前,问题跟踪器可以提供我们知道并希望修复的偏差的概述。

https://github.com/cython/cython/labels/Python%20Semantics

以下是我们可能无法解决的差异列表。大多数这些事情更多地落入实现细节而不是语义,我们可能决定不修复(或需要一个-pedantic 标志来获取)。

嵌套元组参数解包

  1. def f((a,b), c):
  2. pass

这在 Python 3 中被删除了。

检查支持

虽然很有可能在 Cython 自己的函数类型中模拟函数的接口,并且最近的 Cython 版本在这里看到了一些改进,但“inspect”模块并没有将 Cython 实现的函数视为“函数”,因为它测试了对象类型显式而不是比较抽象接口或抽象基类。这对使用 inspect 来检查函数对象的代码有负面影响,但是需要对 Python 本身进行更改。

堆栈帧

目前,我们生成假追踪作为异常传播的一部分,但不填写本地并且无法填写 co_code。为了完全兼容,我们必须在函数调用时生成这些堆栈帧对象(具有潜在的性能损失)。我们可以选择启用此功能进行调试。

推断文字的身份与平等

  1. a = 1.0 # a inferred to be C type 'double'
  2. b = c = None # b and c inferred to be type 'object'
  3. if some_runtime_expression:
  4. b = a # creates a new Python float object
  5. c = a # creates a new Python float object
  6. print(b is c) # most likely not the same object