4 个版本
0.2.0 | 2022年8月10日 |
---|---|
0.1.2 | 2022年8月10日 |
0.1.0 | 2019年11月17日 |
0.1.0-beta.5 |
|
0.1.0-beta.4 |
|
#13 in #write
36,498 每月下载量
用于 66 个 crates(53 个直接使用)
155KB
1.5K SLoC
μfmt
比
core::fmt
小(6-40倍),快(2-9倍)且无 panic 的替代方案
一个格式化某些结构的程序(使用 cargo-call-stack
生成)。源代码位于文件底部。程序使用 -C opt-level=z
编译。
API 文档
设计目标
从最高优先级到最低优先级
-
优化二进制大小和速度(而不是编译时间)
-
生成代码中无动态调度
-
优化时,生成代码中无 panic 分支
-
尽可能无递归
功能
-
Debug
和Display
类似特质 -
core::write!
类似宏 -
一个泛型
Formatter<'_, impl uWrite>
而不是单个core::Formatter
;uWrite
特质有一个关联的错误类型,因此每个写入器都可以选择其错误类型。例如,std::String
的实现使用Infallible
作为其错误类型。 -
core::fmt::Formatter::debug_struct
类似 API -
#[derive(uDebug)]
-
对
uDebug
的格式化(例如:`{ :? }`) -
整数原语(例如:`i32`)的十六进制格式化(例如:`{:x}`)
最低支持的 Rust 版本 (MSRV)
此 crate 没有最低支持的 Rust 版本,可能使用最新稳定 Rust 版本中可用的语言特性和标准库 API。
换句话说,这个crate对Rust版本要求的变化不被视为semver重大变更,可能会出现在补丁版本发布中。
许可证
所有源代码(包括代码片段)均受以下任一许可证的许可
-
Apache许可证2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
由您选择。
贡献
除非您明确表示,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献,将按上述方式许可,不附加任何额外条款或条件。
附录
格式化结构体(代码片段)
完整源代码在 nopanic/examples/struct.rs。
// ..
#[derive(Clone, Copy, uDebug)]
struct Pair {
x: i32,
y: i32,
}
static X: AtomicI32 = AtomicI32::new(0);
static Y: AtomicI32 = AtomicI32::new(0);
#[exception]
fn PendSV() {
let x = X.load(Ordering::Relaxed);
let y = Y.load(Ordering::Relaxed);
uwrite!(&mut W, "{:?}", Braces {}).unwrap();
uwrite!(&mut W, "{:#?}", Braces {}).unwrap();
uwrite!(&mut W, "{:?}", Parens()).unwrap();
uwrite!(&mut W, "{:#?}", Parens()).unwrap();
uwrite!(&mut W, "{:?}", I32(x)).unwrap();
uwrite!(&mut W, "{:#?}", I32(x)).unwrap();
uwrite!(&mut W, "{:?}", Tuple(x, y)).unwrap();
uwrite!(&mut W, "{:#?}", Tuple(x, y)).unwrap();
let pair = Pair { x, y };
uwrite!(&mut W, "{:?}", pair).unwrap();
uwrite!(&mut W, "{:#?}", pair).unwrap();
let first = pair;
let second = pair;
uwrite!(&mut W, "{:?}", Nested { first, second }).unwrap();
uwrite!(&mut W, "{:#?}", Nested { first, second }).unwrap();
}
// ..
依赖
~1.5MB
~35K SLoC