タグ

ブックマーク / moriyoshi.hatenablog.com (6)

  • 言語の GC 機能と参照カウント (後編-1) - moriyoshiの日記

    追記: 最後の図の「C」の参照カウントが 1 ではなく 2 になっていたのを修正 次回は cycle collector の実装と、回避方法について書く予定。 言語の GC 機能と参照カウント (中編) と 2008 年の 5 月 31 日に書き残して早 1 年と 2 ヶ月を迎えようとする中の後編です。 Cycle collector の実装方法について Bacon らによる「Concurrent Cycle Collection in Reference Counted Systems」という論文が有名と思われる。この論文では、まず同期的な cycle collector の実装の改善について述べ、さらにそれを非同期的な方式へ拡張する方法について述べている。今回は、最初の同期的な方法のアルゴリズムについてのみ見ていく。 基的には mark and sweep 論文には以下のような説明と

    言語の GC 機能と参照カウント (後編-1) - moriyoshiの日記
    f99aq
    f99aq 2009/10/04
  • 印刷して電車の中で読める (かもしれない) TCP ECHO サーバのソースコード (1) - moriyoshiの日記

    アーキテクチャに関する質問として、「○○の仕組みってどうなってるの」というようなことを聞かれても、説明下手なせいか、なかなか口で説明できないことがある。そこで「UTSL (ソース読めばいいよ)」と言いたいんだけど、かといって実際に、これを読むといいんじゃないかな、という話にもしづらい。入門的なコードはあまりにも単純すぎて退屈だし、かといって何か適当な著名なプロダクトのソースも、おおよそ手軽に読めるという感じではない。 さて、前エントリで epoll(7) やら select(2) やらの内部の説明をしたわけだけど、呼び出し側がどうなっているのかという部分のイメージがつかめなければ、片手落ち、というか意味不明だろうというように思ったので、恥をしのんで、簡単なシングルスレッドのイベントループベースの (twisted っぽい) TCP ECHO サーバを書いてみた。 電車の中でも読めるというコ

    印刷して電車の中で読める (かもしれない) TCP ECHO サーバのソースコード (1) - moriyoshiの日記
  • Autorelease poolを見栄えよく使うマクロ - moriyoshiの日記

    Objective-C + C99限定なんだけど #define pool for (NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; pool; [pool drain], pool = 0) とかって定義しておくと void foo() { pool { NSObject *obj = [[MyObject alloc] init]; [obj autorelease]; } } のような書き方ができることに気づいた。 や、実はすでに似たようなマクロがどこかに定義されてたりして。

    Autorelease poolを見栄えよく使うマクロ - moriyoshiの日記
  • Perlの正規表現のバグ? (前編) - moriyoshiの日記

    「鬼車の[[:print:]]はPOSIX流じゃないらしい」でid:ockeghemさんやid:nihenさんと先週いろいろやりとりしてた中で、一つだけ解決していない問題があった。 utf8フラグが立っているかどうかでPOSIX文字クラスのマッチの挙動が変わるという件。 大変詳しい調査をありがとうございます。トラックバックのブログに書いたように、[:print:]の挙動は、Perlでもutf8フラグの有無でも変わってくるようです。[:print:]は実用できないなと思いました え?まじ?と思うも、一応Perlのコード例も出していたので検証しないわけにはいかない。以下のようなコードで試してみたが、utf8フラグが立っていない場合と同じ結果となり、再現しないのだ。 use encoding 'utf8'; for (split //, "\t\r\n a") { printf("%d:%d:%

    Perlの正規表現のバグ? (前編) - moriyoshiの日記
    f99aq
    f99aq 2009/06/07
    "use re 'Debug', 'COMPILE';"
  • 言語の GC 機能と参照カウント (中編) - moriyoshiの日記

    前編でブクマコメントや日記コメントで どうしたら循環参照によるリークを回避できるのかを説明してほしい PHP 5.3 で cycle collector が搭載されることについてのフォローが欲しい という意見があったので、それも順次取り上げていくことにする。 当はこれを後編としたかったんだけど、どんどん詰め込みたい内容が増えているので、勝手ながら一旦切って中編、後編の 2 立てとさせてもらおう。 SpiderMonkey と XPCOM のガーベジコレクション さて、cycle collector というと Firefox 3 から搭載されるということで気になっている人も多いと思われるので、まずは SpiderMonkey (JavaScript の Mozilla での実装) ではどのような GC (ガーベジコレクション) が行われるのかを見てみたい。 基的に、SpiderMonk

    言語の GC 機能と参照カウント (中編) - moriyoshiの日記
  • 言語のGC機能と参照カウント (前編) - moriyoshiの日記

    たまにはちゃんと書いたほうがいいかなと思って書いてみる。 あらまし 原始的な参照カウントベースのガーベジコレクションは、循環参照が発生すると、その参照に含まれるオブジェクトを回収できないという厄介な問題を抱えている。循環参照とは、1つ以上のオブジェクトが環状の参照関係を形成している状態のことで、このような参照を持つオブジェクトは、やがてルート (ある時点で言語ランタイムが管理しているすべてのスコープと考えてもいい) から辿りつけなくなって、解放されずにリークしてしまう。 この問題はいろんな LL 言語に見られる。 Perl の場合 use Devel::Peek qw(Dump); sub make_circular { my $foo = {}; my $bar = {}; my $baz = {}; $foo->{'bar'} = $bar; $bar->{'baz'} = $baz;

    言語のGC機能と参照カウント (前編) - moriyoshiの日記
    f99aq
    f99aq 2008/06/15
    挿し絵がおもしろ
  • 1