我刚刚在我的一个较大的Rust项目中跨越了20K LOC,我想暂停一下并分享一些我所使用的伟大的Rust库。
我还计划在未来的文章中讨论一些话题,比如在Rust与Go之间做决定,或者决定是否为你的团队或项目采用Rust,以及在你决定接受它之后应该期待什么。
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已经提供的默认情况下给你带来了不错的性能提升。
- regex - 一个Regex库,速度真的很快,包括与其他编程语言相比。
- jemalloc - 最快的内存分配器之一,在最近的Rust版本中被放弃了,转而使用操作系统的默认值。我发现它比OSX的默认分配器更快,但只有在你知道你需要它的时候才使用它,因为它给你的二进制文件增加了一些重量(大约700kb)。
摘要
Rust,用一个词来形容就是--强大。
但还有很多话要说。例如--与其他编程语言相比,Rust也是极其年轻的。