Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2006-04-17

[Ruby]ひさびさに拡張ライブラリの作り方を確認

http://www.namikilab.tuat.ac.jp/~sasada/prog/rb5.html あたりを見る。

__

こんなのどうだろう。

require 'c_eval'

#def test n
#  n.times{}
#end 
c_eval("
  VALUE test(int n){
    volatile int i;
    for(i=0;i<(FIX2INT(n));i++){
    }
    return Qnil;
  }
")

test 0x3ffffff

(c_eval って名前は置いとくとして) c_eval が与えられたコードをコンパイル(前回コンパイルした結果がないまたはコードが変化してれば)して require をする。拡張ライブラリはほとんど書いたことがないんだけど、こうして書けるとある局面では便利だったりするのかなあと思ったもので。

__

最近 Rails のせいで頭がメタメタ。

__

上のc_eval、同名のメソッドは起動後一回しかevalできない気がしてたけど、そんなことないんだよなあ。コードが変化してたらコンパイルしてrequireだから。

最近徐々にメタプログラミングがわかってきたので、これまでの考え方が崩壊しつつあります(なんか前にもそんなことあった気がするけど。脱皮かな)。そっかあ、みんなのRubyはこういうものだったんだね。なんかいろいろ納得。やっぱり最後は「そうではない。君が真に目覚めれば書くまでもない」なのだろうか。