HaskellからRubyを呼んでみる(1)
FFIを使ってHaskellからRubyを呼んでみました。ruby_optionsが上手く動かなかった(まだソース読んでません)ので、とりあえず文字列をevalするだけですが… それはそれとしてruby-1.8.5のmingw版はバイナリがないのかな?
ファイル: ruby_test.hs
module Main (main) where import Foreign.C foreign import ccall unsafe "ruby_init" rubyInit :: IO () foreign import ccall unsafe "rb_eval_string" cRubyEvalString :: CString -> IO () rubyEvalString s = withCString s cRubyEvalString main :: IO () main = do rubyInit rubyEvalString "puts 'Hello, world!!'" rubyEvalString "[1, 2, 3, 4, 5].each {|i| puts i }"
実験手順
1. http://ftp.ruby-lang.org/pub/ruby/binaries/mingw/1.8/からruby-1.8.4-i386-mingw32.tar.gzをダウンロードして、libmsvcrt-ruby18-static.aを取り出します。
2. 上のファイルruby_test.hsとlibmsvcrt-ruby18-static.aを同じディレクトリに置きます。
3. 以下のコマンドでコンパイルします。
$ ghc -W -ffi -o ruby_test ruby_test.hs libmsvcrt-ruby18-static.a
4. できあがったプログラムを実行します。
$ ./ruby_test.exe Hello, world!! 1 2 3 4 5
参照: http://takahr.dhis.portside.net/cgi-bin/rwiki.cgi?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DFRuby