@mo вот о чем я и говорю. Мне кажется что это костыль.
14 comments
..можно реализовать стандартную либу, чтобы людям меньше приходилось их использовать :р @a1ba ну Си убить будет проблематично.................... @elwld ну, там нет классов, как в плюсах, нет их наследования |
@elwld но тогда раст бы не был системным языком :blobcatshrug:
Потому что для некоторых системных вещей *нужно* написать небезопасный код, который компилятор не сможет проверить. Поэтому придумали unsafe-подмножество. Оно должно быть специально огорожено (либо unsafe{} блоками либо вся функция unsafe), и позволяет строго определенный набор действий:
- разыменовать сырой указатель. Раст их не проверяет, на то они и сырые
- вызвать другую функцию, помеченную unsafe
- изменить static mut (глобальную переменную)
- реализовать unsafe-типаж. Обычно это типажи-метки Send (переменную этого типа можно переместить в другой поток) и Sync (переменную можно разделять между потоками). В обоих случаях компилятор не может проверить корректность, но и ставить такие метки от балды нельзя
- получить доступ к полям union (поля могут быть разного типа, а значение у них одно, и не факт что оно корректно ляжет). Юнионы в расте к слову используются только для FFI с Сишкой
Ну а имея на руках сырые указатели..
@elwld но тогда раст бы не был системным языком :blobcatshrug:
Потому что для некоторых системных вещей *нужно* написать небезопасный код, который компилятор не сможет проверить. Поэтому придумали unsafe-подмножество. Оно должно быть специально огорожено (либо unsafe{} блоками либо вся функция unsafe), и позволяет строго определенный набор действий:
- разыменовать сырой указатель. Раст их не проверяет, на то они и сырые
- вызвать другую функцию, помеченную unsafe
- изменить static mut (глобальную переменную)