有些语言,比如 Haskell,不区分值传递和引用传递。然后,编译器可以通过启发式方法大致选择最有效的调用约定。一个启发式示例是针对 Linux x64 ABI 的:如果参数的大小大于 16 字节,则传递一个指向堆栈的指针,否则传递寄存器中的值。
在 Rust 中同时保留按值传递和按引用传递(当然是不可变的)概念并强制用户选择有什么好处?
如果看到值被修改,传值会不会是传引用+复制的语法糖?
最佳答案
两件事:
- Rust 会根据类似的启发式将某些按值传递调用转换为按引用传递。
- 按值传递表示所有权转移,而按引用传递表示借用。这些与您所询问的 asm 级问题非常不同,并且完全正交。
换句话说,在 Rust 中,这两种形式具有不同的语义。不过,这并不排除也进行优化。
关于rust - 为什么 Rust 同时具有按值调用和按引用调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36562262/