流行的线性代数库Eigen带有一长串所谓的"unsupported" modules,例如FFT,数值微分或欧拉角的模块。
在Eigen文档中明确说明:
这些模块是各种用户的贡献。它们按“原样”提供,没有任何支持。
不幸的是,文档中没有关于不受支持的模块可能的停产,对实现质量的要求,测试级别等等的声明。
这给我留下了以下问题:
(出于完整性考虑:我正在考虑的特定不受支持的模块是EulerAngles模块)。
答案 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的维护者之一。