【Rust日报】为什么Rust中的std::pin::Pin包装器看起来非常奇怪

科技   2024-11-11 15:34   加拿大  

gccrs - Rust编程语言替代编译器

gccrs是一个正在开发中的Rust编程语言替代编译器,作为GCC项目的一部分。它的目标是与rustc编译器具有完全相同的行为。gccrs项目的主要目的包括:

  1. 为Rust编程语言提供一个替代的编译选择。
  2. 支持LLVM不支持的一些处理器架构,如Dreamcast游戏机的SuperH架构。
  3. 利用GCC多年积累的安全特性和静态分析器,增强对不安全Rust代码的分析能力。
  4. 通过复制rustc的功能,帮助精炼Rust语言的规范文档。
  5. 作为一个有趣且有益的编译器项目,吸引更多人参与编译器开发。

该项目明确表示,gccrs不是为了创建一种改变了Rust语义或功能的"另一种Rust"。它的目标是与rustc保持一致,不会绕过RFC过程引入新特性。总之,gccrs旨在提供一种替代编译选择,同时为Rust语言规范化和编译器开发做出贡献。

https://blog.rust-lang.org/2024/11/07/gccrs-an-alternative-compiler-for-rust.html

为什么Rust中的std::pin::Pin包装器看起来非常奇怪

这篇文章解释了为什么Rust中的std::pin::Pin包装器看起来非常奇怪。某些Rust类型的值需要被固定(pinned),以防止它们在内存中移动。这是通过std::pin::Pin包装器类型来表示的,通常体现为函数接受Pin<&mut T>而不是&mut T。

固定值会使得使用许多"正常"的编程技术变得困难,并产生一些奇怪的副作用,这些副作用与固定值的目的没有明显的联系。

文章首先简要介绍了什么是固定值,探讨了一些常见的令人困惑的情况,并试图通过确定产生这些奇怪副作用的原因来解释它们。这是一个关于学习掌握固定值的经验之谈的集合。

文中举例说明,如果一个类型包含指向自身的指针或引用,在移动该类型到不同的内存位置时,这些指针或引用就会变为无效,导致未定义行为。std::pin::Pin的存在就是为了防止这种情况发生。

https://sander.saares.eu/2024/11/06/why-is-stdpinpin-so-weird/

.io 顶级域名将在未来几年内被"逐步淘汰"的潜在风险

这个 issue 讨论了 .io 顶级域名将在未来几年内被"逐步淘汰"的潜在风险,以及这可能对 crates.io 和整个 Rust 生态系统产生的影响。

作者首先列举了几个因地缘政治原因而被废止的国家顶级域名的例子,例如东德的 .dd、南斯拉夫的 .yu 等。他认为 .io 域名的情况可能类似于前苏联的 .su,IANA 可能会给予特殊对待,但这并不是完全可控的。

接下来,作者分析了这种风险对 crates.io 的影响。虽然短期内可能不会发生严重问题,但一些实际问题可能会逐渐出现,比如像英国公民突然无法注册或续费 .eu 域名这种情况。

作者认为这是一个值得讨论和提前规划的重大风险,以免给 Rust 生态系统带来灾难性影响。

https://github.com/rust-lang/crates.io/issues/9864

--

From 日报小组 Mike

社区学习交流平台订阅:

  • Rustcc论坛: 支持rss
  • 微信公众号:Rust语言中文社区


Rust语言中文社区
Rust官方及社区最新信息搜集、文章推送,教程学习,技巧分享,社区交流。信息来源是整个全球Rust社区。
 最新文章