使用box关键字和Box :: new有什么区别?

DeB*_*eBe 14 heap rust

是否box只是语法糖还是可以应用到地方使用的情况下Box::new是不够的?我读到某个box不稳定的地方,这是否意味着我只能将它与夜间Rust版本一起使用?

DK.*_*DK. 39

Box::new只是一个函数,就像任何其他函数一样.它在任何方面都不是特别的.这是一种肮脏的,闻起来非常接近过期的奶酪.

box是神奇的,构成了小精灵和小孩子的梦想.它穿着最好,最时髦的衣服,带着淡淡的松木香气.

执行时Box::new(e),因为它是一个函数,e必须它可以启动调用之前进行完全评估和构造.如果这意味着在堆栈上分配和填充500kB结构,那么它必须在堆栈上分配并填充500kB结构,然后将其传递给Box::new,只有这样才能在堆上分配空间(可能会失败),并且然后将500kB复制到堆中.

当你执行时box e,因为它在炎热的夏天如同凉爽的微风一样美妙,编译器可以重新排序,使其首先在堆上分配500kB,然后直接在堆上填充500kB结构.然后就完成了.没有额外的复制,没有咀嚼堆栈空间.如果"在堆上分配"的东西无法解决问题,就不会浪费精力.

box是生命,box是爱; 所有的冰雹box!

(是的,在写作时,它仍然不稳定,这意味着你需要一个夜间编译器来晒太阳.但很快,黎明将会到来.得到它?黎明?夜间?......我会展示自己...... .)

  • `box`将通过推理支持除'Box`以外的其他内容(*例如*`Rc`,`Arc`,*etc.*).`<-`是*placement*的当前临时语法,它是相关的,但不同:`box`创建一个新的位置来放置一个值,然后将它放在那里,`< - `在*existing*中放置一个值放置(例如,在矢量的末尾). (2认同)
  • 我喜欢这个答案的每一部分 - 我也学到了一些东西. (2认同)