Togetter/min.tを安心してお使い頂くためのガイドラインを公開しました。
編集可能

Meixnargc

GC
8
普通のC++使い、銀天すばる @SubaruG

blog読んだ限り興味あるインターフェースのGCだにゃ。チェックチェック。

2010-10-26 16:08:51
普通のC++使い、銀天すばる @SubaruG

GC を名乗るからには has_trivial_destructor<gc_ptr<A>>::value は当然 true なんだろーにゃ?

2010-10-26 16:10:37
普通のC++使い、銀天すばる @SubaruG

GC があると何がうれしいって、そりゃ flyweight でしょうよ。

2010-10-26 16:12:00
普通のC++使い、銀天すばる @SubaruG

さて、空腹も紛れたことだし、 MeixnerGC を試しに触ってみようかにゃ。

2010-10-26 16:53:59
普通のC++使い、銀天すばる @SubaruG

ふむ。ソースコードを流し読みした感じ、僕がC++のGCに求めるものとはだいぶ違う感じだにゃ。

2010-10-26 17:02:17
普通のC++使い、銀天すばる @SubaruG

C++のGCとして必要なのは、なにより速さ。デストラクタで何か処理をするようじゃ、速さは望めないね。

2010-10-26 17:04:20
鯉江 @koie

分かりやすくお願いします RT @subarug: C++のGCとして必要なのは、なにより速さ。デストラクタで何か処理をするようじゃ、速さは望めないね。

2010-10-26 17:07:44
普通のC++使い、銀天すばる @SubaruG

@koie デストラクタが存在すると、コンパイラさんは最適化をしにくくなるのです。例えば末尾関数呼び出しの最適化はデストラクタを持ったオブジェクトが一つでもあれば機能しない。

2010-10-26 17:09:26
普通のC++使い、銀天すばる @SubaruG

@koie 僕がGCを使いたいのは、リソースの解放がそこまで迅速でなくていいオブジェクト(例えば、典型的には flyweight とか)に対して、可能な限りリソースの解放に伴なう処理(デストラクタ中で行うような処理はみんなそれ)を遅延して、快適に動作させたい、というものなので

2010-10-26 17:11:15
普通のC++使い、銀天すばる @SubaruG

@koie デストラクタ中でなにかゴニョるようなクラスは、GC用のポインタとしては不向きで、それならば shared_ptr を使えばいいかなぁ、と思った次第。

2010-10-26 17:12:04
普通のC++使い、銀天すばる @SubaruG

GCポインタを名乗るなら、せめてビットごとのコピーは問題なく行えるようにして欲しいよね。

2010-10-26 17:13:32
普通のC++使い、銀天すばる @SubaruG

っていうか shared_ptr より優秀なGCは、ことC++においてはかなり難しい気がするの。

2010-10-26 17:18:15
普通のC++使い、銀天すばる @SubaruG

遅延解放は shared_ptr<void> のリストを使えば可能だし?

2010-10-26 17:18:36
鯉江 @koie

@subarug 頻繁に参照数が変化する用途で性能が出るやつ、ってことですね。dtorがあると最適化が、というのはもうあっちこちにdtorがあるのでもうどうしようもないという気がしてますがどうでしょうか。

2010-10-26 17:20:10
普通のC++使い、銀天すばる @SubaruG

MeixnerGC を -Wall -Wextra でコンパイルすると Warining がうざい件。

2010-10-26 18:19:32
普通のC++使い、銀天すばる @SubaruG

ん、ちゃんと循環参照も扱えるね。 MeixnerGC。

2010-10-26 18:42:22
普通のC++使い、銀天すばる @SubaruG

循環参照がどうしても起こり得るような状況(例:インタプリタ言語の実装)では普通に有用なんじゃないかな。 MeixnerGC 。

2010-10-26 18:45:40
普通のC++使い、銀天すばる @SubaruG

まぁでもパフォーマンス考えたら、独自設計のフルカスタムのGCの方がいいに決まってるけど。

2010-10-26 18:46:39
普通のC++使い、銀天すばる @SubaruG

手軽に手に入るC++と相性のいい非侵入的なインクリメンタルGCとしては割と便利に使えそうな感じ。C++erが日常的に本格的に使うのは無理っぽいけど。

2010-10-26 18:49:08
普通のC++使い、銀天すばる @SubaruG

C++er が日常的に使うGCは、 C++0x 待ちですね。

2010-10-26 18:49:52
普通のC++使い、銀天すばる @SubaruG

gc_ptr -> shared_ptr への変換も( deleter 使えば)普通におっけーだし、あとは普通のスマポとしてのインターフェイスが欲しいところですにゃ。

2010-10-26 19:12:55
普通のC++使い、銀天すばる @SubaruG

んー…どういう仕組みで循環参照を解決してるんだろう。

2010-10-26 19:20:57
普通のC++使い、銀天すばる @SubaruG

オブジェクトの中身を走査してるのかな? コードを調べる。

2010-10-26 19:21:49
Akira Takahashi @cpp_akira

@SubaruG @SubaruG Mark and Sweepは前に道化師さんが書いてたので参考までに。 http://d.hatena.ne.jp/wraith13/20090912/1252762617

2010-10-26 19:24:22
普通のC++使い、銀天すばる @SubaruG

@cpp_akira リンク感謝です。が、スタック上かどうかを判別する方法がないはずなんですよねC++では。

2010-10-26 19:26:37
残りを読む(71)

コメント

コメントがまだありません。感想を最初に伝えてみませんか?