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

Добрый день. Я хочу сделать Итератор вокруг BTreeMap по мутабельным значениям

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

Для этих целей Итератор должен одновременно владеть как RangeMut объектом, так и мутабельной ссылкой на исходный BTreeMap, что невозможно. По этой причине я решил хранить raw pointer на RangeMut для целей пересоздания RangeMut объекта.

Вот прототип имплементации: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=afbf07c393477d66c7c94b345e1aa90b

Прокомментируйте, пожалуйста, моё решение на предмет безопасности.

9 ответов

18 просмотров

ну смотри самое простое.. *mut может быть null, а может и нет, раст это проверяет при обращении по нему, и может это свернуть, а может и нет.. не даром придумали NonNull далее.. определять порядок дропа в целом по идее и не нужно, так как не особо думаю важно убивать первее bar или baz ведь он указатель, но как опционально в таких случаях ManuallyDrop (два, с нужным порядком в общем drop) далее... всеже проставь вручную лайфтаймы особенно на iter.. я не прослеживал что за лайфтайм там раст выведет но навсякий.. далее. ты используешь указатели, хотя могбы и ссылки(вариант очень вычурнее, но по итогу без массового unsafe) просто при условии что ты приведешь ее к лайфтайму на new и далеедалее... глянул бегло, могу что-то и забыть..

Ilya-Lakhin Автор вопроса
Денис Котляров
ну смотри самое простое.. *mut может быть null, а...

Спасибо за подробный комментарий. 1) Foo не владеет баром, он владеет мутабельной ссылок на внешний объект. Поэтому проблемы с дропом здесь не должно возникать, как я понимаю. 2) Лайфтаймы у меня вроде все проставлены. 3) Если это можно на обычных ссылках сделать, как именно?

Ilya Lakhin
Спасибо за подробный комментарий. 1) Foo не владе...

а NonNull им и не владеет. внутри NonNull тотже *const а создается NonNull от *mut.

Ilya-Lakhin Автор вопроса
Денис Котляров
а NonNull им и не владеет. внутри NonNull тотже *c...

Я, честно говоря, вообще не понял, зачем мне NonNull?

Ilya Lakhin
Я, честно говоря, вообще не понял, зачем мне NonNu...

затем что ты сделал из & который не является null то что может являтся null а это *const/*mut тоесть ты на типах потерял эту особенность и сделал так что любая разыменовка *const/*mut ведет к дополнительным проверкам + у тебя во втором поле option, а оно там надо? судя по iter оно там не надо)

Денис Котляров
ну смотри самое простое.. *mut может быть null, а...

Не проверяет, просто Option<raw ptr> будет больше по размеру, чем Option<NonNull>

разве там нет оптимизации, когда ptr.is_null(), то Option<ptr> == None ?

Ned Ogl
разве там нет оптимизации, когда ptr.is_null(), то...

Нет, в нём нет ниши, равной 0, Option<ptr> семантически как Option<Option<NonNull>>

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта