Size: a a a

2020 December 26

K

Kitsu in Rust Beginners
ну и баунд вряд ли получится нацепить
источник

K

Kitsu in Rust Beginners
Александр Караев
Я сомневаюсь, что компилятор по ограничениям на размер поймёт, что конструкция { Self } валидна
можно заменить на unsafe { std::mem::transmute(()) }
источник

АК

Александр Караев... in Rust Beginners
Kitsu
можно заменить на unsafe { std::mem::transmute(()) }
Интересный способ
источник

DF

Dollar Føølish in Rust Beginners
Хороший хак
источник

K

Kitsu in Rust Beginners
Правда кажется есть одна проблема, у юнит типов можно указывать align и тогда это формально будет убшечка
источник

АК

Александр Караев... in Rust Beginners
Хорошо. Допустим, я заменю юнит-типы на пустые структуры. Соответственно, мне нужно доказать компилятору, что они могут быть созданы через Self{}. Это реально?
источник

K

Kitsu in Rust Beginners
Kitsu
можно заменить на unsafe { std::mem::transmute(()) }
все же кажется лучше mem::zeroed() использовать
источник

TK

Traveller Kolsky in Rust Beginners
Нереально
источник

TK

Traveller Kolsky in Rust Beginners
Конст дженерики пока ещё не настолько продвинутые, даже в найтли
источник

K

Kitsu in Rust Beginners
Александр Караев
Хорошо. Допустим, я заменю юнит-типы на пустые структуры. Соответственно, мне нужно доказать компилятору, что они могут быть созданы через Self{}. Это реально?
Через баунды я не знаю как, но просто через функцию да, через const_assertions
источник

АК

Александр Караев... in Rust Beginners
Kitsu
Через баунды я не знаю как, но просто через функцию да, через const_assertions
Ассерты мне не нужны.. Мне просто нужно внутри дженерика по <T> вызвать T{}. Для этого надо навесить какой-то баунд на T, но я хз, какой
источник

K

Kitsu in Rust Beginners
Александр Караев
Ассерты мне не нужны.. Мне просто нужно внутри дженерика по <T> вызвать T{}. Для этого надо навесить какой-то баунд на T, но я хз, какой
конст ассерты == ассерты в компайл тайме
https://docs.rs/static_assertions/1.1.0/static_assertions/
источник

АК

Александр Караев... in Rust Beginners
Я знаю. Но прописывание ассерта никак не поможет компилятору разрешить мне конструкцию T{}. Это просто доп. защита, но не решение проблемы. Или я ошибаюсь?
источник

K

Kitsu in Rust Beginners
вообще кажется через трейт баунды тоже должно получится, сейчас попробую накидать
источник

K

Kitsu in Rust Beginners
Александр Караев
Я знаю. Но прописывание ассерта никак не поможет компилятору разрешить мне конструкцию T{}. Это просто доп. защита, но не решение проблемы. Или я ошибаюсь?
а, именно T{} не выйдет сделать конечно
источник

TK

Traveller Kolsky in Rust Beginners
Александр Караев
Я знаю. Но прописывание ассерта никак не поможет компилятору разрешить мне конструкцию T{}. Это просто доп. защита, но не решение проблемы. Или я ошибаюсь?
Такую конструкцию нельзя получить точно, unsafe-способами позволит лишь гарантировать безопасность
источник

TK

Traveller Kolsky in Rust Beginners
И то ассерт для size_of::<T>() не работает
источник

TK

Traveller Kolsky in Rust Beginners
Функция просто не компилируется
источник

АК

Александр Караев... in Rust Beginners
Ладно, пойдём дальше.
Есть баунды, которые позволят проверить наличие T::new() с определенной сигнатурой?
источник

TK

Traveller Kolsky in Rust Beginners
new не определён для всех ZST, да даже default
источник