你认为这个世界上最大的 Rust 项目是哪一个呢?
目前已统计的:
项目 | 代码行数 |
---|---|
Rust | 178w |
Redox | 133w |
Servo | 32w |
diem | 30w |
Tikv | 30w |
参与地址:点这里
遇见锈儿:来自 FaceBook 的 Neil Mitchell
这是对 FaceBook(以下简称 FB)基础设施团队软件工程师 Neil Mitchell 锈儿的采访。他在这个团队工作期间一直使用 Rust 作为主要开发语言之一,让我们听听他的经历。
Q:锈儿你好,请简单介绍一下自己。
A:我是 Neil,本是个 Haskell 程序员,最近搞了不少 Rust。我正在读 Haskell 的 PhD,让 Haskell 程序更短、更快、更安全。我 18 个月前加入 FB,从事开发人员工具的工作,其中涉及向更多 Rust 的过渡。
Q:为什么你和你在 FB 的团队会选择使用 Rust 而不是其他语言?
A:我坚信应该让编译器检查代码,那么多的程序员,那么多的代码,没有谁能记住能使代码安全的所有细微属性,但编译器可以强行执行某些规则。Rust 编译器确保可变性被驯服,并发是安全的而且内存不会泄露。这种安全性使我们能够在学习时积极重构,结合高级抽象,形成强大的语言。
Q:你在 FB 做过哪些项目用了 Rust?
A:嗯,两个 Rust 的开源项目:
- Gazebo 是个小实用函数库,没啥惊天动地的功能,但这些 “小助手” ,经过不断完善、文档化、测试,可以证明是真正的推动力。比如,有个拆分字符串的函数,注释劣质版本的 clone,具有生命周期的
Any
trait。 - Starlark 是 Starlark 配置语言的 Rust 实现。该项目为 Starlark 语言提供了解析器、实现、linter、IDE 工具和调试器。 Starlark 语言是 Python 的确定性版本,通常用于配置。 有关 Starlark 工作原理的更多信息,请查看我们的 Facebook 开发人员页面上的博客:The Rust Starlark library。
Q:你如何感觉 Rust 在 FB 的发展轨迹?
A:我觉得 Rust 拥有能够在 FB 发展为主要语言的所有属性。它是更全的 C++,更快的 Python。与该领域的大多数替代方案相比,它提供了令人信服的优势。
Q:FB 为 Rust 增加了什么价值?
A:FB 拥有大量的程序员,写的人越多,获得的附带好处就越多。此外,FB 经常发布开源库,包括之前提到的 Rust 库。
Q:你认为 2021 年 Rust 作为语言会如何发展?
A:Rust 用户将持续增长,IDE 中使用 Rust Analyzer 的体验会快速提高。我认为 Rust 发展的这段时期将被描述为 async 稳定之后的时代——在语言方面投入了大量出色的工作以使 async 工作。现在的问题是通过 library 端传播这些更改——有很多库依然依赖于旧版本,比如 tokio,这需要向前推进以便大家都能受益。
Q:一些使用过 Rust 的人已经真正的喜欢上它。你觉得是为啥,以及你最爱的 Rust 特性是什么?
A:我喜欢的特性多了,但最喜欢构造函数。在 Java 这样的语言中,构造函数有一堆特殊规则,必须调用超类构造函数,必须返回类的实例——这是限制性的,很烦。在 Rust 中,构造函数并不特殊——但按照惯例,它通常是一个名为 new
的静态方法。但既然是约定俗成的东西,感觉就像是一个构造函数,但所有规则都可以微调,而且简单很多。这不是什么大事,但是我最喜欢的功能,因为它是 Rust 的缩影——大量经过深思熟虑的简化,共同产生了巨大的影响。
Q:人们可以在哪里学习更多 Rust,他们如何开始为它做贡献?
A:有很多学习 Rust 的资源,我特别喜欢 Learning Rust With Entirely Too Many Linked Lists,我是真不推荐任何书籍,因为 Rust 有点抗拒通过阅读学习——你必须写代码。花点时间配置编辑器和 IDE,因为从 Rust 开始的大部分工作是学习与编译器和借用检查器对话。如果要贡献,开始写一写代码,然后一切随心。
PR:添加尾随逗号以创建一元组的建议
fn main() {
let t: (i32,) = (1);
}
该代码将产生如下错误信息:
warning: unnecessary parentheses around assigned value
--> src/main.rs:3:21
|
3 | let t: (i32,) = (1);
| ^^^ help: remove these parentheses
|
= note: `#[warn(unused_parens)]` on by default
error[E0308]: mismatched types
--> src/main.rs:3:21
|
3 | let t: (i32,) = (1);
| ------ ^^^ expected tuple, found integer
| |
| expected due to this
|
= note: expected tuple `(i32,)`
found type `{integer}`
修改为:
error[E0308]: mismatched types
--> test.rs:2:21
|
2 | let t: (i32,) = (1);
| ------ ^^^ expected tuple, found integer
| |
| expected due to this
|
= note: expected tuple `(i32,)`
found type `{integer}`
help: use a trailing comma to create a tuple with one element
|
2 | let t: (i32,) = (1,);
| ^^^^
xh:友好快速的 HTTP 请求工具
尽可能多地重新实现了 HTTPie 的优秀设计。
$ xh get baidu.com
HTTP/1.1 200 OK
accept-ranges: bytes
cache-control: max-age=86400
connection: Keep-Alive
content-length: 81
content-type: text/html
date: Sun, 20 Jun 2021 05:13:12 GMT
etag: "51-47cf7e6ee8400"
expires: Mon, 21 Jun 2021 05:13:12 GMT
last-modified: Tue, 12 Jan 2010 13:48:00 GMT
server: Apache
<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>
GitHub 地址:ducaale/xh: Friendly and fast tool for sending HTTP requests
Walleye:国际象棋引擎
Walleye 是一种使用经典 alpha-beta 风格 AI 编写的与 UCI 兼容的引擎。 支持从任意 FEN 字符串加载棋盘位置、Unicode 漂亮地打印到控制台和帮助调试的 UCI 通信日志。注意,这是引擎,如果要玩儿的话要加 GUI,比如已经做过测试的 Cute Chess。
# 初始位置
$ ./walleye -P
a b c d e f g h
♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜ 8
♟︎ ♟︎ ♟︎ ♟︎ ♟︎ ♟︎ ♟︎ ♟︎ 7
6
5
4
3
♟︎ ♟︎ ♟︎ ♟︎ ♟︎ ♟︎ ♟︎ ♟︎ 2
♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜ 1
# fen 指定位置
$ ./walleye --fen="r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w WQkq - 0 1" -P --depth=10
a b c d e f g h
♜ ♚ ♜ 8
♟︎ ♟︎ ♟︎ ♛ ♟︎ ♝ 7
♝ ♞ ♟︎ ♞ ♟︎ 6
♟︎ ♞ 5
♟︎ ♟︎ 4
♞ ♛ ♟︎ 3
♟︎ ♟︎ ♟︎ ♝ ♝ ♟︎ ♟︎ ♟︎ 2
♜ ♚ ♜ 1
GitHub 地址:MitchelPaulin/Walleye: A chess engine written from scratch in Rust ♞
注:FEN 是 Forsyth-Edwards Notation 的简称,用来描述棋盘位置,详见维基百科。
新书:使用 Rust 进行系统编程
地址:Hands-On Systems Programming with Rust
From 日报小组 长琴
社区学习交流平台订阅:
评论区
写评论要看,但不能光看:)
--
👇
TD-Sky: 学Rust真的不用看书吗?还是因为锈儿是老工程师,经验一下子就迁移了😮
学Rust真的不用看书吗?还是因为锈儿是老工程师,经验一下子就迁移了😮