循環参照とバイナリ境界

3
めるぽん.c @melponn

そういえば循環参照するのは設計が悪いっていうのはよく聞くけど、なぜ悪いのかってのをまともに解説してるサイトってあまり見ないような気がする・・・自明すぎて書く必要も無い?

2010-07-20 22:52:33
めるぽん.c @melponn

あまり見ないっていうか、自分は悪い理由を説明しろって言われてもまともに説明できる気がしないから、自分は一度も見たことが無いのでしょう。

2010-07-20 22:54:48
若年寄(もう若くない) @kikairoya

循環参照→寿命管理ができてない→設計が悪い、だと勝手に思ってるんだけど [宮崎産を食べよう]

2010-07-20 22:55:37
でちまるさん(実際かわいい) @decimalbloat

循環参照しているクラスには責任の所在がはっきりしないことが多いんじゃないかとは思いますね。

2010-07-20 22:56:46
若年寄(もう若くない) @kikairoya

でも循環参照だから即設計が悪いが必ず真になるとは限らなくて、グラフ構造とか必然的に循環参照になるんじゃね?的なのはある [宮崎産を食べよう]

2010-07-20 22:56:51
くっくっkura 🇯🇵🦀 @PG_kura

循環参照が悪だとか拒絶反応する人です。はい。一体何が悪いのか理解に苦しむ。

2010-07-20 22:58:06
でちまるさん(実際かわいい) @decimalbloat

確か循環参照のあるような設計については、Large-Scale C++ Software Designに詳しくあったはず…

2010-07-20 22:58:29
若年寄(もう若くない) @kikairoya

というか循環参照とかすると自分で混乱するから可能な限り避けます [宮崎産を食べよう]

2010-07-20 22:58:38
くっくっkura 🇯🇵🦀 @PG_kura

まぁ C++ で避けたくなるのは GC がないという都合上分からなくはないけれども。

2010-07-20 22:59:45
でちまるさん(実際かわいい) @decimalbloat

循環させるぐらいなら間に一個クラスを作って、そいつにその絡まってる部分を押しこむとかするなー

2010-07-20 23:00:01
Akira Takahashi @cpp_akira

もう7年くらいC++使ってるけど、循環参照なんて一度も起きたことない [プログラミングの魔導書 予約受付中 http://j.mp/bXZ6IN ]

2010-07-20 23:02:07
めるぽん.c @melponn

unique_ptr と move semantics さえあれば shared_ptr や intrusive_ptr が無くても生きていける気がする

2010-07-20 23:03:56
野良猫@がんばらない @mskwt

循環参照など存在しないっ!と、強仮定できたら GC 書くのがすごく楽になりそうです。。

2010-07-20 23:04:44
Akira Takahashi @cpp_akira

今回のプロジェクトはshared_ptrも使ってないなぁ。スマポっぽいものといえば、Boost.Optionalくらい。 [プログラミングの魔導書 予約受付中 http://j.mp/bXZ6IN ]

2010-07-20 23:05:42
若年寄(もう若くない) @kikairoya

@melponn unique_ptrじゃバイナリ境界越えられなくね [宮崎産を食べよう]

2010-07-20 23:06:31
めるぽん.c @melponn

@kikairoya あー、まあそのときは何か考えないといけないですね

2010-07-20 23:07:49
Akso de la Malbono @Cryolite

@melponn unique_ptr -> shared_ptr -> (unique_ptr が越えられないバイナリの壁) -> shared_ptr -> unique_ptr

2010-07-20 23:09:06
Akso de la Malbono @Cryolite

(physical な level での) 循環参照のもろさは要するに modularity じゃね? たとえば testability 考えると A <-> B な状態では A と B 双方に対する test が通って初めて A, B の test とも通ったことになる.

2010-07-20 23:10:59
めるぽん.c @melponn

@Cryolite なるほど、普段は unique_ptr を使っておいて、バイナリ境界があるところは shared_ptr でやりとりして unique_ptr に戻すような関数を作って使えと・・・

2010-07-20 23:12:25
野良猫@がんばらない @mskwt

A <-> B' (mock), B <-> A' (mock), A => A', B => B' から A <-> B じゃだめ?

2010-07-20 23:12:35
Akso de la Malbono @Cryolite

A <- B という acyclic な依存関係なら, A の test は独立して実行可能であり, A の test の成立の上にさらに独立して B の test を成否を問うことができる.

2010-07-20 23:13:21
Akso de la Malbono @Cryolite

@melponn unique_ptr に限らず,サードパティ製のものも含めて,おおよそスマートポインタと呼べるものならだいたいこのやり方でバイナリを壁を越えられますよ,多分,知らんけど.

2010-07-20 23:14:50
若年寄(もう若くない) @kikairoya

shared_ptrでバイナリ境界越えられても、例外が… [宮崎産を食べよう]

2010-07-20 23:16:11
Akso de la Malbono @Cryolite

ん? ちょっと待って.良く考えないと.

2010-07-20 23:19:46