From: Yusuke ENDOH Date: 2008-09-04T19:47:43+09:00 Subject: [ruby-dev:36156] Re: [ANN] Ruby 1.9.1仕様凍結 遠藤です。 2008/09/03 21:27 Tadashi Saito : >> また別の例ですと、RString 構造体のメンバを直接いじられても困ります。 >> これをいじる時は RSTRING_PTR や RSTRING_LEN 等のマクロを使うものであって、 >> RSTRING(str)->as.heap.len 等は非公開だと考えるべきでしょう。 > > ならば、非公開情報を保持しているRString自体を非公開にするのが筋ではないでしょうか。 > まだまだ非公開にすべき・できる部分がありますが、とりあえず試作したパッチを末尾に > 付けます。 private.h がなかったのですが、struct RString と RSTRING マクロの定義だけ書いたものでコンパイルしてみました。 やはり、関数にするとオーバーヘッドが発生するようです。 # パッチ前 $ time ./ruby.org -rstringio -e s = StringIO.new(" " * 100) i = 0 while i < 100000000 s.eof i += 1 end ' real 0m15.430s user 0m15.400s sys 0m0.020s # パッチ後 $ time ./ruby.new -rstringio -e ' s = StringIO.new(" " * 100) i = 0 while i < 100000000 s.eof i += 1 end ' real 0m16.280s user 0m16.260s sys 0m0.010s これだけなら無視できるレベルかもしれませんが、他の構造体まで 同様に扱っていくと、無視できないレベルになるかもしれません。 >> つまるところ、公開 C API のリストというかドキュメントというかが必要というか、 >> README.EXT がそれな気がするので、拡張ライブラリを作る方はそのようにご留意ください。 > > 拡張ライブラリを一度でも作ったことのある人間ならば、README.EXTが網羅的なもので > ないことは、火を見るより明らかでしょう。 README.EXT を整理・増強していくのが正しい方向性だと思います。 そのためにも README.EXT に書いてあることだけでできないことに 気がついた人は、そのたびに ML で API の公開を要求をするのが いいと思います。 > 「インストールされたヘッダファイル=公開されたAPI」というごく当たり前の事が、 それって当たり前なんでしょうか。 個人的には「undocumented な機能を使ったらどうなっても文句が 言えない」という方が当たり前だと思っています。 -- Yusuke ENDOH