2009-09-03
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も再定義も何とかなる目処が立ったのではないかなと思います。
コメントを書く
トラックバック - http://d.hatena.ne.jp/miura1729/20090903/1251988372
リンク元
- 19 http://www.rubyist.net/~kazu/samidare/
- 3 http://www.google.co.jp/search?q=ruby 正規表現 コンパイル&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox
- 2 http://d.hatena.ne.jp/keyword/ゼータ関数
- 2 http://www.google.co.jp/reader/view/
- 2 http://www.google.co.jp/search?q=RFC1213&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 1 http://a.hatena.ne.jp/asip/
- 1 http://a.hatena.ne.jp/fujita-y/
- 1 http://blog-search.yahoo.co.jp/search?fr=top_ga1_sa&ei=UTF-8&p=一級管工事
- 1 http://cgi.search.biglobe.ne.jp/cgi-bin/search-st?q=rfc1213
- 1 http://d.hatena.ne.jp/hzkr/20070323