"私には無理だと思って, CPUを無駄に使うチョイスをとるぐらいなら, SWIGでサクッと仕事を終らせたほうがよさげです. "
http://chasen.org/~taku/blog/archives/2006/07/_swig_1.html
この辺りは実は僕も否定する気がないのです。例えば工藤さんにSWIGを使えというのが前回私が書いた趣旨ではないのですね。僕としてはそこ以前に、「ライブラリはライブラリ作者が、バインディングはその言語を理解し、使用している人が書くべきだ」という観点の元に立っています。
先に言っておくと、以下は理想論というか、僕がメンテナーだったら、程度の妄想なので現状の例えばmecabの配布方法を変えろ、ってことではないので、その辺を含めて読んでください。
工藤さんはC/C++で優れたライブラリを書く人です。でも工藤さんが、python, php, ruby, perlでそれぞれの言語にあった書き方をするのは不可能だと思うのですね。そして機械的にコードを作成するのもいいんだけど、その前にオープンソースのプロジェクトとしてはそれぞれの言語の人たちと連携を取ってその道のエキスパートにバインディングを書いてもらうのが一番正しいような気がするのです。
つまりライブラリと一緒にバインディングを提供する必要もないんじゃないか、という立場にたっているので、そもそもSWIGを使う理由が僕には思い当たらないのです。ライブラリ作者がバインディングの作成をコントロールする、という概念自体が僕にはなじめないものなのです。
今思いついたのですが、もう一つのアプローチとしては、インターフェースはライブラリ作者が定義するが、実装はバインディングの作者が担当する、というのもありかもしれません。そうすれば僕が勝手にText::MeCabかいちゃったーみたいな感じではなく、バインディング開発者とライブラリ開発者を分けつつもAPIの統合と開発者同士の対話が生まれて僕も工藤さんもハッピーな形でできるのかもしれません。とりあえず思いつきですが。
で、まぁ色々書いているのですが、結局のところ工藤さんが僕とかに「CPANのText::MeCabの配布をやめろ!」とか言わない限りはせいぜい「emacsよりviのほうがいいんだよ!」みたいなレベルの意見なのです。何事もケースバイケースなので、一概にSWIGが使えないとはいいません(それでもあの生成されるコードは気持ち悪いと言いたい(笑))。工藤さんもXSに対してその立場だと思うのでそこらへんはバランスの問題ですね。
ここからは全く関係ない蛇足ですが、逆に言うと、オープンソースのプロジェクトは是非そういう、第三者が使うということやバインディングを作る人がいるという事を前提に作ってもらいたい、という願望はあります。ここでいうユーザーやバインディング開発者は、決して決してライブラリの作者ほどにライブラリに愛着はないし、開発するにあたって作者と同じ愛着を持つ必要性はないと思うのです。mecabに関してはmecab.hを見ただけでバインディングを作れたので問題はなかったですが、たまに「おまえ、これは他人に使ってもらう気あるのか、ゴルぁ!」という叫びをこらえきれないライブラリとかがあるのですね。
バインディングを作る人は決してそのライブラリ自体の「エキスパート」である必要はないし、だいたい作者以外はそれほど細かいところに興味を持たないのが前提で書いて欲しいと切に願います。