FFIの練習 Haskellからcを使う
HaskellにはFFIという仕組みがあり、他言語とバインディングできるようです。言語の枠組みとしては、cだけでなくc++,Javaも視野に入っているようです。
- Chapter 8 Foreign Function Interface
サイン関数で練習してみました。
コードです。
import Foreign.C.Types foreign import ccall "math.h sin" c_sin :: CDouble -> CDouble h_sin:: Double -> Double h_sin x = realToFrac $ c_sin $ realToFrac x main = putStrLn ( show (h_sin 1.0) )
実行結果です。
[ec2-user@ip-XXX-XX-XX-XXX work01]$ runghc ./math01.hs 0.8414709848078965 [ec2-user@ip-XXX-XX-XX-XXX work01]$
sin(1)の結果は、
ですので、プログラムは正しいようです。
印象としては、JavaのJNIより簡単な気がしました。が、試した内容事態が簡単だからそう感じるのかもしれません。
Haskellからc言語を扱うのは大変かなぁと思っていたのですが、これで、心理的障壁はかなり低くなりました。
参考情報
http://differentialengine.wordpress.com/2013/12/02/using-opencv-from-haskell-by-ffi/