sebastienrousseau/cmn

GitHub: sebastienrousseau/cmn

一个提供 121 个数学、物理和密码学常量的 Rust 库,支持编译时常量、运行时查找、no_std 和 WASM,零运行时开销。

Stars: 5 | Forks: 0

Common (CMN) logo

Common (CMN)

121 个数学和物理常量 for Rust。零运行时开销。支持 no_std

Build Crates.io Docs.rs Coverage lib.rs

## CMN 是什么? CMN 为您提供准确、文档完善的数学和物理常量,作为 Rust 中的编译时 `const` 值。每个常量在编译时解析,零运行时分配。 **一行安装。零配置。295 个测试。100% 代码覆盖率。** ``` cargo add cmn ``` ## 为什么选择 CMN? | 需求 | 没有 CMN | 有 CMN | |:---|:---|:---| | PI, E, TAU | 从 `std::f64::consts` 或 Wikipedia 手工复制 | `use cmn::constants::PI;` | | 物理常量(阿伏加德罗、普朗克、玻尔兹曼) | 没有 stdlib 等价物;从 NIST 复制粘贴 | 预验证,来源于 CODATA 2018 | | 玻色子质量(W, Z, Higgs) | 手动查找 PDG 表格 | `W_BOSON_MASS_GEV`、`Z_BOSON_MASS_GEV`、`HIGGS_BOSON_MASS_GEV` | | 运行时类型化常量查找 | 构建自己的 HashMap | `constants.get_value("PI")` 返回 `ConstantValue::Float` | | 实用宏(min, max, 范围检查) | 编写样板代码或引入宏 crate | `cmn_max!(3, 7, 2)` — 完成 | | 无 chrono/time 的日期时间 | 引入重量级依赖 | `DateTime::parse("2026-04-05T14:30:00Z")` — 零依赖 | | 助记词生成的词表 | 找 dictionary crate 或嵌入自己的 | `Words::default()` — 精选、去重、排序 | ### CMN 与其他常量 crate 的对比 | | `cmn` | `physical_constants` | `natural_constants` | `std::f64::consts` | |:---|:---:|:---:|:---:|:---:| | **常量数量** | 121 | 354 | 370+ | 11 | | **运行时类型化查找** | `ConstantValue` 枚举 | — | — | — | | **类别过滤** | `Category` 枚举 | — | — | — | | **`no_std` 支持** | 是 | 否 | 否 | 是 | | **WASM 支持** | 是 | 未知 | 未知 | 是 | | **实用宏** | 15 个(7 个 no_std + 8 个 std) | — | — | — | | **日期时间模块** | 内置 | — | — | — | | **词表** | 内置 | — | — | — | | **许可证** | MIT / Apache-2.0 | GPL-3.0 | MIT | stdlib | | **测试覆盖率** | 100%(295 个测试) | 未知 | 未知 | N/A | | **文档** | 100% | 100% | 29% | stdlib | | **MSRV** | 1.72 | 未指定 | 未指定 | N/A | `physical_constants` 拥有最多的值,但是 **GPL-3.0** 许可证 — 与 MIT/Apache 项目不兼容。`natural_constants` 涵盖最多的学科,但文档只有 29%,且自 2022 年以来已过时。CMN 是唯一将常量、类型化运行时查找、类别过滤、`no_std`/WASM 支持、实用宏、日期时间模块和词表结合在一起的 crate,采用宽松许可证,测试覆盖率 100%。 ``` [dependencies] cmn = "0.0.6" ``` ## 安装 添加到 `Cargo.toml`: ``` cmn = { version = "0.0.6", default-features = false } ``` 需要 [Rust](https://rustup.rs/) 1.72 或更高版本。支持 macOS、Linux、Windows 和 WASM。 ``` use cmn::constants::{PI, TAU, EULER, SPEED_OF_LIGHT}; fn main() { println!("PI = {PI}"); println!("TAU = {TAU}"); println!("e = {EULER}"); println!("c = {SPEED_OF_LIGHT} m/s"); } ``` ## 快速开始 ### 常量(编译时) ``` use cmn::constants::{Constants, ConstantValue}; let constants = Constants::new(); if let Some(ConstantValue::Float(pi)) = constants.get_value("PI") { println!("PI = {pi}"); } ``` ### 常量(运行时查找) ``` use cmn::constants::{CONSTANTS_TABLE, Category}; let physical: Vec<_> = CONSTANTS_TABLE.iter() .filter(|(_, _, cat)| *cat == Category::Physical) .collect(); println!("{} physical constants", physical.len()); ``` ### 类别过滤(no_std) ``` // These work in no_std: use cmn::{cmn_max, cmn_min, cmn_in_range}; let max = cmn_max!(3, 7, 2); // 7 let min = cmn_min!(3, 7, 2); // 2 let ok = cmn_in_range!(5, 0, 10); // true ``` ### 宏(7 个 no_std + 8 个 std) ``` // These require the std feature (default): use cmn::{cmn_vec, cmn_map, cmn_join}; let v = cmn_vec!(1, 2, 3); let m = cmn_map!("a" => 1, "b" => 2); let s = cmn_join!("hello", " ", "world"); ``` ``` use cmn::Words; let words = Words::default(); println!("{} words loaded", words.count()); println!("First: {}", words.words_list()[0]); // "aboard" ``` ### 词表(std) ``` use cmn::datetime::DateTime; let dt = DateTime::parse("2026-04-05T14:30:00Z").unwrap(); let dt2 = DateTime::parse("2026-04-05T16:30:00Z").unwrap(); println!("{}", dt2.duration_since(&dt).whole_hours()); // 2 println!("{}", dt.relative_to(&dt2)); // "2 hours ago" let now = DateTime::now(); let tomorrow = now.add_days(1); ``` ### 日期时间(std) ``` graph LR subgraph "cmn crate" B["constants.rs
121 const values
Constants lookup API
Category filtering"] C["words.rs
Words HashSet
WORD_LIST dictionary"] D["macros.rs
15 utility macros
(7 no_std + 8 std)"] E["datetime.rs
ISO 8601 parsing
Duration & relative time"] A["lib.rs
Common struct
JSON serde bridge"] end A --> B A --> C A --> D A --> E U["Your Code"] --> B U --> C U --> D U --> E U --> A ``` ## 可用常量 ### 数学常量 — 核心(11 个) | 常量 | 符号 | 值 | |:---|:---|:---| | `PI` | pi | 3.14159265358979... | | `TAU` | tau = 2pi | 6.28318530717958... | | `EULER` | e | 2.71828182845904... | | `PHI` | phi = (1+sqrt5)/2 | 1.61803398874989... | | `GAMMA` | gamma(欧拉-马歇罗尼常数) | 0.57721566490153... | | `SQRT2`, `SQRT3`, `SQRT5` | 平方根 | 精确的 f64 值 | | `APERY` | zeta(3) | 1.20205690315959... | | `CATALAN` | C | 0.91596559417721... | | `KHINCHIN` | K | 2.68545200106530... | | `GLAISHER_KINKELIN` | A | 1.28242712910062... | | `SILVER_RATIO` | delta_s = 1+sqrt2 | 2.41421356237309... | ### 数学常量 — 对数与 Pi 分数(13 个) | 常量 | 符号 | 值 | |:---|:---|:---| | `LN_2`, `LN_10` | ln(2), ln(10) | 0.693..., 2.302... | | `LOG2_E`, `LOG10_E` | log2(e), log10(e) | 1.442..., 0.434... | | `FRAC_1_SQRT_2` | 1/sqrt(2) | 0.70710678... | | `FRAC_1_PI`, `FRAC_2_PI` | 1/pi, 2/pi | 0.318..., 0.636... | | `FRAC_2_SQRT_PI` | 2/sqrt(pi) | 1.12837916... | | `FRAC_PI_2` | pi/2(90 度) | 1.57079632... | | `FRAC_PI_3` | pi/3(60 度) | 1.04719755... | | `FRAC_PI_4` | pi/4(45 度) | 0.78539816... | | `FRAC_PI_6` | pi/6(30 度) | 0.52359877... | | `FRAC_PI_8` | pi/8(22.5 度) | 0.39269908... | ### 物理常量 — 基本(10 个) | 常量 | 符号 | 值 | 单位 | |:---|:---|:---|:---| | `SPEED_OF_LIGHT` | c | 299,792,458 | m/s | | `PLANCK` | h | 6.62607015e-34 | J s | | `PLANCK_REDUCED` | h-bar | h / 2pi | J s | | `ELEMENTARY_CHARGE` | e | 1.602176634e-19 | C | | `BOLTZMANN` | k_B | 1.380649e-23 | J/K | | `AVOGADRO` | N_A | 6.02214076e23 | 1/mol | | `GAS_CONSTANT` | R | 8.314462618 | J/(mol K) | | `FARADAY` | F | 96,485.33212 | C/mol | | `GRAVITATIONAL_CONSTANT` | G | 6.67430e-11 | m^3/(kg s^2) | | `FINE_STRUCTURE` | alpha | 7.2973525693e-3 | 无量纲 | ### 物理常量 — 电磁与真空(9 个) 常量 | 符号 | 值 | 单位 | |:---|:---|:---|:---| | `COULOMB` | k_e | 8.9875517923e9 | N m^2/C^2 | | `VACUUM_PERMEABILITY` | mu_0 | 1.25663706212e-6 | N/A^2 | | `VACUUM_PERMITTIVITY` | eps_0 | 8.8541878128e-12 | F/m | | `MAGNETIC_FLUX_QUANTUM` | Phi_0 | 2.067833848e-15 | Wb | | `CONDUCTANCE_QUANTUM` | G_0 | 7.748091729e-5 | S | | `IMPEDANCE_OF_FREE_SPACE` | Z_0 | 376.730313668 | Ohm | | `INVERSE_FINE_STRUCTURE` | 1/alpha | 137.035999084 | 无量纲 | | `JOSEPHSON_CONSTANT` | K_J | 4.835978484e14 | Hz/V | | `VON_KLITZING_CONSTANT` | R_K | 25,812.80745 | Ohm | ### 物理常量 — 粒子质量(10 个) | 常量 | 符号 | 值 | 单位 | |:---|:---|:---|:---| | `ELECTRON_MASS` | m_e | 9.1093837015e-31 | kg | | `PROTON_MASS` | m_p | 1.67262192369e-27 | kg | | `NEUTRON_MASS` | m_n | 1.67492749804e-27 | kg | | `MUON_MASS` | m_mu | 1.883531627e-28 | kg | | `TAU_PARTICLE_MASS` | m_tau | 3.16754e-27 | kg | | `DEUTERON_MASS` | m_d | 3.3435837724e-27 | kg | | `TRITON_MASS` | m_t | 5.0073567446e-27 | kg | | `HELION_MASS` | m_h | 5.0064127796e-27 | kg | | `ALPHA_PARTICLE_MASS` | m_alpha | 6.6446573357e-27 | kg | | `ATOMIC_MASS_UNIT` | u | 1.66053906660e-27 | kg | ### 物理常量 — MeV/c² 质量与玻色子质量(7 个) | 常量 | 值 | 来源 | |:---|:---|:---| | `ELECTRON_MASS_MEV` | 0.51099895 MeV | CODATA 2018 | | `PROTON_MASS_MEV` | 938.272 MeV | CODATA 2018 | | `NEUTRON_MASS_MEV` | 939.565 MeV | CODATA 2018 | | `MUON_MASS_MEV` | 105.658 MeV | CODATA 2018 | | `W_BOSON_MASS_GEV` | 80.377 GeV | PDG 2022 | | `Z_BOSON_MASS_GEV` | 91.1876 GeV | PDG 2022 | | `HIGGS_BOSON_MASS_GEV` | 125.25 GeV | PDG 2022 | ### 物理常量 — 质量比(5 个) | 常量 | 值 | |:---|:---| | `ELECTRON_PROTON_MASS_RATIO` | 5.44617021487e-4 | | `PROTON_ELECTRON_MASS_RATIO` | 1,836.15267343 | | `MUON_ELECTRON_MASS_RATIO` | 206.7682830 | | `NEUTRON_PROTON_MASS_RATIO` | 1.00137841931 | | `DEUTERON_PROTON_MASS_RATIO` | 1.99900750139 | ### 物理常量 — 磁矩与 g 因子(7 个) | 常量 | 符号 | 值 | 单位 | |:---|:---|:---|:---| | `BOHR_MAGNETON` | mu_B | 9.2740100783e-24 | J/T | | `NUCLEAR_MAGNETON` | mu_N | 5.0507837461e-27 | J/T | | `ELECTRON_MAGNETIC_MOMENT` | mu_e | -9.2847647043e-24 | J/T | | `PROTON_MAGNETIC_MOMENT` | mu_p | 1.41060679736e-26 | J/T | | `NEUTRON_MAGNETIC_MOMENT` | mu_n | -9.6623651e-27 | J/T | | `ELECTRON_G_FACTOR` | g_e | -2.00231930436256 | | | `PROTON_G_FACTOR` | g_p | 5.5856946893 | | ### 物理常量 — eV 当量(6 个) | 常量 | 值 | 单位 | |:---|:---|:---| | `ELECTRON_VOLT` | 1.602176634e-19 | J | | `EV_TO_KG` | 1.782661921e-36 | kg | | `EV_TO_AMU` | 1.07354410233e-9 | u | | `EV_TO_HZ` | 2.417989242e14 | Hz | | `EV_TO_KELVIN` | 1.160451812e4 | K | | `EV_TO_INVERSE_METER` | 8.065543937e5 | 1/m | ### 物理常量 — 原子与核(13 个) | 常量 | 符号 | 值 | 单位 | |:---|:---|:---|:---| | `BOHR_RADIUS` | a_0 | 5.29177210903e-11 | m | | `CLASSICAL_ELECTRON_RADIUS` | r_e | 2.8179403262e-15 | m | | `ELECTRON_COMPTON_WAVELENGTH` | lambda_C | 2.42631023867e-12 | m | | `PROTON_COMPTON_WAVELENGTH` | lambda_C,p | 1.32140985539e-15 | m | | `NEUTRON_COMPTON_WAVELENGTH` | lambda_C,n | 1.31959090581e-15 | m | | `ELECTRON_REDUCED_COMPTON` | lambda-bar_e | 3.8615926796e-13 | m | | `PROTON_REDUCED_COMPTON` | lambda-bar_p | 2.10308910336e-16 | m | | `NEUTRON_REDUCED_COMPTON` | lambda-bar_n | 2.10019415600e-16 | m | | `THOMSON_CROSS_SECTION` | sigma_T | 6.6524587321e-29 | m^2 | | `RYDBERG` | R_inf | 10,973,731.568160 | 1/m | | `HARTREE_ENERGY` | E_h | 4.3597447222071e-18 | J | | `HARTREE_ENERGY_EV` | E_h | 27.211386245988 | eV | | `FIRST_RADIATION_CONSTANT` | c_1 | 3.741771852e-16 | W m^2 | ### 物理常量 — 热力学与摩尔(8 个) | 常量 | 符号 | 值 | 单位 | |:---|:---|:---|:---| | `STEFAN_BOLTZMANN` | sigma | 5.670374419e-8 | W/(m^2 K^4) | | `WIEN_DISPLACEMENT` | b | 2.897771955e-3 | m K | | `SECOND_RADIATION_CONSTANT` | c_2 | 1.438776877e-2 | m K | | `STANDARD_GRAVITY` | g | 9.80665 | m/s^2 | | `STANDARD_ATMOSPHERE` | atm | 101,325 | Pa | | `GAS_CONSTANT_L_ATM` | R |0.08205736608 | L atm/(mol K) | | `MOLAR_MASS_CONSTANT` | M_u | 0.99999999965e-3 | kg/mol | | `MOLAR_VOLUME_IDEAL_GAS` | V_m | 22.71095e-3 | m^3/mol | ### 物理常量 — 普朗克单位(5 个) | 常量 | 符号 | 值 | 单位 | |:---|:---|:---|:---| | `PLANCK_MASS` | m_P | 2.176434e-8 | kg | | `PLANCK_LENGTH` | l_P | 1.616255e-35 | m | | `PLANCK_TIME` | t_P | 5.391247e-44 | s | | `PLANCK_TEMPERATURE` | T_P | 1.416784e32 | K | | `PLANCK_CHARGE` | q_P | 1.875546e-18 | C | ### 物理常量 — 荷质比与原子单位(10 个) | 常量 | 值 | 单位 | |:---|:---|:---| | `ELECTRON_CHARGE_TO_MASS` | -1.75882001076e11 | C/kg | | `PROTON_CHARGE_TO_MASS` | 9.5788332e7 | C/kg | | `ATOMIC_UNIT_OF_LENGTH` | 5.29177210903e-11 | m | | `ATOMIC_UNIT_OF_TIME` | 2.4188843265857e-17 | s | | `ATOMIC_UNIT_OF_VELOCITY` | 2.18769126364e6 | m/s | | `ATOMIC_UNIT_OF_FORCE` | 8.2387234983e-8 | N | | `ATOMIC_UNIT_OF_ELECTRIC_FIELD` | 5.14220674763e11 | V/m | | `ATOMIC_UNIT_OF_POLARIZABILITY` | 1.64877727436e-41 | C^2 m^2/J | | `LOSCHMIDT_CONSTANT` | 2.6867774e25 | 1/m^3 | | `MOLAR_PLANCK_CONSTANT` | 3.990312712e-10 | J s/mol | ### 密码学与实用常量(4 个) | 常量 | 类型 | 值 | |:---|:---|:---| | `HASH_ALGORITHM` | `&str` | `"Blake3"` | | `HASH_COST` | `u32` | `8` | | `HASH_LENGTH` | `usize` | `32` | | `SPECIAL_CHARS` | `&[char]` | 29 个符号 | 完整 API 参考:[docs.rs/cmn](https://docs.rs/cmn) ## 架构 ``` cmn = { version = "0.0.6", default-features = false } ``` | 模块 | 功能 | 何时使用 | |:---|:---|:---| | [`constants`](https://docs.rs/cmn/latest/cmn/constants/) | 121 个编译时 `const` 值 + `Constants` 运行时 API + `ConstantValue` 枚举 + `Category` 过滤 | 您需要数学或物理常量 | | [`words`](https://docs.rs/cmn/latest/cmn/words/) | 由 `HashSet` 支持的 `Words` 结构体,包含 add/remove/contains + `WORD_LIST` | 助记词生成、文字游戏、文本处理 | | [`macros`](https://docs.rs/cmn/latest/cmn/macros/) | 15 个宏:7 个 `no_std`(`cmn_max!`、`cmn_min!`、`cmn_in_range!`、`cmn_assert!`、`cmn_contains!`、`cmn_to_num!`、`cmn_constants!`)+ 8 个 `std`(`cmn_vec!`、`cmn_map!`、`cmn_join!`、`cmn_split!`、`cmn_print!`、`cmn_print_vec!`、`cmn!`、`cmn_parse!`) | 无需编写样板代码的快速实用工具 | | [`datetime`](https://docs.rs/cmn/latest/cmn/datetime/) | ISO 8601 解析、`now()`、算术运算、持续时间、相对格式化、时区偏移 | 时间戳、"3 小时前"、持续时间计算 — 无需外部 crate | | [`Common`](https://docs.rs/cmn/latest/cmn/struct.Common.html) | 通过 `serde` 连接常量和词表的 JSON 支持桥接 | 反序列化包含常量或词表的配置 | ## 功能标志 | 功能 | 默认 | 启用 | |:---|:---:|:---| | `std` | 是 | `Constants` 结构体、`ConstantValue`、`Words`、`Common`、datetime、serde、8 个 std 宏 | 没有 `std`:所有 121 个 `const` 值、带 `Category` 的 `CONSTANTS_TABLE`,以及 7 个 `no_std` 宏 — 零依赖。 ``` git clone https://github.com/sebastienrousseau/cmn.git cd cmn cargo build # Compile cargo test # 295 tests, 100% coverage cargo clippy # Zero warnings cargo fmt --check # Verify formatting cargo doc --open # Browse API docs locally ``` ## 常见问题 **常量的精度如何?** 数学常量使用 `core::f64::consts`(PI、E、TAU、SQRT2 等)。物理常量来源于 CODATA 2018 推荐值。玻色子质量来自 PDG 2022。所有值都通过 295 个测试验证,包括数学恒等式检查(例如 `SQRT2^2 == 2`、`R == k_B * N_A`、`Phi_0 == h/(2e)`)。 **CMN 支持 `no_std` 吗?** 是的。禁用默认功能即可获得所有 121 个 `const` 值、带 `Category` 过滤的 `CONSTANTS_TABLE`,以及 7 个宏,零依赖: ``` cargo run --example cmn cargo run --example constants_math cargo run --example constants_physical cargo run --example constants_lookup cargo run --example datetime_demo cargo run --example words_demo cargo run --example macros_demo ``` `Constants` 运行时 API、`Words`、`Common`、`datetime` 和 8 个 std 宏需要 `std` 功能(默认启用)。 **CMN 能编译为 WASM 吗?** 是的。`cargo build --target wasm32-unknown-unknown --no-default-features` 可以干净编译。 **MSRV 是什么?** Rust **1.72**。在 stable 版本上测试。不需要 nightly 功能。 **CMN 与其他 Rust 常量 crate 相比如何?** `physical_constants` 有 354 个值,但是 **GPL-3.0** 许可证 — 与 MIT/Apache 项目不兼容。`natural_constants` 涵盖更多学科,但文档只有 29%,且自 2022 年以来未维护。`std::f64::consts` 提供 11 个数学常量,没有物理值。CMN 是唯一将 121 个常量与类型化运行时查找、类别过滤、`no_std`/WASM 支持、15 个实用宏、日期时间模块和词表结合在一起的 crate,采用宽松许可证,测试覆盖率 100%。请参阅上面的[对比表](。 ``` cargo bench ``` ## 开发 ### 前置条件 | 平台 | 安装 Rust | |:---|:---| | **macOS** | `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \| sh` | | **Linux / WSL** | 同上,加上 `sudo apt-get install -y build-essential` | | **Windows** | 下载 [rustup-init.exe](https://rustup.rs/) 并安装 MSVC 工具链 | ### 构建、测试、验证 ### 运行示例 ### 运行基准测试 ### 故障排除 | 症状 | 修复 | |:---|:---| | `rustup: command not found` | 通过 [rustup.rs](https://rustup.rs/) 安装 Rust | | `error[E0658]: unstable library feature` | `rustup update stable`(MSRV 是 1.72) | | `linker 'cc' not found`(Linux/WSL) | `sudo apt-get install -y build-essential` | | 新克隆时 `cargo test` 失败 | 打开一个 [issue](https://github.com/sebastienrousseau/cmn/issues),包含 `rustc --version` | ## 许可证 根据您的选择,采用 [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0) 或 [MIT](https://opensource.org/licenses/MIT) 双许可证。 由 [Sebastien Rousseau](https://sebastienrousseau.com) 构建。
标签:CODATA, const, datetime, HashMap, no_std, Rust, Rust库, Rust生态, WASM, 可视化界面, 宏, 密码学常数, 嵌入式, 工具库, 常数查询, 常量库, 数学常数, 物理常数, 类型安全, 编译时计算, 网络流量审计, 运行时查找, 通知系统, 零运行时成本