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

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

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

12 ответов

8 просмотров

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

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 параметризовать типом замыкания. Должно оптимизироваться

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

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

Комрады, посоветуйте, куда копать? Стал прикручивать кастомизацию тем. В OnShow главной главной формы пытаюсь загрузить из файла настроек и применить тему (на скрине, как долж...
Ed Doc
13
OnShow один раз вызывается? или возможен Hide?
Iluha Companets
14
Такс, блин, таки кто-то знает, каким образом работают макросы stdin/stdout/stderr? Я влез в stdio.h, там определения нет, отладил через асмокод - вызывается функция со странны...
The Bird of Hermes
18
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Всем привет, на линуксе лучше на fasm или nasm учиться писать для начала ?
meszjol
14
Если у меня есть такой класс: Object = {} function Object:new(a_name, a_transform, a_color, a_mesh, a_material, a_shader, a_textures) local private = {} private.n...
Cuarno Vile
4
Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
2
@sand_witch скорее к тебе вопрос, добавил в .cabal webdriver-w3c и вот такая ошибка от nix develop error: Package ‘script-monad-0.0.4’ in /nix/store/7vdxbra0kwbr0ys0kc5...
Fedor
5
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
Карта сайта