昨天朋友圈被 Facebook 的 Libra 刷屏。网上有很多关于 Libra 的快文章,从上帝视角到技术细节,从经济模型到语言实现,可谓是各领风骚,我就不凑短期的热闹。因为最近在学 Rust,就在本地 build libra 的漫长时间里,整理了 Libra 的依赖 —— 我想一个语言的初学者都会有类似的问题,一个大公司(成熟团队)所做的项目,究竟会用到哪些生态中成熟的类库?毕竟,awesome-xxx 过于大而全,反而不便甄选。我之前也整理过 tikv 的依赖,发现一些关键库的使用,大家英雄所见略同。libra 因为涉及到 cryptocurrency,相关的加密算法也额外多些。具体细节大家移步(可以点击原文链接):https://github.com/tyrchen/unchained/blob/master/code/libra.md。因为我直接从编译时下载的 log (Downloaded xxx) 来抓的依赖,所以里面有依赖的依赖。
有同学可能好奇是怎么做的,其实很简单:我把抓下来的一行行文字,类似:
代码语言:javascript复制Downloaded arc-swap v0.3.11
放在 vscode 里用 regex find/replace 成:
代码语言:javascript复制## [arc-swap (v0.3.11)](https://crates.io/crates/arc-swap)
具体的 regex 长这样:
代码语言:javascript复制Downloadeds ([w_-] )s (v[^$] )$
vscode 里的截图:
然后用 sort lines 给它们排个序,去重,然后 option click 每个链接,读 crates.io 的文档,复制其描述,然后放上例子 —— 这是个苦力活,主要是一个个做阅读理解的时间比较长。
libra 里面用了 pingcap 出品的 grpc-rs 和 rust-rocksdb。其中 rust-rocksdb 并没有放在 crates.io 里,猜想原因之一是 crates.io 里已经有同名 library。pingcap 威武!tikv 威武!