[groonga-dev,02056] Haskell版C APIバインディングを作成しました

Back to archive index

hiroshi hatake cosmo****@gmail*****
2014年 1月 14日 (火) 22:09:33 JST


畑ケです。初めまして。

"Groonga"への表記統一の作業をしているうちに
Groongaのバインディングを作ってみたら面白そうだと思い立ちました。
そこで、HaskellからもGroongaを使ってみたいと思い、
HaskellでGroongaをライブラリとして使用出来るバインディングを作成しました!

Haskell + GroongaでHaroongaです(安直)
https://github.com/cosmo0920/haroonga

Groonga 3.1.1のgroonga.hからc2hsc (
http://hackage.haskell.org/package/c2hsc )を用いて静的に解析を行い、
hsc2hs (
http://www.haskell.org/ghc/docs/latest/html/users_guide/hsc2hs.html ) を
用いてhsc2hs向けマクロを一斉に展開するという方針で作成しました。
(バインディングを作成した、と言うよりもバインディングを生成するルールを
記述した、と言う方が事実を反映しているかも知れません)

唯一目立った制限があるとしたらgrn_obj構造体へのHaskellからの内部アクセス
方法です。
GroongaのC APIの解説記事(と言っても少ないですが)を見る限り、「grn_obj
構造体は汎用ポインタ型でよしなにしてくれる」という事からアクセスの手段を
バ インディングからは提供しない、としました。

groonga.hを用いて生成した後、すこし手直しをしているため、APIがこなれてい
ませんが。。。
Groonga 3.1.1のgroonga.hに書かれているAPIはもれなく使えるようになってい
ると思います!

その他、現時点ではもう少しとっつきやすくする為のGroonga.SimpleAPIモ
ジュールを提供しています。これはGroongaの GObject-Introspectionを用いた
Qiitaの記事( http://qiita.com/groonga/items/71b145b37d77bd160bf2 )にある
ようなアクセス方法に似せたAPIを提供します。

現時点ではまだ申し訳程度にTravis CIを用いてCIをしていたり、exampleが少な
かったりしています。

C APIへの完全なバインディングと生成するドキュメントは`cabal build &&
cabal haddock [--executables --hyperlink-source --internal]`したあとで無
いと見ることができないので試す時は注意してください。




groonga-dev メーリングリストの案内
Back to archive index