#fmt #display #formatting #performance

no-std fast_fmt

此包提供比core::fmt更快速、更灵活且更正确的替代方案

2个版本

使用旧的Rust 2015

0.1.3 2017年7月2日
0.1.2 2017年6月3日
0.1.1 2017年5月30日
0.1.0 2017年5月29日

#fmt中的排名:44

每月下载量:22
4 crates中使用

MITNFA许可证

23KB
460

Fast fmt

core::fmt(即std::fmt)更快、更灵活且更正确

注意

这是一个正在进行的项目。某些API可能会更改,某些可能缺乏文档,其他可能存在错误。此README中的信息(特别是基准测试)可能具有误导性。非常欢迎贡献!

我不保证在一段时间内会在此项目上投入很多工作!

为什么更快?

  • 没有trait对象允许编译器进行更好的优化。
  • 使用size_hint允许写入者预先分配足够大的缓冲区。
  • 使用never类型处理来自Write的错误,允许优化掉错误检查。

为什么更灵活?

此包定义了单个Fmt<S>,而不是多个如DisplayDebug等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