C++のObject Slicingとオブジェクト指向言語の引数の評価戦略の話

TLで流れていた、オブジェクト指向での引数の云々の話をまとめました。 分量があるので、抜けているところがあったらお知らせください。
2
前へ 1 ・・ 7 8 次へ
SODA Noriyuki @n_soda

@kay68060 @AoiMoe ラムダ式とか入りましたしねえ>Java。計算機アーキテクチャ的には、そこそこ大きなオブジェクトでも、ポインタ渡しするんじゃなくてコピーした方が高速だっていう方向に…(副作用のない関数型スタイルだとコピーしようがしまいが関係ないのでOKですが)

2015-02-08 00:44:15
AoiMoe a.k.aしお兄P @AoiMoe

オブジェクト is 何、という問題もあって、C++のクラスインスタンスは必ずしもオブジェクトじゃないぞ。

2015-02-08 00:45:29
AoiMoe a.k.aしお兄P @AoiMoe

むしろ、complex形みたいな、値渡しセマンティックとするのが自然なクラスのほうが、C++のクラスでは普通なんじゃないか

2015-02-08 00:47:02
SODA Noriyuki @n_soda

@AoiMoe 計算機アーキテクチャ的にも、値コピーの方が性能出るようになるというトレンドですね

2015-02-08 00:48:24
吉田 恵介 @kay68060

@n_soda @AoiMoe 並列やら分散を考えると、性能以外でもコピーしたほうが有利ってこともあるでしょうねぇ。

2015-02-08 00:50:08
AoiMoe a.k.aしお兄P @AoiMoe

オブジェクトというのが「自身のステートを持った自律的な何か」という意味であれば、それは確かに参照渡しされるのが自然だが、「そういうのも作れる」が「それだけでもない」のがC++のクラス

2015-02-08 00:51:00
吉田 恵介 @kay68060

@AoiMoe オブジェクト指向である必要が無いわけですな。オブジェクト指向的にも書けるだけで、、、、、

2015-02-08 00:52:39
Tetsuo Sakaguchi @tsaka1

ところで、風呂はいってて気づいたんだが、構造体の代入ってC言語ではいつからOkになったのかがイマイチ覚えてない。昔はbcopyを使うのが常識だったのは覚えているんだけど。。ANSIの前に代入が可能になっていたのなら、ANSIの選択はそれに準じたってことなんだろうけど?

2015-02-08 00:52:47
SODA Noriyuki @n_soda

@AoiMoe そういう話ですね。で、最初の twitter.com/n_soda/status/… だと、Javaが仲間外れというよりは、C++が他の言語と変わってるって感じがしてるんですよ(でもPerlも変だけど)

2015-02-08 00:58:07
SODA Noriyuki @n_soda

@fadis_ 僕は全然逆の印象で、オブジェクト指向言語では、オブジェクトの値渡しには切り裂きコピー問題があるので、許さないのが自然であり、C++ が異端だと思ってたりします。まあ C++ は今や(昔から?)マルチパラダイム言語ですが…

2015-02-07 19:07:04
AoiMoe a.k.aしお兄P @AoiMoe

@n_soda いずれにしても何でC++が巻き込まれてんだか分からないんですけどね!

2015-02-08 00:59:40
AoiMoe a.k.aしお兄P @AoiMoe

@n_soda って読み間違えたすみません

2015-02-08 01:00:55
SODA Noriyuki @n_soda

@AoiMoe いえいえ。なんか最終的に割と面白い話に発展してたような

2015-02-08 01:02:30
AoiMoe a.k.aしお兄P @AoiMoe

@n_soda JavaにもComplexクラスみたいなのがあるので、そっちを考えたら値渡しが自然だし、まあ必ずしも「自身のステートを持った自律的な何か」をみんなが想定してるわけじゃないってことじゃないですかね

2015-02-08 01:02:44
SODA Noriyuki @n_soda

@AoiMoe 副作用を排する(→だからコピーしてもOK)、コピーした方が速くなるってのが、時代の傾向としてあると思います。僕、オブジェクト指向よりは関数型の方が好きなんですよ。ただ、「オブジェクト指向言語として考えたときに普通なのはどちら」という話はまたちょっと別だと思ってて。

2015-02-08 01:07:19
AoiMoe a.k.aしお兄P @AoiMoe

@n_soda C++はオブジェクト指向言語じゃなくてマルチパラダイム言語なので(若干歴史修正的)

2015-02-08 01:08:51
AoiMoe a.k.aしお兄P @AoiMoe

Javaの話に関しては、やっぱりintとIntegerが本質的な気もするんだなあ。なんで(概念的に)オブジェクトじゃないもんが値渡しされてないんだよ、という

2015-02-08 01:10:15
AoiMoe a.k.aしお兄P @AoiMoe

「オブジェクト指向言語的には」というパースペクティブで論じることに意味がないような気もする。

2015-02-08 01:13:08
SODA Noriyuki @n_soda

@AoiMoe 今は本当にそうですね>マルチパラダイム言語。最初のツイート twitter.com/n_soda/status/… で「まあ今やマルチパラダイム言語ですが…」と断ったのも、こういう意識からだったりするんですが、あのツイートだけじゃ、通じませんねえ。

2015-02-08 01:13:09
AoiMoe a.k.aしお兄P @AoiMoe

@n_soda 当初からそういう側面があるので、それを無視してオブジェクト指向言語という側面で普通かどうかと論じることに、たいした意味があるようにも見えないんですよ

2015-02-08 01:14:34
AoiMoe a.k.aしお兄P @AoiMoe

ビョーンの本の初版から、complexクラスみたいな例が出ている以上、オブジェクトならざるクラスの存在も想定されているし、そういうのは値渡しが自然である以上、そこに「オブジェクト指向言語として」みたいなパースペクティブは無意味

2015-02-08 01:18:52
AoiMoe a.k.aしお兄P @AoiMoe

Javaにもそういうクラスは実在するし、そういうのがもれなく参照渡しされるのはどうなのかね、というのはあってしかるべきな見方じゃなかろうか

2015-02-08 01:19:42
SODA Noriyuki @n_soda

@AoiMoe そこに議論があるのは承知をしています。なので、そういう断り書きを最初に入れたわけですね。まあ引数渡し==参照の値渡しは、関数型言語でも主流ですので、言語の主流という点では同じ結論かも。(本当に副作用のない書き方をしていればどっちでもいい筈ですが)

2015-02-08 01:20:10
AoiMoe a.k.aしお兄P @AoiMoe

まあいずれにしてもマミる問題は全然関係ないじゃないか。

2015-02-08 01:24:42
AoiMoe a.k.aしお兄P @AoiMoe

何度も言ってるように、(参照渡しが自然かどうかは置いといて)「値渡しを許さないのが自然」という話の根拠として「オブジェクトの値渡しには切り裂きコピー問題がある」という話を持ち出してるのが私の一番の激おこポイントなので

2015-02-08 01:31:44
SODA Noriyuki @n_soda

まあでも、イマドキのC++ coding styleがちゃんと広まりきってるわけでもないし、object slicingなんて誰にとっても聞き飽きた話になるくらい啓蒙が必要な段階にいまだあると思う。

2015-02-08 01:40:35
前へ 1 ・・ 7 8 次へ