Ответы на Каковы различия между `String` и` str` в Rust? описывает, как &str
и String
связаны друг с другом.
Что удивительно, так это то, чтоstr
более ограничен, чем массив фиксированного размера, потому что он не может быть объявлен как локальная переменная.Скомпилировав
let arr_owned = [0u8; 32];
let arr_slice = &arr_owned;
let str_slice = "apple";
let str_owned = *str_slice;
в Rust 1.32.0, я получаю
error[E0277]: the size for values of type `str` cannot be known at compilation time
--> src/lib.rs:6:9
, что сбивает с толку, потому что размер "apple"
может быть известен компилятору, он просто не является частьютипа str
.
Существует ли лингвистическая причина асимметрии между типами Vec<T>
<-> [T; N]
и String
<-> str
?Может ли тип str[N]
, который был бы сокращен до [u8; N]
, который содержит только достоверно допустимые строки в кодировке UTF-8, заменить str
без прерывания большого количества существующего кода?