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

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

闇の軍団レベルからすると、いまだに何そんな大昔の話してるのって劇オコになるのも分かるけど。

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

ぜんっぜん話が通じてない。というか話を聞く気がないんだろうか。ムカ着火ファイヤーレベルに怒りがアップしたぞ。

2015-02-08 01:43:45
SODA Noriyuki @n_soda

@AoiMoe ガーン。たぶん僕なんか誤解してるんですねえ。何を誤解してるのかもよく分かってないなあ。

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

@AoiMoe object slicing の話を出すんじゃなくて、identity で話を説明せよって話なのかしら。でも僕はこの2つって結局同じことだと思うんですよ。identity が保たれてるなら、そもそも slicing なんて起きないのは自明なわけで。

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

ちゃんとした値渡しなら、slicingは起きないけどidentityも保たれない状態になるので、この二つは同一じゃないでしょうに。C++のobject slicingをことさらに持ち出すための詭弁と取られても仕方が無い

2015-02-08 01:53:36
SODA Noriyuki @n_soda

@AoiMoe slicingの問題を避けることができるケースでも、identity が問題になることはある(逆はまあない)ので、identity の方が本質的だという点には異論ないです。でも最初のツッコミでidentityから話を始めのるは話が文学的になりすぎて難しいっすよお。

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

@n_soda とはいってもそれはやっぱり癇に障るんですよ

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

@AoiMoe なるほど。申し訳なかったです。

2015-02-08 01:56:16
SODA Noriyuki @n_soda

ARM和訳373頁で、object slicingのことを切り裂きコピーと表現してるのを確認した。良かった、僕の勝手な造語じゃなかった(ぉ。 ARMはCPUの名前じゃなく、この本のことね→ amazon.co.jp/dp/4901280392 もう大概古い本なので若者が知らないのは当然か

2015-02-08 02:36:21
AoiMoe a.k.aしお兄P @AoiMoe

@n_soda slicingがクソだというのは事実だし、その周知が十分かという話はもちろんあるんですけど、一方では「正しい対処法を身につけるべき実装上のピットフォール」以上でも以下でもないので、引数セマンティックを論じる時に持ち出しても正しい理解には繋がらないと思うのです

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

@AoiMoe 確かに、なぜ安全にコピーできる言語であっても、参照の値渡しをする方が、コピーよりも主流なのかとか、object slicingでは説明できませんね。

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

にしても名著とされてた本で使われていた言葉づかいなのに、「切り裂きコピー」でググった結果があれだけというのは解せぬ。1992年発売だからWebの黎明期で記録に残りにくいだけろうけど、2001年にも再版されてたのになあ。 なお当方の調査では当時「マミる」という用法はなかった模様(ぉ

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

@n_soda identityの問題というよりは、単に効率上の理由でコピーを避けてる言語が多いような気はしますね。で、最近はそれだとスレッドでスケールしないので逆にどんどんコピーするようになってきたと。

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

結局は効率ですべてが決まるのかもしれない

2015-02-08 02:52:32
SODA Noriyuki @n_soda

@AoiMoe 昔はコピーよりもポインタ渡した方が速かったですからねえ。今だとシングルスレッドであっても、小さいオブジェクトならコピーの方がメモリアクセスのローカリティの関係で速いですが。

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

「ランタイムでは一切の型情報を持たないので、オブジェクトのサイズも持たない」という徹底したCの言語仕様上の割り切りのせいで割を食うC++さんホント不憫

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

@AoiMoe そしてC++には「使わない機能にはオーバーヘッドを生じさせない」という原則があるので、わざわざクラスのサイズを追加したりもしない、といったあたりの機微よ

2015-02-08 03:01:26
SODA Noriyuki @n_soda

1992年発売だと、当時生まれた赤ちゃんがもう大学卒業して社会人になってるのかあ。泣けるのう。 ちなみに「プログラミング言語C++」の初版をパラパラめくった限りだと、object slicingへの言及はなかった感じ。

2015-02-08 03:03:23
前へ 1 ・・ 8 9