2015-09-01から1ヶ月間の記事一覧

freebsd rb.h insert を読んでみよう

前に赤黒木に挿入するときは赤が2つ来るのを防ぐように調節すると書きました。 それがfreebsdのmallocではどのように実装されているのかを見てみましょう。 freebsdは9.3です。rb.hは/usr/src/lib/libc/stdlib内にありますね。 a_attr void \ a_prefix##ins…

mruby khash.h の UPPER_BOUNDとは何でしょうか?

#defineUPPER_BOUND(x) ( (x) >> 2 | (x) >> 1) とあります。さらに下の方で #define khash_upper_bound(h) (UPPER_BOUND( (h)->n_buckets) 何かのbucketの数 ( n_)の上限ということでしょうか。 if (h->n_occupied >= khash_upper_bound(h)) { \ kh_resize_…

gtags で ruby のコードを解析できるように pygments を使おう。

gtagsでrubyのコードが解析できれば良いなと思い調べてみました。 pygmentsが良いらしいです。 ではexuberant-ctagsとpygmentsをインストールします。 次にubuntuのglobalは古いようなのでまずはaptitude purge globalをダウンロードしてconfigure make inst…

mruby parse.y scan_hexを読んでみよう

static int32_tscan_hex(const int *start, int len, int *retlen) scan_hex名前の通り十六進数の数字を渡したらintを返してくるのでしょう。 まずローカル変数を準備します。 static const char hexdigit[] = "0123456789abcdef0123456789ABCDEF"; const in…

mruby gc.c のis_deadとは何でしょうか

#define is_dead(s, o) (((o)->color & other_white_part(s) & MRB_GC_WHITES) || (o)->tt == MRB_TT_FREE) object.hで定義されています。 まずはother_white_partが何かを見てみましょう。 #define other_white_part(s) ((s)->current_white_part ^ MRB_GC_…