Нет.
Руст ничего от вас не скрывает.
Если вы напишите, что возвращаете String
, вы вернете String
, ни больше, ни меньше , String
как есть, это простая переменная стека, которая будет просто скопирована туда, где она должна быть.
Вы правы относительно необходимости распределенных данных.
Это деталь реализации. Чтобы понять, где происходит распределение, мы должны посмотреть, что на самом деле является String
.
В зависимости от того, как вы на это смотрите, может быть неудивительно, что оно выделяется внутри, и по этой конкретной причине c, Vec
используется, поскольку он абстрагирует распределение необработанных данных.
Это буквальное определение String
:
pub struct String {
vec: Vec<u8>,
}
Когда вы создаете новый String
, как вы можно видеть, что Box
.
Vec
не создано, а Vec
отвечает за распределение и освобождение данных.
String
, с другой стороны, отвечает за абстрагирование необработанных данных в то, что мы понимаем под типичной строкой.