Является ли box
просто синтаксическим сахаром или может применяться для случаев, когда Box::new
недостаточно? Я где-то читал, что box
нестабилен, означает ли это, что я могу использовать его только в ночных версиях Rust?
В чем разница между использованием ключевого слова box и Box:: new?
Ответ 1
Box::new
- это просто функция, как и любая другая функция. Это не является чем-то особенным. Он грязный и слабо пахнет сыром с очень близким сроком годности.
box
- это волшебство и составило изначальные пикси и мечты маленьких детей. Он одет в самую прекрасную, шикарную одежду и несет с собой слабый аромат свежесрезанной сосны.
Когда вы выполняете Box::new(e)
, потому что это функция, e
должен быть полностью оценен и сконструирован, прежде чем он сможет начать вызов. Если это означает выделение и заполнение структуры 500kB в стеке, тогда он должен выделить и заполнить структуру 500kB в стеке, а затем передать это на Box::new
, который только тогда может выделить пространство в куче (что может быть неудачно), а затем скопируйте 500kB в кучу.
Когда вы выполняете box e
, потому что это замечательно, как прохладный ветерок в жаркий летний день, компилятор может изменить порядок вещей, так что он начинается с выделения 500 КБ в куче и затем заполнения структуры 500 КБ непосредственно на куча. И затем это сделано. Никакое дополнительное копирование, отсутствие жевания через пространство стека. Не тратьте впустую усилий, если это "распределить на кучу" не получится.
box
- жизнь, box
- любовь; все град box
!
(И да, с момента написания, это все еще нестабильно, что означает, что вам нужен ночной компилятор, чтобы погреться в его сиянии. Но скоро наступит рассвет. Получите это? Рассвет? Ночь?... Я покажу себя вне...)