172 похожих чатов

Всем хи, мальчики ❤️ Написал я значит такой код: use bumpalo::{boxed::Box, Bump}; #[derive(Debug)] enum

List<'a, T> {
Empty,
More(T, &'a List<'a, T>),
}

fn make_list<'l>(bump: &'l Bump) -> List<'l, Box<'l, HeapAllocString>> {
let empty = List::Empty;
let l0 = List::More(
Box::new_in(HeapAllocString::new("lol"), bump),
bump.alloc(empty),
);

let l1 = List::More(
Box::new_in(HeapAllocString::new("kek"), bump),
bump.alloc(l0),
);

let l2 = List::More(
Box::new_in(HeapAllocString::new("foo"), bump),
bump.alloc(l1),
);

l2
}

#[derive(Debug)]
struct HeapAllocString(String);

impl HeapAllocString {
fn new(s: &str) -> Self {
Self(String::from(s))
}
}

impl Drop for HeapAllocString {
fn drop(&mut self) {
println!("free the memory ({}) :klass:", &self.0);
}
}

fn main() {
let bump = Bump::new();
let ls = make_list(&bump);
println!("{ls:?}");
}

Хочу написать список, при этом чтобы был женеричный по T и при этом чтобы опционально я мог аллоцировать в нём объекты в куче. Впринципе, всё классно работает, так я могу выделить Box и отдельно на него взять ссылку и сконструировать свой список.
Но вот проблема, такую структуру в расте не вернуть из функции (как минимум нужны самореферентные типы). Поэтому я подумал, ладно, что если я передам в функцию аллокатор?
fn make_list<'l>(bump: &'l Bump) -> List<'l, Box<'l, HeapAllocString>> {/***/}

Работает по такому принципу и я могу возвращать список из функции. Но, так как я использую Bump аллокатор, у него проблема, что он не вызывает Drop для типов. Для этого нужно использовать бумапочный Box. Ну вот я его заюзал и..
More(HeapAllocString("foo"), More(HeapAllocString("kek"), More(HeapAllocString("lol"), Empty)))
free the memory (foo) :klass:

После запуска этого кода я вижу, что только самый верхнеуровнеый Box был дропнут. То есть вложенные Box списка он не дропает.
Так вот, я задумался, а есть ли подобный аллокатор, но чтобы как-то трекал отдельно типы, что нужно дропать?

8 ответов

7 просмотров

Храни в enum List сразу Box<T>

Nano- Автор вопроса
mental stability🥺✨
Храни в enum List сразу Box<T>

В том и задача, я хочу опционально боксить

Nano- Автор вопроса
mental stability🥺✨
И как ты это представляешь?

Выделять память в другом месте и делать список из ссылок

Nano- Автор вопроса
Timur Tugushev
Ну тогда можно сделать энам

Ну да... Но, это рантайм. Хотелось бы на типах чисто

Nano
Ну да... Но, это рантайм. Хотелось бы на типах чис...

Frunk есть с его hlist-ами Очень похоже на тот велосипед с empty и more

Выкинь каку

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
I just installed it but how do I use it?
Talula
12
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Good afternoon, I just started learning php in conjunction with mysql. I am registering a system on a local Mamp server using phpMyAdmin. It seems to be stored normally in the...
ManGo
1
я не про это. какая еще есть инфа, или может появиться, что ее можно обозначить названием данной игры? зачем плодить хештеги, которые обозначают одну сущность? в данном случ...
Aiwan \ (•◡•) / _bot
5
Карта сайта