C++のObject Slicingとオブジェクト指向言語の引数の評価戦略の話
- hotwatermorning
- 5750
- 0
- 0
- 1
x += a は x = x + a と解釈できるけど、 x++ を x = x + 1 と解釈するのは、空中から1が降ってくるからダメとか、そういう理由で?
2015-02-07 18:31:01@mandel59 C++でいうリファレンス型という概念が好きではないので。特に動的型言語と相性が悪いと思います
2015-02-07 18:33:34型を出来るだけ明記したくないから動的型付け言語してるのに値渡しか参照かを区別する為に型を書いてたら意味ないもんな。こういう言語では代入の挙動を参照のコピーにして、値のコピーのために特別な関数を用意することが多い
2015-02-07 18:42:02C++のリファレンス型は筋が悪いけど、リファレンスって概念は僕は好きです。まあポインターとかリファレンスとか、ゴチャゴチャしてるせいで嫌われがちなのは分かる
2015-02-07 18:43:25Rubyにはリファレンスとかいう概念がない代わりにシンボルがあるから、リファレンスがなくてもシンボルで代替できるってのがある。僕はシンボルで代替するのは欠点があると思いますけど
2015-02-07 18:46:02だからPerl、Python、Rubyといった言語がC++のように「何も言わなかったら値渡し」しないのは理解できる。だが Java おまえは理解不能だ
2015-02-07 18:46:56@yukihiro_matz 「C++でいうリファレンス型」は筋が悪いとは思いますけど、リファレンスという概念そのものが、動的型言語と相性が悪いということはないと思います。
2015-02-07 18:51:03@fadis_ 僕は全然逆の印象で、オブジェクト指向言語では、オブジェクトの値渡しには切り裂きコピー問題があるので、許さないのが自然であり、C++ が異端だと思ってたりします。まあ C++ は今や(昔から?)マルチパラダイム言語ですが…
2015-02-07 19:07:04リファレンス型って概念がなくて、そもそも全部の値がオブジェクトへのリファレンスなわけだけど、Rubyの場合はオブジェクトのメソッドがオブジェクトでないから、メソッドへのリファレンスが取れない。ただ、オブジェクトとシンボルのペアを、メソッドへのリファレンスとかんがえることができる。
2015-02-07 19:08:37@fadis_ Java はオブジェクト指向言語として生まれましたから、オブジェクトの値渡しは許さない(オブジェクトではない int とかなら OK)というのは自然ですし、Lisp に始まるがガベージコレクタつき高級言語の伝統に沿った言語という印象が。
2015-02-07 19:12:11