|
From: Hiroshi I. <ig...@ru...> - 2002-06-02 18:17:00
|
いがらしです。 なんか、言い訳がましい弁明が続きますが、 # 実際言い訳に過ぎないのですが... あくまでメンテナ当時の考えを説明している訳で もう自動生成にこだわっているわけではないので。 At Sat, 1 Jun 2002 12:19:49 +0900, Masao Mutoh <mu...@hi...> wrote: > > defsファイル自体は自動生成されるものではないのですね。 はい。1.2時代はヘッダファイル等から生成していましたが、 いつからか生成しないことになったようです。 きちんと経緯を調べたわけではありませんが、 おそらく各言語バインディングのAPIをヘッダファイル等から 導き出すには自明でない情報が必要で、結局手でメンテせざるを 得ないということになったのでは、と思います。 「自明でない情報」として以下のようなものがあります。 * あるメソッド(関数)・定数が属すべきクラス・モジュール * あるクラス・モジュールに属するとして、その名前 * メソッドの省略可能引数およびそのデフォルト値 * 公開するオブジェクト(構造体)のメンバ このあたりを記述できるように、defsファイルの フォーマットが拡張されてきているようです。 > > 現在の gnome-python/pygtk/gtk/gdk.defs には含まれています。 > > 例えばGdk::Drawable#draw_rgb_32_imageなら以下の通りです。 (snip) > っていうか、これを書かなきゃいけないってコトですよね...。 > まぁ、今は、すでにgnome-pythonのがあるということでそれを流用しようと > いうことだとは思いますが、将来的には。 > #gnome-pythonが未サポートなクラス・メソッドが無い場合は > #独自実装するか、自分で上記フォーマットのファイルを作ってpatchを > #gnome-pythonに送るかしないといけないってコトですよね。 まあ、そういうことになりますが、今の勢いなら 主要なAPIはカバーしていくと思いますよ。 > これの仕様を覚えて、これを関数毎に書き、いがらしさんのツールを > メンテナンスしつつ、さらにRubyによるWrapperを書くというプロセス > を考えるのなら、従来通りC言語でプログラム書いた方が速いと思うのは > 私だけでしょうか。 私もコードを書く人がいてコントロールできれば 従来通りが速いと思います。 > > なんか、正直、自動生成に切り替えるメリットがわからなく > なってきました。 > あ、いや、ヒューマンエラーを無くすことができるというのは > 自動生成時には常に言われることなのでそれを置いておいたとして。 これは、当時の私にとっては大きかったのです。 未実装部分を補うたくさんのパッチを送っていただきましたが、 * 品質・コーディングスタイルにむらがある。 * on-demandに自分が欲しいメソッド・定数だけ実装している。 等があって、マージする負荷が高かったので自動生成に向かっていました。 まあきちんとメンテナとしてコントロールできなかったのが そもそもの原因でしたので、それが解決できれば従来通りで 問題ないと思います。 > すでにある*.defsをgnome-pythonからもらってきて、 > それからいがらしさんのツールでCのソースを生成して、 > それをベースにRuby-GNOMEに無いメソッドやクラス・ライブラリ(bonoboなど) > を開発するということであれば十分使えると思うのですが。 はい、現在はそれで充分だと思っています。 あるいは、未実装ライブラリについても * 自動生成したAPIに後からRubyらしいAPIを手でかぶせるコスト (あるいはRubyらしいAPIを吐かせるためにツールをメンテするコスト) * 最初からC(+Ruby)でRubyらしいAPIを定義・実装するコスト の後者が小さければ、ツールを使うことはないでしょう。 Pythonより拡張ライブラリが書きやすい(一部逆の部分もありますが) こともあって、そういう場合の方が多いのかも知れません。 > それから、さらに生成されたソースを追ってはいるので追加質問です。 > > gtk_item_factory_create_items()のようにオブジェクトの配列を > 渡すようなのはどうなっているのでしょうか? > defsで定義された引数が配列かどうかをどのように判別しているのか > ということと、配列の場合は引数のVALUEが配列であるとしそれを適切な > Cの型に変換する部分について知りたいです。 配列についてはサポートしていません。 At Sun, 2 Jun 2002 10:44:59 +0900, Masao Mutoh <mu...@hi...> wrote: > > 構造体のメンバへのアクセス方法って提供されない > のでしょうか。gtkcustom.cで対応するのかな? > #*.defsには無いようでしたので。 これも提供していません。 構造体メンバも直接アクセスしていいものとまずいものがあるので、 gnome-pythonの新しいdefsファイルでは明示的に必要なメンバ名を 記述するようになっています。やるとしたら、これに対応した メソッドを生成するのでしょうけど... こうして考えてみると、わざわざ検討して頂くほどのものでは なかったかも。余計なお時間を取らせてしまいすみませんでした。 自動生成に関しての作業は少なくとも当面は中止して、 他の作業に注力しようと思います。 -- 五十嵐 宏 (Hiroshi IGARASHI) |