是否应避免使用本征不受支持的模块?

时间:2019-05-26 06:37:42

标签: c++ eigen eigen3 stability

流行的线性代数库Eigen带有一长串所谓的"unsupported" modules,例如FFT,数值微分或欧拉角的模块。

在Eigen文档中明确说明:

  

这些模块是各种用户的贡献。它们按“原样”提供,没有任何支持。

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

这给我留下了以下问题:

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

(出于完整性考虑:我正在考虑的特定不受支持的模块是EulerAngles模块)。

2 个答案:

答案 0 :(得分:1)

  

不幸的是,文档中没有关于不支持的模块的潜在停产,实现质量的要求,测试级别等等的声明。

由于“按原样”提供了不受支持的模块,因此它们的测试范围甚至质量可能都存在很大差异。所有模块(不受支持或不受支持)均为tested。但是,有些模块经常使用,而有些模块则可能不常用。这会导致社区使用不同的不受支持的模块获得各种体验。非常受欢迎的模块很可能已经过很好的测试,因为使用它的可能性很大。

  

是否有关于   不支持的模块的稳定性和可用性?

广泛使用的模块的一个示例是不受支持的Tensor module,该模块用于Google Tensorflow的核心部分。

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

  

如果我需要我完全可以使用Eigen不支持的模块   该软件可以稳定几年(并且至少要兼容)   以及未来的主要/次要Eigen版本)。

很难回答这个比较宽泛的问题。如果您多年来确实依赖稳定性,则应该避免使用不受支持的模块。但是,这绝不是一般性建议,取决于您的特定需求和计划使用的模块。

如果您打算使用不受支持的模块作为应用程序的关键部分,则可能应注意更新(例如,检查Eigen的changelog或观看pull requests)。

答案 1 :(得分:1)

通常,我建议尝试不支持的模块并提供有关其有用性,错误,有关API更改的建议等方面的反馈。这是当前不支持的模块最终被迁移的最有可能的方式到标准模块。

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


我想说EulerAngles模块非常稳定并且经过了良好的测试,已经很好地集成到Geometry模块中了-但是它可能很少使用(我们没有关于各个模块使用情况的统计信息)。

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

N.B .:我是Eigen的维护者之一。