< 返回版块

长琴 发表于 2021-06-20 21:29

Tags:rust,日报

你认为这个世界上最大的 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:添加尾随逗号以创建一元组的建议

针对 Error output for mismatched types with a 1-ary tuple could hint to add a missing comma · Issue #86100 · rust-lang/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,);
  |                     ^^^^

地址:Suggest a trailing comma if a 1-tuple is expected and a parenthesized expression is found by FabianWolff · Pull Request #86116 · rust-lang/rust

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 日报小组 长琴

社区学习交流平台订阅:

评论区

写评论
作者 长琴 2021-06-23 14:07

要看,但不能光看:)

--
👇
TD-Sky: 学Rust真的不用看书吗?还是因为锈儿是老工程师,经验一下子就迁移了😮

TD-Sky 2021-06-21 13:03

学Rust真的不用看书吗?还是因为锈儿是老工程师,经验一下子就迁移了😮

1 共 2 条评论, 1 页