Собственный аллокатор можно назначить глобальным — через новый трейт

11.07.2026

Появился маркерный трейт, который делает аллокатор пригодным для назначения глобальным. Реализации стандартного трейта для таких типов появились автоматически.

Зачем нужен маркер

Прямое преобразование любого аллокатора в глобальный невозможно: если бы оно существовало, то использование глобального аллокатора как аллокатора привело бы к бесконечной рекурсии — он обращался бы к самому себе.

Отсюда требование: глобальным аллокатором может быть только тот, кто явно подтвердил, что этого не будет. Маркерный трейт — это и есть подтверждение.

Что это даёт

Аллокатор, написанный по новому трейту, становится пригодным для назначения глобальным без реализации второго интерфейса. То есть переход с устаревающего интерфейса на новый не требует дублировать код.

Направление движения тут важнее отдельной возможности: новый трейт аллокаторов готовится к стабилизации, и это один из шагов, чтобы переход не стал ломающим изменением.

Оригинал

allow Allocators to be used as #[global_allocator]s

Упоминаний: 1 · Просмотров: 2