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