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

Ещё такой вопрос: делаю сложную структуру данных, где ссылки на

значения-структуры дублируются в нескольких хэшмапах, есть возможность реализовать это без оверхэда Rc+RefCell? Наверное только через unsafe?

6 ответов

13 просмотров

Селфреф в целом сложный, без ансейфа и понимания нормально не делается

AivanF- Автор вопроса
Пух
Селфреф в целом сложный, без ансейфа и понимания н...

Я переписываю крупный проект с Си, там эта же структура у нас покрыта тестами и стабильно работала годами, так что в целом понимание есть :) Вопрос лишь как такое идеологически правильнее на Расте делать, если ансейф норм для такого, то окей

А где эти структуры лежат?

AivanF- Автор вопроса
Alexander Ruliov
А где эти структуры лежат?

Вопрос по устройство? Обычные динамически аллоцированные структуры, указатели на которые лежат в нескольких вложенных хэштаблицах для индексации, и в соответствии с бизнес-логикой эти структуры меняются, индексы поддерживаются в валидном состоянии. Нечто вроде собственной БД для специфических задач

AivanF
Вопрос по устройство? Обычные динамически аллоциро...

Обычно два пути для таких штук: если абсолютно уверены, что структурки лежат в Box'ах и никогда из них не вылазят и есть гарантии, что не освободится раньше времени, и нет многопоточности где нет гарантий одновременных изменений, то указатели, unsafe и погнали. Если же не паримся по поводу лишних дерефов и хотим без unsafe, то завести рядом с этими хешмапами арену (просто вектор плюс стек свободных индексов в нём) и вместо указателей использовать индексы в этом векторе. Профита оно не сильно даст, если логика плохая — то придётся паниковать, если вдруг не найдём элемента где он должен быть, но уже не сегфолтить. Ну и если есть &mut на эту ерундовину, то и RefCell не будет нужен. Оверхед получится возможно из-за Option (который по памяти можно потерять вроде, если структура "хорошая" и компилятор найдёт где там положить признак None), проверках на None, ну и походов через Vec (лишнее разыменовывание). Ничего сильно страшного в unsafe нет, если понятно что делаем, есть тесты и можем в голове уместить всё что может происходить)

AivanF- Автор вопроса
Alexander Ruliov
Обычно два пути для таких штук: если абсолютно уве...

Спасибо за инфу! Не слышал про паттерн арены, но на самом деле в Сишной реализации как раз используем подобный подход, но не для вспомогательных структур, коих много, их наверное в unsafe и уберём

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта