4个版本 (2个破坏性更新)
使用旧的Rust 2015
0.4.1 | 2017年10月31日 |
---|---|
0.4.0 | 2017年10月28日 |
0.3.0 | 2017年10月8日 |
0.2.0 | 2017年10月5日 |
#2199 in 编码
每月23次下载
20KB
248 行
Base💯
将事物编码成Emoji。
Base💯可以用一个唯一的emoji符号表示任何字节,因此它可以表示带有零可打印开销的二进制数据(有关更多信息,请参阅注意事项)。
用法
$ echo "the quick brown fox jumped over the lazy dog" | base100
👫👟👜🐗👨👬👠👚👢🐗👙👩👦👮👥🐗👝👦👯🐗👡👬👤👧👜👛🐗👦👭👜👩🐗👫👟👜🐗👣👘👱👰🐗👛👦👞🐁
Base💯将从stdin读取,除非指定了文件,否则将UTF-8写入stdout,并且具有与GNU base64相似的API。默认情况下将数据进行编码,除非指定了--decode
;--encode
标志没有任何作用,仅为了方便那些不想阅读文档(像我一样)的人。
USAGE:
base100 [FLAGS] [input]
FLAGS:
-d, --decode Tells base💯 to decode this data
-e, --encode Tells base💯 to encode this data
-h, --help Prints help information
-V, --version Prints version information
ARGS:
<input> The input file to use
安装
要安装base💯,请使用cargo
$ cargo install base100
base💯还有一个AVX加速实现,性能提高高达4倍。如果您有强大的CPU和nightly rust,请按以下方式安装
$ RUSTFLAGS="-C target-cpu=native" cargo install base100 --features simd
性能
base💯的性能与其他编码算法相媲美。
标量性能
$ base100 --version
base💯 0.4.1
$ base64 --version
base64 (GNU coreutils) 8.28
$ cat /dev/urandom | pv | base100 > /dev/null
[ 247MiB/s]
$ cat /dev/urandom | pv | base64 > /dev/null
[ 232MiB/s]
$ cat /dev/urandom | pv | base100 | base100 -d > /dev/null
[ 233MiB/s]
$ cat /dev/urandom | pv | base64 | base64 -d > /dev/null
[ 176MiB/s]
在两种情况下,base💯与GNU base64相比都更有优势。
SIMD性能
在支持AVX2的机器上,base💯通过一些手工调优的x86-64汇编获得了4倍的性能提升。将很快支持SSE2,如果一些兼容的硬件进入我的手中,我将愉快地支持AVX-512。
要获得此加速:您必须使用
- AVX2兼容的处理器(比Broadwell或Zen新)
- nightly Rust
要构建SIMD加速版本,只需进入您的项目目录并输入
$ RUSTFLAGS="-C target-cpu=native" cargo +nightly build --release --features simd
请注意,下面的基准测试是在一个比上述基准测试明显更弱的机器上进行的,不能直接比较。
$ base100 --version
base💯 0.4.1
$ base64 --version
base64 (GNU coreutils) 8.28
$ cat /dev/zero | pv | ./base100 > /dev/null
[1.14GiB/s]
$ cat /dev/zero | pv | base64 > /dev/null
[ 479MiB/s]
$ cat /dev/zero | pv | ./base100 | ./base100 -d > /dev/null
[ 412MiB/s]
$ cat /dev/zero | pv | base64 | base64 -d > /dev/null
[ 110MiB/s]
在这种情况下,base💯与GNU base64相比具有很大的优势。
注意事项
Base💯非常不节省空间。它将数据大小膨胀约3倍,仅在您必须尽可能少地使用可打印字符显示编码的二进制数据时才应使用。然而,它非常适合人机交互。编码的散列和校验和变得非常容易验证,并且在终端上占用空间更少。
未来计划
- 允许使用完整的1024个元素的emoji集进行编码
- 添加更多优化并确保尽可能多地使用SIMD
- 添加多处理器支持
依赖项
~1MB
~11K SLoC