4个版本
0.1.3 | 2020年6月18日 |
---|---|
0.1.2 | 2020年4月20日 |
0.1.1 | 2020年4月19日 |
0.1.0 | 2020年4月19日 |
#28 in #sugar
每月165次下载
35KB
296 行
num_traits API,但使用前缀表示法
这是什么
如果您正在尝试使用Rust进行科学计算,并且无法适应数学函数(如sin()
或cos()
)作为后缀方法,这个crate可能适合您!
它提供了num traits的特质的自由函数版本,因此您可以轻松地进行如下操作:sin(x) + 3*ln(y)
。
每个特质的函数都作为自由函数的模块暴露,其名称为特质的snake_case版本,并且只需几条use语句即可在数学表达式中使用上述语法。
API覆盖范围
该crate通常选择尽可能覆盖num traits,但在以下情况下除外
- 该特质表示一个操作符,其标准表示法更接近后缀方法,而不是前缀函数,例如大多数二元操作符。因此,
AsPrimitive
、CheckedAdd
、CheckedDiv
、CheckedMul
、CheckedRem
、CheckedShl
、CheckedShr
、CheckedSub
、MulAdd
、MulAddAssign
、Saturating
、WrappingAdd
、WrappingMul
、WrappingShl
、WrappingShr
和WrappingSub
不被覆盖。 - num_trait crate已经提供了一套覆盖特质90%功能的自由函数,我们重新导出它们。因此,
One
、Signed
和Zero
不被覆盖。 - 将特定的特质或其方法暴露为自由函数需要非常重大的支持基础设施,并且其实际使用范围似乎不足以证明这种努力的合理性。更具体地说...
FloatConst::TAU()
需要为底层宏基础设施添加 Self 特性约束支持,而TAU
则可以视为一个数学专家玩笑,大多数普通人可能会将其拼写成2.0 * PI
。MulAdd
和MulAddAssign
需要为底层宏基础设施添加泛型特性支持,而是否将乘加操作符视为前缀或后缀操作符尚有争议。NumCast
需要添加泛型特性方法支持,但关于from::<T, _>(n)
是否比其替代的T::from(n)
更易于阅读还存在疑虑。- 基于
i128
的类型转换需要通过使用autocfg
包来扩展此包的条件编译设置,考虑到这种类型的晦涩难懂,这似乎有些过度。
如果您发现了一个既未由本包公开也未在上文列表中涵盖的 num 特性功能,这可能是我疏忽的结果,请通过 ping 我来告知。
我也愿意重新考虑上述政策中的任何一点,如果有人能够提出有力的反对意见。欢迎提出问题!
局限性
文档
每个方法的文档仅提供一行总结。请参考 num_traits
中相应特性方法的文档,以获取每个函数 API 合同的完整详细信息。
命名空间冲突
使用类似 num_traits
这样的基于特性方法的方法而不是本包中的自由函数的一个优点是,特性方法可以优雅地处理命名空间冲突。
使用此包,您将负责一次只 use
一个具有给定名称的函数。
值得一提的是,这就是为什么通常支持方法重载的前缀数值方法编程语言也支持方法重载。但是 Rust 不能拥有这种语言特性,因为这会破坏所有 Rustaceans 都习惯享受的先进类型推断...
许可证
此包根据 MPLv2 许可证分发。有关详细信息,请参阅 LICENSE 文件。
还可以协商更宽松的许可证(Apache、MIT、BSD...),以换取财务捐助。有关详细信息,请联系 knights_of_ni AT gmx DOTCOM。
依赖关系
~215KB