yarv-dev:659
From: SASADA Koichi <ko1 atdot.net>
Date: Wed, 05 Oct 2005 17:28:07 +0900
Subject: [yarv-dev:659] more ID management
ささだです.
ID は,現在は Ruby 処理系ソース中で適当に rb_intern("hoge") みたいにし
て作っていますが,ソース中で必要になることがわかっているものは,事前にま
とめておきませんか.
static ID hoge_id = rb_intern("hoge");
を,
id.h:
--------------------
enum id_index{
...,
id_index_hoge,
...,
};
char *const_id_table{
...,
"hoge",
...,
};
#define rb_intern_const(id) ((ID)index_##id)
#define rb_id2name_const(id) (const_id_table[index_##id])
--------------------
#include "id.h"
...
ID id_hoge = rb_intern_const(hoge);
...
printf("%s\n", rb_id2name_const(hoge));
// rb_intern() は gperf 使えばいいかな,とか.
たとえばこんな感じに.
色んなところで同じ ID を作っているのは無駄じゃないかな,と思ったもので.
もう一つの理由は,たとえば複数 VM がそれぞれ別々の ID の表を作る,とい
う実装をしようと思ったときに static に ID を持たれると大変,というのがあ
ります(ただ,拡張ライブラリは救えませんが).
--
// SASADA Koichi at atdot dot net
//
--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml