2008-04-01から1ヶ月間の記事一覧

スーパーマリオブラザーズにReplay機能をつける

authorNariさんのスーパーマリオブラザース(http://d.hatena.ne.jp/authorNari/20080422/1208880928)すごいですね。Rubyを知っている人はソースをぜひ読んでみてください。美しい!シンプル!スーパーマリオってこんなにシンプルに記述できるんだ!って思い…

jemallocを読んでみる(その8)

今日のまとめ tree.hはjemallocとは独立したライブラリです。ちょっと癖がありますが(それはCのせいでtree.hのせいじゃないのですが)、なかなか便利そうです。追記 調べてみたら*BSDには標準で(/usr/include/sysに)tree.hは入っているみたいです。*BSD恐るべ…

jemallocを読んでみる(その7)

今日のまとめ プログラムを極限まで高速化するには、入力データや使い方にあわせて柔軟に使用するデータ構造を調整する必要がありますが、jemallocのtree.hにはそのための方策が示されています。でも、恐ろしく保守性は低そうです。 本題 tree.hを読んでみる…

jemallocを読んでみる(その6)

今日のまとめ jemallocではmix-inみたいな事をCでやっています 本題 今回はstruct arena_chunk_sのうち、赤黒木を実現する部分を見てみます。struct arena_chunk_sは、その5(http://d.hatena.ne.jp/miura1729/20080407/1207556671)で説明した、struct arena_…

ナベアツ問題の改良

BCDカウンタをif文無しで実現するようにしました。 #!/bin/env ruby j = 0 (1..1000).each do |i| a = j | 0x666666666 a &= (a >> 1) a &= (a >> 2) a &= 0x11111111 a |= (a << 1) a |= (a << 2) a = ~a a |= (a << 4) a |= (a << 8) a |= (a << 16) a = ~…

ナベアツ問題これは難しい・・・

ナベアツ問題なるものが、紹介されていました。http://q.hatena.ne.jp/1207585413これを文字列化もせず、桁に分割したりせず、第3の方法がないかなと思って試しています。 BCD(http://ja.wikipedia.org/wiki/%E4%BA%8C%E9%80%B2%E5%8C%96%E5%8D%81%E9%80%B2%…

jemallocを読んでみる(その5)

図を描く作業をしていてjemallocのアリーナの構造を全部一度に見せることは不可能と思いましたので、1つづつ構造体を説明していくことにします。今日は一番上に来るarena_tです。 typedef struct arena_s arena_t; arena_tは実際にはstruct arena_sという構…

jemallocを読んでみる(その4)

注意! 今日は、jemallocのコードは全然出てきません。しかも、大部分は過去mixiで書いた日記の焼き直しです。 本題 arena_lockbalance_hardを解説しようと読み進めました。すると、この関数を解説するにはアリーナの構造を説明する必要があることに気づきま…

jemallocを読んでみる(その3)

時間がない人はここだけ読んでください、あとはどうでもいいです。 今日はロックを掛けるところを見てみます。jemallocはロックを掛けながらアリーナの競合状態をプロファイリングするという巧妙なことをしています。常識なのかもしれないですが、私は感動し…

これは宝の山だ

Ruby Foolsで発表されたスライドが早速公開されていますね。 http://jaoo.dk/ruby-cph/schedule/tuesday.jspRubinusのスライドを見てみたのですが、GCに関してあなたのやりたいことはこれでしょ?と言われているみたいでした。Rubinusでは保守的・世代別のGC…

Design Compiler for Ruby

Design Compiler(http://ja.wikipedia.org/wiki/Design_Compiler)の入力言語にRubyが加わるらしいです。Rubyのプログラムがチップになるんだけどevalを使うと10億トランジスタ使っちゃうらしいです。