C++のObject Slicingとオブジェクト指向言語の引数の評価戦略の話
- hotwatermorning
- 5749
- 0
- 0
- 1
@AoiMoe object slicing の話を出すんじゃなくて、identity で話を説明せよって話なのかしら。でも僕はこの2つって結局同じことだと思うんですよ。identity が保たれてるなら、そもそも slicing なんて起きないのは自明なわけで。
2015-02-08 01:46:42ちゃんとした値渡しなら、slicingは起きないけどidentityも保たれない状態になるので、この二つは同一じゃないでしょうに。C++のobject slicingをことさらに持ち出すための詭弁と取られても仕方が無い
2015-02-08 01:53:36@AoiMoe slicingの問題を避けることができるケースでも、identity が問題になることはある(逆はまあない)ので、identity の方が本質的だという点には異論ないです。でも最初のツッコミでidentityから話を始めのるは話が文学的になりすぎて難しいっすよお。
2015-02-08 01:54:39ARM和訳373頁で、object slicingのことを切り裂きコピーと表現してるのを確認した。良かった、僕の勝手な造語じゃなかった(ぉ。 ARMはCPUの名前じゃなく、この本のことね→ amazon.co.jp/dp/4901280392 もう大概古い本なので若者が知らないのは当然か
2015-02-08 02:36:21@n_soda slicingがクソだというのは事実だし、その周知が十分かという話はもちろんあるんですけど、一方では「正しい対処法を身につけるべき実装上のピットフォール」以上でも以下でもないので、引数セマンティックを論じる時に持ち出しても正しい理解には繋がらないと思うのです
2015-02-08 02:38:47@AoiMoe 確かに、なぜ安全にコピーできる言語であっても、参照の値渡しをする方が、コピーよりも主流なのかとか、object slicingでは説明できませんね。
2015-02-08 02:42:42にしても名著とされてた本で使われていた言葉づかいなのに、「切り裂きコピー」でググった結果があれだけというのは解せぬ。1992年発売だからWebの黎明期で記録に残りにくいだけろうけど、2001年にも再版されてたのになあ。 なお当方の調査では当時「マミる」という用法はなかった模様(ぉ
2015-02-08 02:50:37@n_soda identityの問題というよりは、単に効率上の理由でコピーを避けてる言語が多いような気はしますね。で、最近はそれだとスレッドでスケールしないので逆にどんどんコピーするようになってきたと。
2015-02-08 02:50:54@AoiMoe 昔はコピーよりもポインタ渡した方が速かったですからねえ。今だとシングルスレッドであっても、小さいオブジェクトならコピーの方がメモリアクセスのローカリティの関係で速いですが。
2015-02-08 02:53:40「ランタイムでは一切の型情報を持たないので、オブジェクトのサイズも持たない」という徹底したCの言語仕様上の割り切りのせいで割を食うC++さんホント不憫
2015-02-08 02:59:46@AoiMoe そしてC++には「使わない機能にはオーバーヘッドを生じさせない」という原則があるので、わざわざクラスのサイズを追加したりもしない、といったあたりの機微よ
2015-02-08 03:01:261992年発売だと、当時生まれた赤ちゃんがもう大学卒業して社会人になってるのかあ。泣けるのう。 ちなみに「プログラミング言語C++」の初版をパラパラめくった限りだと、object slicingへの言及はなかった感じ。
2015-02-08 03:03:23