LINUX.ORG.RU

В Rust за 10 лет не сделали аллокаторов?

 


1

7

Это какой-то позор.

Через 5 лет после выхода версии 1.0 до сих пор нет поддержки локальных аллокаторов. Ужас…

Надеюсь аллокаторы в Rust появятся до того как дропнут поддержку Windows 7 и Mac OS 10.7: https://github.com/rust-lang/release-team/issues/2

Единственно, что обнадёживает, что Rust пишут не фанатики с лора, а программисты. В частности TimDiekmann, который пилит https://github.com/rust-lang/wg-allocators написал что вдохновлялся вот этим видео: https://www.youtube.com/watch?v=LIb3L4vKZ7U и the Phobos Standard Library of the D Programming Language. Это даёт хоть какую-то надежду что будет сделано норм…

★★★★★
Ответ на: комментарий от faq2

В Rust пока можно лишь переопределить глобальный аллокатор: https://doc.rust-lang.org/std/alloc/trait.GlobalAlloc.html

То есть ты можешь узнать из какого ядра сделан этот вызов, и на основании этого выделить память своим малоком.

Вот какой-то тип пытался делать NUMA-aware allocator:

https://github.com/bastion-rs/numanji

Но там всего 8 коммитов, я хз насколько он работоспособен.

fsb4000 ★★★★★
() автор топика
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от fsb4000

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

faq2
()
Ответ на: комментарий от fsb4000

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

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

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

anonymous
()
Ответ на: комментарий от faq2

Понятно, ну надеюсь reentrant интерфейсы подвезут

Не работал с NUMA, но глобальный аллокатор обязан быть thread-safe.

Так что тебе или тому кто реализовал методы у трейта GlobalAlloc

unsafe fn alloc(&self, _layout: Layout) -> *mut u8;
unsafe fn dealloc(&self, _ptr: *mut u8, _layout: Layout);

нужно делать их со спин-локами/мютексами…

Но когда сделают локальные аллокаторы, всё будет гораздо лучше.

Кстати, вот тут тоже спрашивают про NUMA: https://github.com/rust-lang/wg-allocators/issues/29

fsb4000 ★★★★★
() автор топика
Ответ на: комментарий от fsb4000

Разница между реинтрант и тредсейф аллокатором будет примерно следующая:

маллок как ни крути должен быть тредсейф, но вот выбор конкретного маллок и его параметров в зависимости от заданного параметра хотелось бы иметь реинтрант, дабы не вводить лишнюю битву за ресурсы на пустом месте, т.к. в точке где ты знаешь тип объекта ты и так знаешь способ которым хотел бы его в данном случае выделить, тратить время на вычисления тут такое себе удовольствие тебе надо получить буфер и разместить там объект. Конечно это всё можно обыграть через TLS, но работа с ним чуть но дороже чем со стеком напрямую, да и напоминает использование глобальных переменных для хранения состояния ПО. Хотя может в нынешние времена это совсем экономия на спичках.

faq2
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.