From: "U.Nakamura" Date: 2008-09-05T21:52:13+09:00 Subject: [ruby-dev:36170] Re: [ANN] Ruby 1.9.1仕様凍結 こんにちは、なかむら(う)です。 In message "[ruby-dev:36166] Re: [ANN] Ruby 1.9.1仕様凍結" on Sep.05,2008 20:02:15, wrote: > 自分はREADME.EXTはチュートリアルに準ずるもので、すべてのAPIを解説するという趣旨が > 元からないのだと思ってました。 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から移動させてください。 > > という宣言はそもそも意味を成さない」 > > となる、ということでよろしいのでしょうか。 * 9月25日以降、1.9系列内では公開APIの変更は認めない。 * 公開APIの定義は現時点では存在しないので、include/ruby以下に 存在するものは全て公開されているものと看做して上述の制限を 課す。 * 故に、変更したいものは今のうちに変更するか隠蔽するかせよ。 というのが宣言の趣旨だと思います。 実際にインストールされちゃう以上は(使って欲しくないかどうかに 関わらず)使われちゃう可能性があるわけで、安定版系列内での今後 の変更を認めないのは当然ですし、そのことに気づいてない人に凍 結前に注意喚起を促すのもまた当然のことでしょう。 というわけで、今回の宣言と、include/rubyにあるからバンバン使 っていいかどうか、というのはまた別問題、という理解が正しいの ではないでしょうか。 なお、今の話と全然関係なく、少なくともRStringおよびRArrayは公 開APIであると私は理解しています。 というのは、README.EXE.jaに 構造体は「struct RXxxxx」という名前でruby.hで定義されていま す.例えば文字列は「struct RString」です.実際に使う可能性が あるのは文字列と配列くらいだと思います. と書いてあるためです。 また一方で、 Rubyの構造体を直接アクセスする時に気をつけなければならないこ とは,配列や文字列の構造体の中身は参照するだけで,直接変更し ないことです.直接変更した場合,オブジェクトの内容の整合性が とれなくなって,思わぬバグの原因になります. ともあるように、include/rubyにあるけど使い方に注意喚起が必要 なものについては、そんな感じでそれぞれ説明される必要があると も思います。 例えば、 include/ruby/onigiruma.h rubyが内部で使用している正規表現エンジン「鬼車」のヘッダ。 ユーザがこのヘッダを利用して直接rubyオブジェクトの内部を 操作することはできない。 とか(これが正しいのかどうかは知りませんが)。 それでは。 -- U.Nakamura