Kouhei Sutou
kou****@clear*****
2014年 1月 15日 (水) 12:54:14 JST
須藤です。 In <52D53****@gmail*****> "[groonga-dev,02056] Haskell版C APIバインディングを作成しました" on Tue, 14 Jan 2014 22:09:33 +0900, hiroshi hatake <cosmo****@gmail*****> wrote: > 畑ケです。初めまして。 ようこそ! > "Groonga"への表記統一の作業をしているうちに > Groongaのバインディングを作ってみたら面白そうだと思い立ちました。 ありがとうございます!とても助かっています! > そこで、HaskellからもGroongaを使ってみたいと思い、 > HaskellでGroongaをライブラリとして使用出来るバインディングを作成しました! > > Haskell + GroongaでHaroongaです(安直) > https://github.com/cosmo0920/haroonga おぉ、Erlangの次はHaskellがきましたか。。。! Groongaの裾野が広がっていくのを感じますね。 実は、Groongaのロゴで使っているのと同じ形のアルファベットが あるので、ロゴを作るときは役に立つかもしれません。 https://github.com/groonga/groonga.org/blob/gh-pages/images/logos/alphabets.svg 参考: Groongaのロゴ: http://groonga.org/ja/logo/ > 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向けマクロを一斉に展開するという方針で作成しました。 > (バインディングを作成した、と言うよりもバインディングを生成するルールを > 記述した、と言う方が事実を反映しているかも知れません) Haskellはこうやってバインディングを作るんですねぇ。 SWIGとかと同じアプローチですね。 と思ったんですがそうでもないのかしら。途中で.cを作らないっぽ いですね。FFIでGroongaのCのAPIを呼び出しているっぽいですね。 Gaucheのアプローチに近そう。 > 唯一目立った制限があるとしたらgrn_obj構造体へのHaskellからの内部アクセス > 方法です。 > GroongaのC APIの解説記事(と言っても少ないですが)を見る限り、「grn_obj > 構造体は汎用ポインタ型でよしなにしてくれる」という事からアクセスの手段を > バ インディングからは提供しない、としました。 grn_obj->u.vとかしないってことですよね? よいと思います。 grn_obj->headerはリードオンリーで触ってもよいやつなんですが、 低レベルの操作(*)をしなければ必要になることはないと思うので、 大丈夫だと思います。 (*) (Groongaの世界の)オブジェクトの型によって処理を振り分けるとか > その他、現時点ではもう少しとっつきやすくする為のGroonga.SimpleAPIモ > ジュールを提供しています。これはGroongaの GObject-Introspectionを用いた > Qiitaの記事( http://qiita.com/groonga/items/71b145b37d77bd160bf2 )にある > ようなアクセス方法に似せたAPIを提供します。 Groongaコマンド(selectとかstatusとか)を使えるレイヤーのAPI ということですね。groongaコマンド(実行ファイルの方)でできる ことと同じことができるので、たしかにとっつきやすそうですね! Simpleだと「どう使えるか」はわかるのですが、「何ができるのか」 はわかりずらいので、もしかしたら、Groonga.CommandAPIとか Groonga.QueryAPIとかにした方がよいかもしれませんね。 # groonga-gobject、リリースしないと。。。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) Groongaサポート: http://groonga.org/ja/support/ パッチ採用はじめました: http://www.clear-code.com/recruitment/ コミットへのコメントサービスはじめました: http://www.clear-code.com/services/commit-comment.html