|
|
@ -1,80 +1,84 @@
|
|
|
|
# Rust语言周刊
|
|
|
|
# 「Rust 语言周刊」 第 16 期 · 2022-06-24
|
|
|
|
Rust语言周刊精选全世界过去一周的优秀文章、新闻、开源项目和语言动态。
|
|
|
|
Rust语言周刊精选全世界过去一周的优秀文章、新闻、开源项目和语言动态。
|
|
|
|
|
|
|
|
|
|
|
|
本周刊由 RustCn 倾情打造,其中, `[Zh]` 标识的中文资料由 Rust 翻译计划提供,并且原始的 Markdown 文档已[全部开源](https://github.com/rustlang-cn/rustt),欢迎大家阅读和订阅。
|
|
|
|
本周刊由 RustCn 倾情打造,其中, `[Zh]` 标识的中文资料由 Rust 翻译计划提供,并且原始的 Markdown 文档已[全部开源](https://github.com/rustlang-cn/rustt),欢迎大家阅读和订阅。
|
|
|
|
|
|
|
|
|
|
|
|
> RustCn:https://hirust.cn, 公众号: Rust语言中文网
|
|
|
|
> RustCn:https://hirust.cn, 公众号: Rust语言中文网
|
|
|
|
|
|
|
|
|
|
|
|
# 「Rust 语言周刊」 第 15 期 · 2022-06-10
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<img src="https://pic3.zhimg.com/80/v2-c7576bc34d1da15c96032aa39a6a1796_1440w.jpeg">
|
|
|
|
## 官方新闻
|
|
|
|
<h5 align="center">题图: Rust 好难啊</h5>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1、[首期 Rust 基金会的赞助名单已经出炉](https://foundation.rust-lang.org/news/2022-06-14-community-grants-program-awards-announcement/)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
按照目前的计划,基金会每年开放两次申请,每次 20 万美元的总额( 估计会逐年增加 ),大致授予[合作伙伴](https://foundation.rust-lang.org/news/2022-06-14-community-grants-program-awards-announcement/#fellowship-awards)和[个人项目](https://foundation.rust-lang.org/news/2022-06-14-community-grants-program-awards-announcement/#individual-project-grant-awards)两个方向。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
下次的申请开放大概在 10 月份左右,强烈建议有能力的都去试试,万一申请下来,几千美元也是很香的 :)
|
|
|
|
|
|
|
|
|
|
|
|
## 精选文章
|
|
|
|
## 精选文章
|
|
|
|
|
|
|
|
|
|
|
|
1、[简单的 Rust 面试问题](https://flakm.github.io/posts/rust_interview_questions/)
|
|
|
|
1、[Zh] [用 Rust 从 0 到 1 实现一个最简化的 KV 存储引擎](https://blog.csdn.net/qq_36456827/article/details/125304612)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
这种有讲有练的干货真的不多( 大部分人貌似都更喜欢做一些偏软货的东东,包括我自己 :P ),本文不仅内容质量高,而且还随文附送一个相当不错的 DB demo 实现,非常值得阅读和学习!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2、[智商提升了一岁的 Rust 编译检查器](https://jackh726.github.io/rust/2022/06/10/nll-stabilization.html)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
当你好奇的看到这里时,和我一样,你被作者的标题忽悠了,其实是 Rust 编译检查器在最新版本中会默认开启所有的功能。不过在文章中,还讲到了很多生命周期错误提示的最新变动以及未来的展望,总算没白来了 :D
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3、[大佬来找茬系列之教学明星项目 mini-redis](https://smallcultfollowing.com/babysteps/blog/2022/06/13/async-cancellation-a-case-study-of-pub-sub-in-mini-redis/)
|
|
|
|
|
|
|
|
|
|
|
|
当年(2015)我搜索 Go 语言工作时有多绝望,你现在搜索 Rust 工作就有多绝望,再优秀的语言,要在行业里流行开来,总需要时间的沉淀,不管如何,Rust 现在正在走在一条正确的快行道上。
|
|
|
|
一般来说,在社区中推荐一个新手学习项目, [`mini-redis`](https://github.com/tokio-rs/mini-redis) 往往是首选,它拥有高质量且简洁的代码实现、清晰完善的文档以及对异步编程保姆式的引导讲解,总之非常棒。
|
|
|
|
|
|
|
|
|
|
|
|
因此,无论是面试官还是面试者,提前储备一些 Rust 的面试题,都是不错的选择。
|
|
|
|
但是它没有缺点吗?这不,Baby steps 大佬出手了,干货满满,强烈推荐阅读!
|
|
|
|
|
|
|
|
|
|
|
|
2、[来自强类型的诅咒](https://fasterthanli.me/articles/the-curse-of-strong-typing)
|
|
|
|
4、[如何让 Rust 项目发生内存泄漏甚至崩溃?](https://fly.io/blog/rust-memory-leak/)
|
|
|
|
|
|
|
|
|
|
|
|
我骑着马儿,穿过了雪山,来到了草原,遇到了美丽的...错误?!大家写 Rust 有没有这种感觉,从题目可以看出,作者是绝对有这种感觉的,特别是在他的 Boss 宣称:从今以后,我们的一切都要使用 Rust 后...
|
|
|
|
别开枪,是友军!事实上,这篇文章讲的是如何修复 Rust 项目的内存泄漏问题,具体的项目是 `fly.io` 公司的代理服务,该代理会将来自世界各地的用户请求路由到最适合的虚拟机中( 虚拟机分布在全世界 21 个地区 )。
|
|
|
|
|
|
|
|
|
|
|
|
3、[测量 Rust 中的堆内存分配](https://flakm.github.io/posts/heap_allocation/)
|
|
|
|
5、[使用自建的 prelude.rs 来简化 Rust 项目的依赖引入](https://justinwoodring.com/blog/tidy-your-rust-imports-with-prelude/)
|
|
|
|
|
|
|
|
|
|
|
|
如果问程序员,为何要节省内存,他会说这是技术的体现;如果问老板,为何要节省内存,他会说这是因为穷。总是,在节省硬件成本这件事上,大家的目标出奇的一致。那么现在的问题就是:该如何衡量应用的内存使用情况?
|
|
|
|
Rust 项目大了后,一个不得不面对的问题就是:该如何处理每个文件中都需要导入的重复依赖,例如:
|
|
|
|
|
|
|
|
|
|
|
|
4、[Arc 和 Mutex](https://itsallaboutthebit.com/arc-mutex/)
|
|
|
|
```rust
|
|
|
|
|
|
|
|
use crate::models::clubs_md::{Club, NewClub, ClubDetails};
|
|
|
|
|
|
|
|
use crate::models::users_md::{User, UserDetails, NewUser, Admin};
|
|
|
|
|
|
|
|
use crate::models::club_members_md::{MembershipStatus, ClubMember, NewClubMember};
|
|
|
|
|
|
|
|
use crate::Db;
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
这篇文章讲解了一个很有趣的点:`Arc` 为何要求其包裹的类型实现 `Sync` 特征,值得一看!
|
|
|
|
6、[使用 Rust 来测试 NVDIA 的 GPU 性能](https://simbleau.github.io/blog/gpu-profiling-with-rust/)
|
|
|
|
|
|
|
|
|
|
|
|
5、[使用 Github Actions 让 Rust 构建提速 30 倍](https://ectobit.com/blog/speed-up-github-actions-rust-pipelines/)
|
|
|
|
在目前的 CPU、GPU 跑分领域,Rust 还是小兵之姿,但将军的梦想还是要有的。这篇文章中,作者将使用 NVDIA 的工具扩展 SDK 来开发基于 Rust 的 GPU 和 CPU 跑分工具,喜欢猎奇的同学不容错过。
|
|
|
|
|
|
|
|
|
|
|
|
Rust 什么都好,就是编译太慢了,特别是你同时写 Go 和 Rust 时,那种对比体验更是明显。原因在于,在编译过程中,为了安全性和性能 Rust 会检查很多很多东西,何况 Rust 提供的语言特性也远比 Go 要更加丰富。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
当然,这个过程是可以提速的,例如在 `Cargo.toml` 中设置编译优化选项,再比如本文中的构建缓存。
|
|
|
|
## 开源项目
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1、 [lurk: 使用 Rust 重新实现 strace](https://jakobwaibel.com/2022/06/06/ptrace/)
|
|
|
|
|
|
|
|
|
|
|
|
6、[Rust 好难啊](https://hirrolot.github.io/posts/rust-is-hard-or-the-misery-of-mainstream-programming.html)
|
|
|
|
目前项目还较为早期,但是关于项目的愿景,作者描述的较为清晰,这种项目一般都是值得期待并能产生结果的。
|
|
|
|
|
|
|
|
|
|
|
|
Rust 之所以给很多人难学的印象,很重要的一点就在于:某些其它语言很轻松就能处理的问题,在 Rust 中,你需要兼具美貌、智慧与勇气,才能搞定。
|
|
|
|
2、[error-stack: 一个全新的 Rust 错误处理库](https://hash.dev/blog/announcing-error-stack)
|
|
|
|
|
|
|
|
|
|
|
|
大家可能以为这篇文章是一个新手写的,其实不然,作者已经浸淫 Rust 数年,还在某次大会上分享过 Rust,但是他依然会遇到一些意料之外的棘手错误,一起来看看吧。
|
|
|
|
该库支持上下文感知和任意用户数据的关联。事实上,这种类型的开源项目往往都来源于一个团队在实际项目中遇到的痛点,因此工程性适用性会非常强。总之,以我个人的经验,不以 star 论英雄,还是看看是 `谁` 开源了 `什么` 项目以及适不适合 `你` 的使用场景,很多低星项目其实是非常优秀和成熟的,只不过没有得到应有的曝光度。
|
|
|
|
|
|
|
|
|
|
|
|
7、[爆发和挑战并存](https://thestack.technology/rust-language-explosive-growth-challenges-rust-governance/)
|
|
|
|
3、[打遍 playground 无敌手的 Rust Explorer](https://www.rustexplorer.com/b/about)
|
|
|
|
|
|
|
|
|
|
|
|
在过去 24 个月中,Rust 开发者的数量增加了 3 倍,可以说从 Rust 基金会成立后,Rust 一直在爆发式增长,但是其所面临的挑战也越来越大。
|
|
|
|
这个项目真的非常吸引我,不知道大家对于在线代码运行的期许是什么,对我而言,能够运行各种代码绝对是最大的亮点,而这个项目支持 10000 个三方依赖库(crates.io 上的 top 10000)。
|
|
|
|
|
|
|
|
|
|
|
|
8、[使用 Rust 来爬取网页](https://www.scrapingbee.com/blog/web-scraping-rust/)
|
|
|
|
不是 100,也不是 1000,而是 10000,基本上这意味着几乎所有代码片段都可以在这里运行了,也意味着我的 `practice.rs` 项目可以进一步扩展,Bingo!
|
|
|
|
|
|
|
|
|
|
|
|
想从某些网站获取信息,一般有两个途径:首先就是调用网站提供的 API,这也是最安全、最合法的方式(特别是国内!),例如 Github 就提供了异常丰富的 API;其次,就是使用爬虫来爬取到网页后,再对内容进行解析,以提取出有用的信息。
|
|
|
|
4、[clap 3.2 发布](https://epage.github.io/blog/2022/06/clap-32-last-call-before-40/)
|
|
|
|
|
|
|
|
|
|
|
|
9、[Video][使用 Rust 来编写 WGPU 程序](https://www.youtube.com/playlist?list=PL_UrKDEhALdJS0VrLPn7dqC5A4W1vCAUT)
|
|
|
|
看起来只是一个小版本,但是它可是 4.0 大版本的预演,因此新增了两种 API 构建方式。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5、[c2rust 王者归来](https://immunant.com/blog/2022/06/back/)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
这个项目对于 Rust 的生态而言太太太重要了,要进一步扩大自己的份额,C 语言就是绕不过的高山,而重写旧项目在大多数时候显然都是不现实的,因此 `c2rust` 才会有这么高的呼声,只不过之前因为核心作者的原因,项目几乎不怎么活跃了,还好现在 `immunant` 公司接过了大旗。
|
|
|
|
|
|
|
|
|
|
|
|
## 往期回顾
|
|
|
|
要我说,这种底层类型的大型开源项目要做得好,还是得背靠大树,例如之前的 [`cc`](https://github.com/rust-lang/cc-rs/issues/663) 项目就是从 `alex` 个人名下转到了 `rust` 官方组织下,最终又焕发了第二春。
|
|
|
|
|
|
|
|
|
|
|
|
目前所有的周刊都按照 `年/月/日期` 的方式归纳在 [docs](./docs) 目录下,大家可以按需查看。
|
|
|
|
6、[mold 发布 0.3 版本](https://github.com/rui314/mold)
|
|
|
|
|
|
|
|
|
|
|
|
- [第 14 期](./docs/2022/5月/29.md)
|
|
|
|
mold 是一个用 Rust 写的链接器,它的性能比 LLVM 的 lld 链接器快好几倍,目标是通过降低编译时间来让 Rust 项目的开发闭环周期大幅提速。以下是性能对比图:
|
|
|
|
- [第 13 期](./docs/2022/5月/22.md)
|
|
|
|
|
|
|
|
- [第 12 期](./docs/2022/5月/16.md)
|
|
|
|
|
|
|
|
- [第 11 期](./docs/2022/5月/07.md)
|
|
|
|
|
|
|
|
- [第 10 期](./docs/2022/4月/29.md)
|
|
|
|
|
|
|
|
- [第 9 期](./docs/2022/4月/24.md)
|
|
|
|
|
|
|
|
- [第 8 期](./docs/2022/4月/15.md)
|
|
|
|
|
|
|
|
- [第 7 期](./docs/2022/4月/08.md)
|
|
|
|
|
|
|
|
- [第 6 期](./docs/2022/4月/02.md)
|
|
|
|
|
|
|
|
- [第 5 期](./docs/2022/3月/25.md)
|
|
|
|
|
|
|
|
- [第 4 期](./docs/2022/3月/18.md)
|
|
|
|
|
|
|
|
- [第 3 期](./docs/2022/3月/11.md)
|
|
|
|
|
|
|
|
- [第 2 期](./docs/2022/3月/04.md)
|
|
|
|
|
|
|
|
- [第 1 期](./docs/2022/2月/28.md)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<img src="https://pic1.zhimg.com/80/v2-62f5d64e110fb3c6a9af669ccb1357f7_1440w.png" />
|
|
|
|
|
|
|
|
|
|
|
|
## 怀揣劲爆消息或优质内容?
|
|
|
|
|
|
|
|
欢迎提交 `issue` 或 `PR`,我们欢迎一切有价值的内容,并且你提供的每条消息都将标注上你的 github 用户名和链接。
|
|
|
|
|
|
|
|