Собственный аллокатор можно назначить глобальным — через новый трейт
11.07.2026Появился маркерный трейт, который делает аллокатор пригодным для назначения глобальным. Реализации стандартного трейта для таких типов появились автоматически.
Зачем нужен маркер
Прямое преобразование любого аллокатора в глобальный невозможно: если бы оно существовало, то использование глобального аллокатора как аллокатора привело бы к бесконечной рекурсии — он обращался бы к самому себе.
Отсюда требование: глобальным аллокатором может быть только тот, кто явно подтвердил, что этого не будет. Маркерный трейт — это и есть подтверждение.
Что это даёт
Аллокатор, написанный по новому трейту, становится пригодным для назначения глобальным без реализации второго интерфейса. То есть переход с устаревающего интерфейса на новый не требует дублировать код.
Направление движения тут важнее отдельной возможности: новый трейт аллокаторов готовится к стабилизации, и это один из шагов, чтобы переход не стал ломающим изменением.
Оригинал
allow Allocators to be used as #[global_allocator]s
Упоминаний: 1 · Просмотров: 2