Pull to refresh

Comments 5

Битовые поля ни в одном языке не сделаны идеально (и это если учесть что они в основной массе языков не сделаны вообще). В Си еще более-менее (хотя и там есть недостатки), в Rust по сути предлагается откат на более низкий уровень - типа сами пишите код для выполнения всех операций с битами. И это только единичные биты, а если нужны битовые типы данных, к примеру беззнаковое число длиной 3 бита, расположенное по строго определенному битовому смещению в слове?

Проблему, экзотической арифметики, лучше оставить на уровне библиотек. Включение всех возможностей в стандартную библиотеку языка — это всегда компромисс между функциональностью и популярностью. Раздутый foundation может замедлить развитие других приоритетных частей.

Ну, из практики, нужен не только repr(С).

Для сетевых протоколов, где, например, 32 битное что-то может следовать в стык сразу после 8битного - без выравнивания. Тут без packed не обойтись - ни в С ни в Rust. Так что вот еще вам в копилку #[repr(packed)]

и реально еще и repr(align(n)) тоже может потребоваться там где выравнивания нужны для производительности, чтобы элементы структуры, в которых, например атомики, или длинные целые были в разных элементах кеша процессора.

да и в биты можно паковать через repr(u*)/repr(i*) , да и вроде где-то RFC на честные bitfields как в сишке был, правда не знаю какой у неё статус.

Битовые поля в Rust

Кажется, название статьи некорректно: про битовые поля (в понимании С - элементы данных, размером не кратные байту), тут ничего нет.
Правильнее было бы назвать "Битовые операции в Rust".

Sign up to leave a comment.