C++のObject Slicingとオブジェクト指向言語の引数の評価戦略の話
- hotwatermorning
- 5759
- 0
- 0
- 1
@kay68060 @AoiMoe ラムダ式とか入りましたしねえ>Java。計算機アーキテクチャ的には、そこそこ大きなオブジェクトでも、ポインタ渡しするんじゃなくてコピーした方が高速だっていう方向に…(副作用のない関数型スタイルだとコピーしようがしまいが関係ないのでOKですが)
2015-02-08 00:44:15むしろ、complex形みたいな、値渡しセマンティックとするのが自然なクラスのほうが、C++のクラスでは普通なんじゃないか
2015-02-08 00:47:02オブジェクトというのが「自身のステートを持った自律的な何か」という意味であれば、それは確かに参照渡しされるのが自然だが、「そういうのも作れる」が「それだけでもない」のがC++のクラス
2015-02-08 00:51:00ところで、風呂はいってて気づいたんだが、構造体の代入ってC言語ではいつからOkになったのかがイマイチ覚えてない。昔はbcopyを使うのが常識だったのは覚えているんだけど。。ANSIの前に代入が可能になっていたのなら、ANSIの選択はそれに準じたってことなんだろうけど?
2015-02-08 00:52:47@AoiMoe そういう話ですね。で、最初の twitter.com/n_soda/status/… だと、Javaが仲間外れというよりは、C++が他の言語と変わってるって感じがしてるんですよ(でもPerlも変だけど)
2015-02-08 00:58:07@fadis_ 僕は全然逆の印象で、オブジェクト指向言語では、オブジェクトの値渡しには切り裂きコピー問題があるので、許さないのが自然であり、C++ が異端だと思ってたりします。まあ C++ は今や(昔から?)マルチパラダイム言語ですが…
2015-02-07 19:07:04@n_soda JavaにもComplexクラスみたいなのがあるので、そっちを考えたら値渡しが自然だし、まあ必ずしも「自身のステートを持った自律的な何か」をみんなが想定してるわけじゃないってことじゃないですかね
2015-02-08 01:02:44@AoiMoe 副作用を排する(→だからコピーしてもOK)、コピーした方が速くなるってのが、時代の傾向としてあると思います。僕、オブジェクト指向よりは関数型の方が好きなんですよ。ただ、「オブジェクト指向言語として考えたときに普通なのはどちら」という話はまたちょっと別だと思ってて。
2015-02-08 01:07:19Javaの話に関しては、やっぱりintとIntegerが本質的な気もするんだなあ。なんで(概念的に)オブジェクトじゃないもんが値渡しされてないんだよ、という
2015-02-08 01:10:15@AoiMoe 今は本当にそうですね>マルチパラダイム言語。最初のツイート twitter.com/n_soda/status/… で「まあ今やマルチパラダイム言語ですが…」と断ったのも、こういう意識からだったりするんですが、あのツイートだけじゃ、通じませんねえ。
2015-02-08 01:13:09@n_soda 当初からそういう側面があるので、それを無視してオブジェクト指向言語という側面で普通かどうかと論じることに、たいした意味があるようにも見えないんですよ
2015-02-08 01:14:34ビョーンの本の初版から、complexクラスみたいな例が出ている以上、オブジェクトならざるクラスの存在も想定されているし、そういうのは値渡しが自然である以上、そこに「オブジェクト指向言語として」みたいなパースペクティブは無意味
2015-02-08 01:18:52Javaにもそういうクラスは実在するし、そういうのがもれなく参照渡しされるのはどうなのかね、というのはあってしかるべきな見方じゃなかろうか
2015-02-08 01:19:42@AoiMoe そこに議論があるのは承知をしています。なので、そういう断り書きを最初に入れたわけですね。まあ引数渡し==参照の値渡しは、関数型言語でも主流ですので、言語の主流という点では同じ結論かも。(本当に副作用のない書き方をしていればどっちでもいい筈ですが)
2015-02-08 01:20:10何度も言ってるように、(参照渡しが自然かどうかは置いといて)「値渡しを許さないのが自然」という話の根拠として「オブジェクトの値渡しには切り裂きコピー問題がある」という話を持ち出してるのが私の一番の激おこポイントなので
2015-02-08 01:31:44まあでも、イマドキのC++ coding styleがちゃんと広まりきってるわけでもないし、object slicingなんて誰にとっても聞き飽きた話になるくらい啓蒙が必要な段階にいまだあると思う。
2015-02-08 01:40:35