Безопасность — важная часть дизайна Rust и его стандартной библиотеки. Большое внимание уделяется безопасности памяти, но Rust также пытается помочь предотвратить распространенные ошибки, заставляя вас принимать решения, где данные могут быть потеряны или где ваша программа может выйти из строя.
Хорошим примером этого является использование типа Option
вместо null
. Если вам дали Option<T>
, теперь вы вынуждены решать, что с ним делать. Вы можете решить использовать unwrap
и запаниковать, или вы можете использовать unwrap_or
, чтобы обеспечить разумное значение по умолчанию. Ваше решение, но вы должны его принять.
Чтобы преобразовать f64
в u8
, вы можете использовать оператор as
. Это не происходит автоматически, потому что Rust не может решить за вас, что вы хотите сделать в случае, когда число слишком велико или слишком мало. Или, может быть, вы хотите что-то сделать с лишней десятичной частью? Вы хотите округлить его вверх или вниз или до ближайшего целого числа?
Даже оператор as
рассматривается некоторыми[1] как ранняя ошибка проектирования, поскольку вы можете легко непреднамеренно потерять данные, особенно когда ваш код развивается с течением времени, а типы менее заметны. из-за вывода типа.
[1] https://github.com/rust-lang/rfcs/issues/2784#issuecomment-543180066<2864295675333
Я могу сразу подумать о двух вещах. 1) потеря данных 2) переполнение (
let f = 256.78f32
). Rust хочет, чтобы вы прямо говорили о таких вещах. Без сюрпризов.Я понимаю, но не могли бы вы указать мне на какое-то обсуждение этого решения или где оно было принято (может быть, RFC или что-то в этом роде)
Вероятно, будет трудно найти официальное обсуждение этого дизайнерского решения, так как оно было принято на очень раннем этапе разработки.