Hello Worldが動くようになりました

 yarv2llvmでHello Worldが動くようになりました.こんなプログラムです。

m = LLVM::Module.new('hello') 
LLVM::ExecutionEngine.get(m)
p_char = LLVM::pointer(Type::Int8Ty)
ftype = LLVM::function(Type::Int32Ty, [p_char]) 
ftype = ftype.to_raw
printf = m.external_function('printf', ftype) 
ftype = LLVM::function(Type::Int32Ty, []) 
ftype = ftype.to_raw
main = m.get_or_insert_function('main', ftype) 
b = main.create_block.builder
strptr = b.create_global_string_ptr("Hello World! \n")
b.call(printf, strptr)
b.return(strptr)
LLVM::ExecutionEngine.run_function(main) 
ruby yarv2llvm.rb -r y2llib/llvmruby.rb sample/hello.rb
Hello World! 

つまり、yarv2llvmとllvmrubyを通してLLVMが生成したプログラムの中で、LLVMを起動してプログラムを生成/起動を行っています(yarv2llvmでllvmrubyが動く)。動的コンパイルは出来るだろうなと思っていましたが、こんなにあっさり出来るとは思いませんでした。LLVMの生成したプログラムのGCがどうなっているとか色々問題がありますが、とりあえずevalも再定義も何とかなる目処が立ったのではないかなと思います。