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

Можно ли спроецировать Arc как это делают с пинами? я

хочу что-то такое:
struct A(i32, u32);
let a = Arc::new(A(0, 5));
let b: Arc<i32> = a.project().0;

12 ответов

22 просмотра

Очевидно нет.

Dmytro-Polunin Автор вопроса
Max Силинг
Очевидно нет.

почему очевидно?

Dmytro Polunin
почему очевидно?

Задумайся, как Arc устроен в памяти. Это одна аллокация, которая выглядит так: счётчик | данные В твоём случае счётчик | i32 | u32 Если ты таким образом получишь u32, то слева от него будет не счётчик, а i32

Dmytro-Polunin Автор вопроса

у нас же в памяти это лежит как |arc-data|i32|u32| то есть я могу в теории инкрементнуть arc-data но при этом разрешать по указателю ходить только в i32

Dmytro Polunin
у нас же в памяти это лежит как |arc-data|i32|u32|...

Это бы хоть как-то работало для «левого» в памяти поля, если бы ты знал, какое из них левое. Но ты не знаешь.

Max Силинг
Это бы хоть как-то работало для «левого» в памяти ...

Следующая проблема у тебя возникнет на дропе. Если ты последним дропаешь вот такой вот «частичный» Arc, то он попытается дропнуть 12 байт вместо 16 и хоба UB.

Max Силинг
Следующая проблема у тебя возникнет на дропе. Если...

Не очевидно, что мешает двум разным сущностям иметь один контрольный блок

Alexander Karaev
Не очевидно, что мешает двум разным сущностям имет...

Ты дропнул последний Arc, тебе нужно деаллоцировать память. Сколько памяти ты деаллоцируешь?

Dmytro-Polunin Автор вопроса
Max Силинг
Следующая проблема у тебя возникнет на дропе. Если...

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4335d55ae7a977be3ff884454c982a9b

Dmytro Polunin
https://play.rust-lang.org/?version=stable&mode=de...

я бы просто таскал с собой замыкание и всё, зеро кост же 😜

Max Силинг
Тут не зеро.

Можно ArcProject параметризовать типом замыкания. Должно оптимизироваться

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

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

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