社区热点
趣谈:你“不应该”使用 Rust 的十大理由
fasterthanlime 的油管视频介绍了你“不应该”使用 Rust 的十大理由[1] :
- It's bad for job security. Rust 会不利于你的工作保障。虽然 Rust 说可以在编译期避免很多错误,但是你们想想,现在有多少人在用像 Go 这样的语言一遍一遍地修复相同的错误。而这些错误都是让人衣食无忧的保障。
- It's moved to slow. Rust 已经存在了十二年,稳定发布了八年,但是它仍然缺乏对 Null 的支持。几乎所有语言都支持 null,比如 C/C /Java/C#/Python/Ruby/Javascript,但是 Rust 不支持。Rust 有 Option,它会逼迫你处理Some 和 None 两种情况,这让事情变得更加复杂了。
- It's moved to fast. Rust 每六周发布一次,每三年发布一次新的 Edition 。变化太快了,比如 Rust 的宏语法,在 2015 edition 之前,你还得写
extern crate xxxmacro
,但是 2018 年你就无需写这个了。但是对于学习者来说,该如何跟踪这种语法变化呢? - It's too opinionated. Rust 太自以为是了。rustfmt正在压制关于代码格式化的正确性方法的建设讨论,以“协作”名义扼杀个体开发人员的创造力。在 Rust 中也只能使用 Cargo,但是 C 中,我们可以使用 make、cmake、qmake、premake、autotools、scons、GN、bazel、buck、ninja、meson等多种选择。
- It's not opinionated enough. Rust 也不够自以为是。Async Rust 可以适用于高性能 Web 应用和嵌入式硬件,这意味着你只需要在 Cargo.toml 中添加一行
tokio={version="1", features=[full]"
,这字母可太多了。 - 此条在国内过于敏感,请看原视频,不喜勿喷。
- It's not inclusiv enough. 包容性不够。Rust 社区不欢迎那些威胁到社区成员的不友好分子(见 Rust 社区行为准则条款),那么那些人该去哪里交流 Rust 呢?难道仅仅是因为他们可能伤害人类同胞的心理或身体就驱逐他们吗?这样是不是不太公平?
- It's bad for the economy. 对经济不利。英特尔、AMD和苹果每年都在推出越来越快的硬件,但是 Rust 在十年前的硬件上依旧良好运行。诚然,编译很慢,但这仅仅是涉及开发人员,他们只占市场的一小部分。
- It's bad for the environment. 对环境不利。当 Rust 团队对 Rust 编译器或标准库进行更改时,他们通常会使用`crater run`[2]命令,他们会编译每个已经发布的 Rust 项目,看看它们是否引入了性能回归,这占用了大量宝贵的计算资源,我们本来可以用它挖掘加密货币的。
- It's bad for security researchers. 对安全研究人员不利。使用 C/Cpp,你可以看到很多有趣的代码,缓冲区溢出漏洞基本上就在你掌心里了。而 Rust 则让安全人员加倍工作,以至于不禁发问:他们必须隐藏点什么呢?
2023 年的 Rust:成长
Rust 语言团队 Leader Niko 发布了一篇博文,介绍了 Rust 2023 年最重要的事情[3]。
- 实现:让任何函数异步化、在任何地方使用
impl Trait
以及充分使用泛型关联类型(GAT)。 - 为Rust 2024 Edition 做计划;开始制定 Rust 语言规范(specification)(相关 RFC PR #3355[4]),并将其纳入流程。
- 为 Unsafe 代码定义规则,并为检查你是否遵循这些规则提供方便的工具。为此官方在计划创建操作语义团队(Operational Semantics Team)[5]
- 支持在大学和其他地方教授 Rust。
- 改进产品规划和用户反馈流程。
- 完善团队治理结构,为专门的领域提供专门的团队,为广泛的监督提供更多可扩展的结构,以及更密集的入职培训。
延伸阅读:
- [Do we need a "Rust Standard"?](https://blog.m-ou.se/rust-standard/ "Do we need a "Rust Standard"?")
- Ferrocene Rust Language Specification[6]
- Rust 类型系统的“正式模型” a-mir-formality[7]
- Announcing: MiniRust[8]
- Safe Transmute RFC[9]
- rust-book in brown edu[10]
- Governance Update[11]
《C DG 关于 ISO C 安全的意见》论文在 Reddit Rust 社区引起很大争议
《C DG (Direction Group) 关于 ISO C 安全的意见》论文[12]在 Rust 社区引起很大争议。
论文中对于 Rust 的描述有很多不严谨的说法,甚至还认为 Rust 最初是构建于 Cpp 之上,他们(Cpp 委员会)甚至都不屑于去了解下 Rust 。 感兴趣可以参考 Reddit 更多讨论[13]。
“当他们试图通过忽略两种语言的优势并说“当狗屎发生时 Rust 和 C 一样糟糕”来争论 C 和 Rust 一样安全时,这是一个奇怪的争论点。
比如,把供应链攻击称为语言漏洞。
“没有称为“RUST”(全部大写)的语言。这通常由对编程一无所知的人使用(例如人力资源人员和糟糕的经理)。或者,它由不了解 Rust 的人使用。
C DG 论文中似乎认为 C 的不安全只是一个公众形象问题
“C 似乎,至少在公众形象中,在安全方面不如其他语言有竞争力……C 受益于拥有规范、活跃的用户和实施者社区。其他“安全”语言甚至可能没有任何规范,至少现在还没有。这些重要的安全特性被忽略了,因为我们不太关心广告。在将近半个世纪的时间里,C 也在数百万行代码中经过了时间和战斗的考验。其他语言不是。众所周知,无可争辩的事实是,所有语言都存在漏洞,但这通常需要时间。较新的语言具有较少的漏洞,因为它们还没有经过时间的考验。
ISLE 在 Cranelift 中被完全采用
ISLE 是一种支持类型系统的指令选择器 DSL。ISLE 的引入使 Cranelift 开发者能够以极其高效的方式开发编译器中关于后端目标体系结构中每一种的指令降低模式以及与机器无关的优化重写。
“指令选择器 DSL (ISLE[14], Instruction Selection Lowering Expressions)。指令选择(instruction selection)是将中间语言转换成汇编或机器代码的过程。ISLE 是一种领域特定语言,用于编写指令选择和重写规则。ISLE 源文本被编译成 Rust 代码。ISLE 的目标是表示指令降低模式。指令降低模式是一种规范,即 IR (CLIF) 中的某种运算符组合,当在特定条件下组合时,可以编译成特定的机器指令序列。
Cranelift ISLE 模块作者的这篇文章[15]详细阐述了 ISLE 的细节。
“Cranelift 是一个底层的可重定向代码生成器,Cranelift 目前被用在 wasmtime 中支持 WebAssembly,也被用于 Rust Debug 模式下编译后端。
在 Reddit Cranelift 相关讨论中[16] 有人提到一个问题:craneflit是否会提供能匹配 LLVM/GCC O2/O3/O4 级别优化的短期或长期目标?
Cranelift 的开发者回复:“Cranelift 可能永远达不到 LLVM 或 gcc 的-O3
级别,因为实现它需要的东西太多了,但确实有计划在现有的基础上添加更多优化,比如 -o
或-o2
级别。现在支持了 ISLE ,会对此有更多帮助”。
Cargo 开始集成 gitoxide
gitoxide[17] 是 Rust 重新实现的 Git,它也可以作为库被嵌入到项目中。
Cargo fetch 集成 gitoxide 的 PR[18] 已经创建。因为 gitoxide 的性能比 git 更好。当该 PR 合并和启用时,crates-index 或 git 依赖项的克隆将快约 2.2 倍,而不会受到增量分辨率减慢的影响。
更多详细参考gitoxide 讨论贴[19]。
GitHub 和Rust 基金会正在合作帮助保护您免受crates.io密钥泄露的侵害
GitHub 官宣[20],GitHub 将扫描每个提交到公共存储库 crates.io 的公开的密钥。这项工作是和 Rust 基金会合作的,用于帮助保护 Rust 开发者免受crates.io密钥泄露的侵害。
Rust 开发者生态系统 2022 年现状:发现近期趋势
来自 jetbrains 的调查报告[21]显示 :
- 在工作中使用 Rust 的开发人员比例从2020 年和2021 年的 16% 增长到 2022 年的 18%。
- 根据调查,24% 的 Rustacean 已经使用 Rust 一年以上。这比去年增加了 4 个百分点,但仍然不容易找到经验丰富的 Rust 开发人员。
- JavaScript / TypeScript 仍然是与 Rust 一起使用的最流行的语言,并且其份额正在逐渐增加。
- 使用
println!
或dbg!
宏调试代码的人从 60% 下降到 55%,而在 IDE 中进行 UI 调试的比例从 23% 上升到 27%。 - Rust 开发人员使用的最流行的性能分析工具是 perf,但绝大多数 Rustecean(82%)根本不使用性能分析工具。
- 开发人员主要将 Rust 用于构建 CLI 工具、系统编程和 Web 开发。(鉴于公众对 Rust 的看法是区块链行业中有很多 Rust 工作,然而在统计报告中的区块链比例 6% 甚至低于嵌入式和学术用途 7%)
- Linux 作为主要的 Rust 目标平台位居首位。随着最初的 Rust 支持在 10 月份被合并到 Linux 内核中,Rust 继续集成到 Linux 世界中。而 WebAssembly 平台占 22%。
- 使用 rust-analyzer 的开发者比例从 25% 增加到 45%。42% 的开发人员使用 IntelliJ Rust,而去年这一比例为 47%。
Rust 类型团队成立
Rust 官方正式宣布类型团队[22]成立。
在过去的几年里,Rust 在许多指标上都有显着的增长:用户、贡献者、特性、工具、文档等等。随着它的发展,人们想用它做的事情清单也以同样快的速度增长。除了强大且符合人体工程学的功能之外,对 IDE 或语言学习工具等强大工具的需求也越来越明显。正在编写新的编译器(前端和后端)。而且,最重要的是,官方希望 Rust 继续保持其核心设计原则之一:安全性。
现在GitHub 上有很多关于 Rust 语言、编译器和类型相关的 issues,包括还有 62 个开放的不健全(Unsound)问题[23]。
因此,特别成立了类型团队,用于解决和类型系统相关的边缘问题,包括类型检查器、trait求解、借用检查、Unsafe 代码准则等。在 RFC 3254-types-team[24] 中定义了类型团队的职责范围。
Servo 项目在 2023 年重新启动
Servo 官方宣布[25],得益于新的外部资金,一组开发人员将积极致力于 Servo 的开发。
第一项任务是重新激活该项目及其周围的社区,这样我们就可以为该项目吸引新的合作者和赞助商。2023 年的重点是改善 Servo 布局系统的情况,初步目标是让基本的 CSS2 布局工作。
应用实践
CodeSandbox 中现在已经支持 Rust
CodeSandbox 官宣[26] ,现在可以在 CodeSandbox 中启动 Rust 开发环境了。
CodeSandbox 是一个云开发平台,可以非常轻松地启动云环境并与他人共享。CodeSandbox 平台架构也使用 Rust 开发。
一位 Web 框架作者在 reddit 相关讨论中留言:“我认为这将真正改变 Rust 库和文档的世界,可以使用 CodeSandbox 来设置更加丰富的交互式示例“。
在 GitHub Codespaces 中,不能与他人共享(除非共享你的 git secrets)并且不可分叉。使用 CodeSandbox,你可以与其他人共享沙箱,其他人可以分叉它以继续开发他们自己的版本。所以它更专注于共享和协作。
Azure Sphere IoT 平台上应用 Rust
开发人员现在可以在 Azure Sphere 平台上为联网设备创建应用程序时使用Rust编程语言了。
Azure Sphere 已经包含了用于联网设备的内置安全功能,并且包含基于联发科芯片和基于 Linux 的操作系统构建的硬件。此外,它还包括基于云的 Azure Sphere 安全服务 (AS3),可在设备与互联网或云之间建立安全连接。
AS3 确保安全启动、设备身份验证、软件的信任以及设备运行可信代码的证明。它还使 Microsoft 能够安全地将更新下载到设备上的 Azure Sphere 操作系统和应用程序。将 Rust 引入 Azure Sphere 增加了更多的安全功能。 微软在 GitHub 上提供了一个指向 Azure Sphere Rust 项目的链接[27],其中包括 API、示例和许可条款。
西门子在一次内部Rust Meetup上介绍了Rust在列车控制网络中的应用
来源:推特 Daniel Bovensiepen Li @bovensiepen[28]
“Today's Rust Meetup at Siemens introduced the application of Rust in train control networks. Things are moving