ハスケルのようないくつかの言語は、値渡しと参照渡しを区別しません。コンパイラはヒューリスティックでもっとも効率的な呼び出し規約を選択することができます。ヒューリスティックの例は、Linux x64 ABIの場合です。パラメータのサイズが16バイトを超える場合は、ポインタをスタックに渡します。それ以外の場合は、レジスタに値を渡します。なぜRustは値で呼び出しを行い、参照によって呼び出しますか?
値渡しと参照渡しの両方の考え方(勿論変更不可)を錆に保ち、ユーザーに選択させてもらうことの利点は何ですか?
値が変更されたと見なされると、参照渡し+コピーの構文砂糖が値渡しの場合がありますか?
私は2に同意します。しかし、これは型チェックレベルのようですので、タイプチェックの後で - コード生成が同一であることができますか? –
@ŁukaszLew:はい、それは*別の問題であるかどうかは完全にわかります:) –