Lobsters | 原文链接 | 2026-09-10 收录

Rust 自定义分配器半年后再看:Allocator 趋于 dyn 兼容,MVP 先行留下 Clone 与 Pin 两个硬骨头

来源: cetra3.github.io — 2026-09-09

概述

cetra3 在去年那篇《2026 分配器现状》六个月后跟进,报告自定义分配器在 Rust 里的稳定化已迎来一波复苏、比以往任何时候都更接近落地(主要功劳归 libs 团队的 Nia)。如今的 Allocator trait 表面只剩 `allocate`/`deallocate` 两个核心方法,配以 Box::new_in、Vec::new_in 等入口,被刻意保持为「够起步的 MVP」。方向上的重要变化是让 Allocator 走 dyn 兼容路线(他引用 Zig 默认即动态分配器),这解锁了大量用例。真正的难点在隐藏的不安全性:文章花大篇幅拆了两个被稳定化前抓出的坑——其一是 Drop 即回收的 arena 分配器配合 Clone 会造成安全代码里的 double free,需要引入 unsafe 的 `AllocatorClone` 标记 trait 来把保证压进 unsafe 域;其二是 Box::pin_in 想用 `'static` 约束防止 reset 越过 drop 破坏 Pin 不变式,却因协变可以被绕过,因此需要 `StaticAllocator` 这类带更强不变式的标记。他强调这两处都幸运地在稳定化前被发现了,MVP 之后仍道阻且长。

核心要点

金句

I feel like this will become the de-facto way of using custom allocators when designing libraries, given the flexibility.
返回 Lobsters 首页