为什么Rust既有值调用又有引用调用?

Łuk*_*Lew 3 calling-convention rust

有些语言,如Haskell,不区分传值和传递引用.然后,编译器可以使用启发式近似地选择最有效的调用约定.一个启发式示例是针对Linux x64 ABI:如果参数的大小大于16个字节,则将指针传递给堆栈,否则传递寄存器中的值.

在Rust中同时保留传值和传递引用(当然不可变)的概念有什么好处,并迫使用户选择?

可能是这样的情况,如果看到值被修改,那么pass-by-value是pass-by-reference + copy的语法糖?

Ste*_*nik 9

两件事情:

  1. Rust会根据类似的启发式将某些按值传递调用转换为按引用传递.
  2. 按值传递表示所有权转移,而按引用传递表示借入.这些是非常不同的,与你所询问的asm级关注完全正交.

换句话说,在Rust中,这两种形式具有不同的语义.但这并不妨碍进行优化.