2005-06-30 [長年日記]
λ. The 2005 GHC survey
出てますよ。
λ. 『道路の経済学』 松下 文洋
λ. CのプログラムからHaskellの関数を呼び出す
soutaroさんの「CのプログラムからOCamlの関数を呼び出す」というエントリに触発されて、Haskellの場合について書いて見た。OCamlの場合に比べると幾分面倒くさい。
- Foo.hs
-
module Foo where import Foreign.C f :: CInt -> CInt f x = x + 1 foreign export ccall "f" f :: CInt -> CInt
- main.c
-
#include <stdio.h> #include "HsFFI.h" #ifdef __GLASGOW_HASKELL__ #include "Foo_stub.h" extern void __stginit_Foo ( void ); #endif int main(int argc, char *argv[]) { hs_init(&argc, &argv); #ifdef __GLASGOW_HASKELL__ hs_add_root(__stginit_Foo); #endif printf("f(%d) = %d\n", 3, f(3)); hs_exit(); return 0; }
- コンパイル
-
% ghc --make -fglasgow-exts Foo.hs % ghc -c main.c % ghc --make -fglasgow-exts -no-hs-main Foo.hs main.o
一行目は Foo_stub.* を作るため。
ここでは書かなかったが、実行時にHaskellの関数をCの関数に変換することも一応出来る。
まぜるな危険!
……とコメント書いてから見たけど,それほどグロくなかった.<br>二枚目の犬顔イモムシは前に見たことあるなこれ.
ナイスツッコミ!<br>でも、蓮コラがダメでこれが大丈夫ってのは何か納得いかん(ぉ