#string #function #parametric #evaluate #compute #parser #math

parametrizer

一个简单、安全的crate,用于将正确格式化的表示参数函数的数学字符串解析成Rust函数。

8 个版本 (稳定)

1.2.0 2021年5月18日
1.1.2 2021年5月8日
1.1.0 2021年4月28日
0.0.1 2021年4月21日

#1697 in Rust 模式

MIT/Apache

52KB
617

parametrizer

一个简单、安全的crate,用于将表示参数函数的正确格式化数学字符串解析成计算它们的Rust函数。从早期版本的Javascript移植而来。

示例用法

将crate包含在您的Cargo.toml文件中

parametrizer = "1.2.0"

然后简单创建一个Parametrizer结构体并调用evaluate方法

use parametrizer::Parametrizer;

let parametric_function = Parametrizer::new("1+2*t*t").unwrap();

assert_eq!(19.0, parametric_function.evaluate(3.0));

底层项是公开的,允许在代码中手动组合项以避免字符串解析的开销。请参阅文档以获取更多支持的语法示例。

性能

显然,参数化函数的性能永远无法与Rust代码的性能相匹配,特别是在考虑编译器执行的性能优化。参数化器crate的开销主要来自其递归性质。对于像多项式这样的简单函数,这可能导致相当明显的差异(Rust约为800皮秒,parametrizer约为18纳秒)。对于更复杂的函数,由于函数开销不太明显,性能差距会减小。(例如,涉及正弦的函数,Rust约为5.5纳秒,parametrizer约为23纳秒。)

(这些数字是从一台机器上的 cargo bench 获得的。您可以克隆仓库并运行包含的基准测试,以查看您的机器上的性能表现。)

贡献

请随时提出更多功能、错误修复或使代码更具惯用性的方法。谢谢!

依赖关系

~770KB
~14K SLoC