From: Tadashi Saito Date: 2008-09-05T20:02:15+09:00 Subject: [ruby-dev:36166] Re: [ANN] Ruby 1.9.1仕様凍結 斎藤です。 On Thu, 4 Sep 2008 19:47:43 +0900 "Yusuke ENDOH" wrote: > private.h がなかったのですが、struct RString と RSTRING > マクロの定義だけ書いたものでコンパイルしてみました。 ごめんなさい、付け忘れました。おっしゃるとおりのものです。 private.h: #define RSTRING(obj) (R_CAST(RString)(obj)) struct RString { struct RBasic basic; union { struct { long len; char *ptr; union { long capa; VALUE shared; } aux; } heap; char ary[RSTRING_EMBED_LEN_MAX + 1]; } as; }; > やはり、関数にするとオーバーヘッドが発生するようです。 あれ、最適化オプション付けてますか? 手元で-O2を付けると、以下のようになりました。 数値は、5回測って一番速かったものです。 # パッチ前 $ time ./ruby-trunk -rstringio -e ' s = StringIO.new(" " * 100) i = 0 while i < 100000000 s.eof i += 1 end' real 0m15.810s user 0m15.801s sys 0m0.020s # パッチ後 $ time ./ruby-trunk -rstringio -e ' s = StringIO.new(" " * 100) i = 0 while i < 100000000 s.eof i += 1 end' real 0m15.781s user 0m15.777s sys 0m0.008s ということで、インライン関数版の方がなぜか速くなってしまいました。 自分には理由はよく分かりませんが、とにかく影響が(少なくとも自分の環境では)誤差範囲内に とどまる、とだけは言えそうです。 > > 拡張ライブラリを一度でも作ったことのある人間ならば、README.EXTが網羅的なもので > > ないことは、火を見るより明らかでしょう。 > > README.EXT を整理・増強していくのが正しい方向性だと思います。 自分はREADME.EXTはチュートリアルに準ずるもので、すべてのAPIを解説するという趣旨が 元からないのだと思ってました。 でちょっと別の話ですが、現状の話ですと 「README.EXTに記載されているものが公開APIである」 →「今は完全ではない」 (外部シンボルになっていても記載されていないものがたくさん) →「今は公開APIがどれだかよく分からない」 →「仕様をfreezeする対象(API)がよく分かってないので、今はfreezeしようがない」 → 「↓ On Tue, 2 Sep 2008 15:23:30 +0900 "Yugui (Yuki Sonoda)" wrote: > * CレベルのAPIはruby-core/ruby-devでの事前相談なしに変更不可 > * include/ruby/*.hにあるすべての構造体、データ型、変数、関数、マクロ > はCレベルAPIと見なします。 > * 公開したくないものはinclude/ruby/*.hから移動させてください。 という宣言はそもそも意味を成さない」 となる、ということでよろしいのでしょうか。 > そのためにも README.EXT に書いてあることだけでできないことに > 気がついた人は、そのたびに ML で API の公開を要求をするのが > いいと思います。 これはまたそのうち、自分が経験したものを別メールで出してみます。 > > 「インストールされたヘッダファイル=公開されたAPI」というごく当たり前の事が、 > > それって当たり前なんでしょうか。 まつもとさんも違うとおっしゃってるあたり、ここは自分の見識が狭かっただけなんだと 思います。すみません。 > 個人的には「undocumented な機能を使ったらどうなっても文句が > 言えない」という方が当たり前だと思っています。 自分もそれが当たり前であって欲しいと思います。しかし現状のRubyにすぐそれを要求するのは 難しいとも思います。 というか、リリースマネージャであるyuguiさんが、どのような意図を持って > * include/ruby/*.hにあるすべての構造体、データ型、変数、関数、マクロ > はCレベルAPIと見なします。 とおっしゃったかが気になります。自分は、データ構造を隠蔽すべきだ、という主張に読めた のですが(それとも、オブジェクト埋め込みの仕様とかまでAPIと宣言したかった?)。 -- 斎藤ただし