RubyやRailsアプリケーションにCを組み込むのは、パフォーマンスのボトルネックを解消するひとつの方法だ。RubyInlineはCの組み込みを簡単にしてくれる。Rubyコミュニティはまた、Erlang、Caml、Haskellといった関数プログラミングのコミュニティとも強く結びついている。ErlangにはErlectricityを使ったブリッジが、Objective Camlにはrocamlを使ったブリッジがすでに存在している。ApacheのThriftを使うことで、RPCとシリアライゼーションフォーマットを介してRubyを他の言語とコミュニケーション可能にするという方法もある。
Mark Wotton氏はHubrisというRubyからHaskellコードの呼び出しを可能にするブリッジを書いた。あなたはghcをインストールしておく必要がある。ghcはjhc (John's Haskell Compiler)をコンパイルできるHaskellプラットフォームを提供する。jhcはLinuxもしくはMacでしか動かないことに注意しなければならない。
準備ができたら、まずHaskellファイルを書いて、関数を定義したところにccallのエクスポートを追加する。例えば、Test.hsのようになる。
fibonacci :: Int -> Int fibonacci n = fibs !! n where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
次に、jhc_builder.sh Test.hs
を実行して、動的ライブラリ(libdynhs.so
)を作る。
この後、動的ライブラリをRuby/DLでロードすると、エクスポートされた関数がRubyコードで利用可能になる。
require 'dl/import' module HaskyPants extend DL::Importable dlload "./libdynhs.so" extern "int fibonacci_hs(int)" end puts HaskyPants.fibonacci_hs(12)
Mark氏は、次回(9月)のrorosydで、Hubrisについて説明する予定だ。まだ初期段階ではあるが、このプロジェクトはきっとHaskellのearly adopter(早期採用者)たちを引きつけるだろう。