C API Deprecations¶
Background¶
NumPy为第三方扩展公开的API在多年的发行版中已经增长,并且允许程序员直接从C访问NumPy功能。该API最好被描述为“有机”。它已经从多个竞争的愿望和多年来的多个角度出现,强烈地影响了使用户容易移动到NumPy从Numeric和Numarray的愿望。核心API源于Numeric在1995年,有一些模式,如大量使用宏,写成模仿Python的C-API以及90年代后期的编译器技术。还有一小部分志愿者只有很少的时间花在改进这个API上。
目前正在努力改进API。在这一努力中,确保为NumPy 1.X编译的代码继续编译为NumPy 1.X是很重要的。同时,某些API将被标记为已弃用,这样未来的代码可以避免这些API并遵循更好的做法。
C API中的贬低标记所起的另一个重要作用是移向隐藏NumPy实现的内部细节。对于那些需要直接,容易,访问ndarrays的数据,这不会删除这个能力。相反,有许多潜在的性能优化,需要更改实现细节,NumPy开发人员已经无法尝试它们,因为保持ABI兼容性的高价值。通过废弃这种直接访问,我们将来将能够改善NumPy的性能,我们目前不能。
Deprecation Mechanism NPY_NO_DEPRECATED_API¶
在C中,没有相当于Python支持的弃用警告。执行弃用的一种方法是在文档和发行说明中标记它们,然后在将来的主要版本(NumPy 2.0及更高版本)中删除或更改已弃用的功能。MinPy的小版本不应该有主要的C-API更改,但是,防止在以前的次版本上工作的代码。例如,我们将尽力确保编译和工作在NumPy 1.4的代码应该继续工作在NumPy 1.7(但也许与编译器警告)。
要使用NPY_NO_DEPRECATED_API机制,您需要#define它到NumPy的目标API版本,然后才包括任何NumPy头。如果你想确认你的代码是干净的1.7,使用:
#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
在支持#warning机制的编译器上,如果您没有定义符号NPY_NO_DEPRECATED_API,NumPy会发出编译器警告。这样,对于可能没有仔细阅读发行说明的第三方开发者,将标记出有废弃的事实。