2个版本
使用旧的Rust 2015
0.1.3 | 2017年7月2日 |
---|---|
0.1.2 | 2017年6月3日 |
0.1.1 |
|
0.1.0 |
|
在#fmt中的排名:44
每月下载量:22
在 4 crates中使用
23KB
460 行
Fast fmt
比core::fmt
(即std::fmt
)更快、更灵活且更正确
注意
这是一个正在进行的项目。某些API可能会更改,某些可能缺乏文档,其他可能存在错误。此README中的信息(特别是基准测试)可能具有误导性。非常欢迎贡献!
我不保证在一段时间内会在此项目上投入很多工作!
为什么更快?
- 没有trait对象允许编译器进行更好的优化。
- 使用
size_hint
允许写入者预先分配足够大的缓冲区。 - 使用never类型处理来自
Write
的错误,允许优化掉错误检查。
为什么更灵活?
此包定义了单个Fmt<S>
,而不是多个如Display
、Debug
等trait,这允许您实现多种不同的策略,甚至您自己的。一个可能的用例是实现Fmt<Localizer>
以启用应用程序的本地化。
为什么更正确?
在失败的写入上,它不会返回Err(())
,而是返回适当的类型。它甚至可以是Void
来表示永远不会失败(例如,std::string::String
)的写入者。
实际上有多快?
此包提供了一个非常简单的基准测试
test bench::bench_core_fmt ... bench: 122 ns/iter (+/- 24)
test bench::bench_fast_fmt ... bench: 26 ns/iter (+/- 1)
它始终比四倍以上更快!
要改进什么?
大致按优先级排序。
- 文档
- 宏 - 理想情况下提供与
core
相同的体验。 - 更多策略
- 更多实现(特别是
Fmt
对原语的支持) - 与
core::fmt
的桥接 - 具有
T: Iterator<char> + Clone
的桥接? - 与
genio
集成并提供不同编码的编码器。 - 如果需要,支持 trait 对象
- 转换器(例如字符转义)
- 异步格式化可能吗?
- 针对
core
的 PR - 弃用
core::fmt
最后两个是玩笑。
依赖关系
~27KB