Clap
用Rust构建CLI工具是天作之合—看看ripgrep和Rust自己的Cargo。超快的启动时间,较小的二进制大小,类型安全的代码,运行时安全的二进制,交叉编译到可能想要的几乎所有架构。
要开始构建CLI工具,clap是一个非常棒的CLI库,它是如此之好,不认为有任何理由像其他语言中常见的那样有一打替代品。事实上,如果想尝试Rust,建议先看看rustup,然后试试这个库,看看它能带来什么。
Serde
和clap一样,serde是一个功能丰富、性能卓越的通用序列化库。事实上,想想Java和.NET,不记得有哪个序列化库从各方面都做得这么好—人体工程学和性能。
不要自己尝试从/向文件读/写,相反—先写好数据类型,让serde做所有的工作。作为奖励,可以在一切完成后混合和匹配数据格式(YAML、JSON)。
Reqwest
Reqwest遵循HTTP客户端库的黄金标准,如request、superagent和requests,并将其完美地应用于Rust。它是HTTP客户端的首选库,功能丰富且完整。
Rayon
Rayon是一个 “Rust的数据并行库”,简单地说,给它数据,它就知道如何把它分割成独立的块,让所有的CPU核心工作。
或者更简单地说,给它一个列表,它就会在上面并行化映射,还有其他功能。这对CLI工具非常有用;不是所有的语言都能在命令行上实现并行化。
Slog
slog是一个非常完整的Rust日志套件。它是一个核心,后面有很多插件,比如终端输出的term,JSON输出的json等等。
应该知道,还有log,它的目标是成为标准Rust的一部分,是一个更简单的选择。出于这个原因,已经从slog转到了log。
itertools
在列表上多加几个运算符也无妨,尤其是许多或大多数运算符是零成本的。有了itertools,就可以得到这些。如果是一个像lodash这样的库的粉丝,那就太好了。
Hyper
hyper是一个用Rust编写的快速HTTP实现,也是为Rust编写的(相对于那些用C编写的,涵盖了动态语言的性能)。可以发现hyper几乎出现在使用的所有高级库中,如果直接使用它,感觉有点像Netty或Finagle。既把hyper当作一个HTTP工具箱(使用其中的部分),也把它当作一个整体,在它上面建立一个服务器。
猜猜看,什么东西不使用Hyper?是Actix。Actix试图变得更简单,从经验来看—它能做到。经常使用Actix而不是Hyper,因为它更高级,对于服务的目的来说,更成熟。今天,默认直接使用Actix而不是Hyper,除非需要建立一些低级别的东西,或者有一个直接需要Hyper的库(有很多)。
PyO3
PyO3是在Python中构建Rust库(或者说是Rust中的Python库?)的比较流行的库之一。如果想看看这种混合的结果,这里有hyperjson—一个由Rust的serde支持的Python的JSON库。
依靠Rust的安全性和Serde的性能,几乎不费吹灰之力就得到了一个安全的、最快的Python JSON库之一。
想在3个步骤中改进Python吗?
- 找到一个伟大的Rust 库
- 用PyO3包住它
- 注意:PyO3(可能还有rust-cpython)可能有一些设计缺陷,可能会放弃安全。请阅读这里了解更多细节。
proptest
proptest是Rust的一个基于属性的测试库。自从在短暂的Haskell工作中使用QuickCheck后,就在使用的每一种语言中寻找这类库—这些库提出它们会通过智能地思考一组输入数据来自动找到一个失败的测试案例,使代码陷入困境。
libloading
对于那些想把Go或其他c-lib库混入Rust前端的人来说,libloading使其变得简单。
在过去的一年里,用Rust构建了大中型项目,接受Rust生态系统的某些部分还没有准备好,并且不吝于用其他语言(主要是Go)来构建这些项目—只是用libloading把所有东西都挂回Rust中。
性能
最后应该知道的是,干净、简单的Rust在默认情况下是非常快的。这里有一个关于正确时间的谈话。
还有几个几乎一直喜欢使用的库,它们在Rust已经提供的默认情况下带来了不错的性能提升。