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

Back to archive index

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




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