Rust 团队正提议引入新的自动特征(auto-traits)——`Move`、`Destruct` 和 `Forget`,旨在使内存操作显式化,并允许类型选择退出目前通用的默认假设。 过去,Rust 假设所有类型都可以被移动和遗忘(通过 `mem::forget`)。该提议遵循 `Sized` 层级的先例,旨在放宽这些假设: * **`!Move`(不可移动性):** 通过将不可移动性定义为类型属性而非位置属性,团队旨在用一套更简单、更稳健的系统来取代 `Pin`,以处理自引用类型(例如 Linux 内核中所使用的类型)。 * **`!Forget`(保证析构):** 允许类型选择退出“可被遗忘”的特性,从而确保必须执行析构函数。这可以实现诸如“作用域生成(scoped spawn)”等安全模式,即任务句柄的析构函数可确保在父作用域退出前任务已完成合并。 该项目涉及编译器实现、RFC 开发以及在 Linux 内核中的验证。最终目标是提供一种比 `Pin` 更简洁的替代方案,并有可能弃用 `Pin`。这将支持构建更复杂的数据结构和更安全的异步模式,而无需在语言层面长期支持 `Pin` 的工程化方案。
2017年,作者从土耳其移居汉堡实习。这段经历打破了“德国人冷漠或不友好”的常见刻板印象,他反而发现了一种植根于信任、包容和社会责任感的文化。从提供支持的室友,到层级扁平、员工受到真诚尊重的职场环境,他融入德国社会的过程非常顺利。
他将这种顺利的融入归因于有利的环境——例如在国际化的科技公司工作——以及他个人对德国“规则导向”生活方式的认同。他并不将这些标准视为限制,而是视为简化日常生活并促进公平的可靠机制。
在德国生活的八年间,作者观察到这是一个勇于正视历史、重视社会民主的社会。在经历了严格的入籍流程后,他最近拿到了德国护照。作者最终总结道,他的旅程并非被迫同化,而是找到了一个与自身价值观相契合的家园。如今,作为一名正式公民,他已开始践行“非常德国”的传统:在为社会做贡献的同时,也积极地对需要改进之处提出抱怨。
Livelymerge (LM) 项目探索了一个大胆的概念:构建一个实时系统,使整个堆(对象、类和方法)成为一个 Automerge 文档。虽然这实现了无缝的多用户协作,但也带来了一个重大挑战:Automerge 虽然能确保状态收敛,却无法保证所得状态符合应用程序的逻辑不变性。
作者以链表的并发修改为例,展示了 Automerge 对指针写入的“盲目”重放如何导致结构损坏,例如产生循环或链表截断。由于 Automerge 记录的是底层属性写入而非高层编程意图,它无法从本质上保护复杂的数据结构。
团队认为,未来的方向在于“合并感知型数据类型”(merge-aware datatypes)。通过将对原始指针操作的合并转向对语义操作的合并(例如,使用“在之后插入”而非“设置 next 指针”),系统可以在构建时强制执行不变性。尽管他们承认目前尚无完美的解决方案,但他们指出了在可交换操作和像 Coln 这样的基于约束的数据库系统领域中,存在一些有前景的研究。目前,该团队在继续攻克这一架构挑战的同时,主要依赖严谨的编程和 Automerge 的内置类型来维护系统完整性。