Rubyにおける変数の扱い
Rubyの変数は全てがオブジェクトであり、全ての代入は参照渡し、Pythonも同様。
Javaの場合はプリミティブ型(int,float,boolean等)は値渡し、それ以外は参照渡し。
JavascriptはJavaと同じ、C#もJavaと同じだったはず。
(厳密にいうと、RubyやJava等の参照渡しは変数のアドレス(場所)を値渡し
していることを指す(参考)が、便宜上、参照渡しと表現されている。)
どちらの場合も言語仕様で規定されていて、プログラマが参照渡しか
値渡しかを選択することはできない。
C言語やC++では参照渡しor値渡しにするかの選択はプログラマに
委ねられている。
著名なスクリプト言語で参照渡しor値渡しにするかをプログラマに
委ねているのはPerl(〜5)くらいではないだろうか?
Perl(〜5)の場合、その初期にC言語の仕様の影響を大きく受けているため
このような仕様になっていて、なおかつ、言語仕様の抜本的な変更
がなされてこなかったので、そのままになっている。
Perl(〜5)の場合、値渡し・参照渡しをきっちり意識してプログラミング
しないとパフォーマンスが出ない。
Perlをメインの開発言語にしているところではライブラリやフレームワーク
でカプセル化して、値渡し・参照渡しをそれほど意識しなくても
大丈夫な状態にしている模様。