Rubyにおける変数の扱い

Rubyの変数は全てがオブジェクトであり、全ての代入は参照渡し、Pythonも同様。
Javaの場合はプリミティブ型(int,float,boolean等)は値渡し、それ以外は参照渡し。
JavascriptJavaと同じ、C#Javaと同じだったはず。
(厳密にいうと、RubyJava等の参照渡しは変数のアドレス(場所)を値渡し
していることを指す(参考)が、便宜上、参照渡しと表現されている。)


どちらの場合も言語仕様で規定されていて、プログラマが参照渡しか
値渡しかを選択することはできない。


C言語C++では参照渡しor値渡しにするかの選択はプログラマ
委ねられている。


著名なスクリプト言語で参照渡しor値渡しにするかをプログラマ
委ねているのはPerl(〜5)くらいではないだろうか?
Perl(〜5)の場合、その初期にC言語の仕様の影響を大きく受けているため
このような仕様になっていて、なおかつ、言語仕様の抜本的な変更
がなされてこなかったので、そのままになっている。


Perl(〜5)の場合、値渡し・参照渡しをきっちり意識してプログラミング
しないとパフォーマンスが出ない。
Perlをメインの開発言語にしているところではライブラリやフレームワーク
カプセル化して、値渡し・参照渡しをそれほど意識しなくても
大丈夫な状態にしている模様。