java|【Rust 日报】2021-06-20 世界上最大的 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?
【java|【Rust 日报】2021-06-20 世界上最大的 Rust 项目是哪个()】A:嗯,两个 Rust 的开源项目:
- Gazebo 是个小实用函数库,没啥惊天动地的功能,但这些 “小助手” ,经过不断完善、文档化、测试,可以证明是真正的推动力。比如,有个拆分字符串的函数,注释劣质版本的 clone,具有生命周期的
Any
trait。
- Starlark 是 Starlark 配置语言的 Rust 实现。该项目为 Starlark 语言提供了解析器、实现、linter、IDE 工具和调试器。 Starlark 语言是 Python 的确定性版本,通常用于配置。 有关 Starlark 工作原理的更多信息,请查看我们的 Facebook 开发人员页面上的博客:The Rust Starlark library。
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 defaulterror[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.comHTTP/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
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 日报小组 长琴
社区学习交流平台订阅:
- Rustcc 论坛:支持 rss
- 微信公众号:Rust 语言中文社区
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 宽容谁
- 我要做大厨
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘