是否应该避免使用不支持特征的模块?



流行的线性代数库 Eigen 附带了一长串所谓的"不支持"模块,例如用于 FFT、数值微分或欧拉角的模块。

在 Eigen 文档中,明确指出:

这些模块是来自不同用户的贡献。它们按"原样"提供,没有任何支持。

遗憾的是,文档中没有关于可能停止使用不受支持的模块、对实现质量的要求、测试级别等的声明。

这给我留下了以下问题:

  • 如果我希望我的软件稳定几年(并且至少与未来的主要/次要特征版本兼容),我是否应该使用不受支持的特征模块。示例:特别是,我想避免从 Eigen 3.7.x 升级到 3.8.x 时我正在使用的不受支持的模块掉落的情况。
  • 关于不受支持的模块的稳定性和可用性,是否有任何经验或意见?

(只是为了完整起见:我正在考虑的特定不受支持的模块是欧拉角模块)。

一般来说,我建议尝试不受支持的模块,并提供有关其有用性、错误、API 更改建议等的反馈。这是当前不受支持的模块最终移动到标准模块的最可能方式。

如果 API 发生变化或模块变得稳定(理想情况下,这只需要更改#include),您需要准备好更改源代码的一部分——当然,如果您想与新旧 Eigen 版本兼容,这可能会更复杂。


我会说EulerAngles模块非常稳定并且经过充分测试,并且已经很好地集成到几何模块中 - 但它可能不会被大量使用(我们没有关于单个模块使用情况的统计数据)。

相比之下,Tensor模块(由@datell提到)被大量使用(例如,由TensorFlow),但在我看来还没有很好地集成到Eigen的其余部分(例如,文档主要是单个.md与当前的API不完全同步):http://eigen.tuxfamily.org/dox-devel/unsupported/eigen_tensors.html

注意:我是Eigen维护者之一。

遗憾的是,文档中没有关于可能停止使用不受支持的模块、对实现质量的要求、测试级别等的声明。

由于不受支持的模块是"按原样"提供的,因此它们的测试覆盖范围甚至质量可能大不相同。所有模块,无论是否受支持,都经过测试。但是,有些模块非常频繁地使用,而另一些模块可能不经常使用。这导致社区对不同的不受支持的模块有各种各样的体验。非常流行的模块可能会经过很好的测试,因为很有可能有人在使用时越过了一些极端情况。

是否有任何经验或意见 不受支持的模块的稳定性和可用性?

一个被广泛采用的模块的例子是不受支持的张量模块,它用于谷歌Tensorflow的核心部分。

但是,无法保证不受支持的模块的 ABI 或 API 稳定性。 例如,不受支持的模块可能会合并到受支持的部分中,这可能导致(至少)API 更改。

如果我想要我的 软件要稳定几年(至少要兼容) 与未来的主要/次要特征版本)。

很难回答这个有点宽泛的问题。如果你真的依赖稳定性多年,你也许应该避免不受支持的模块。但是,这绝不是一般建议,而是取决于您的特定需求和您计划使用的模块。

如果您计划使用不受支持的模块作为应用程序的关键部分,则可能应该关注更新(例如,检查 Eigen 的更改日志或监视拉取请求)。

最新更新