From: Tadashi Saito Date: 2008-09-16T18:39:56+09:00 Subject: [ruby-dev:36323] Re: [ANN] Ruby 1.9.1仕様凍結 斎藤と申します。 On Fri, 5 Sep 2008 21:52:13 +0900 "U.Nakamura" wrote: > README.EXTがチュートリアルに準ずる程度の内容に過ぎないのは単 > にマンパワーの問題であり、本来は使ってよいAPIは全て解説される > べきだと思います。 > # が、それを添付のテキストファイルに書いていくままでいいのか > # どうかは一考の余地あり。 コメント内外ともに、自分もそう思います。 > というわけで、今回の宣言と、include/rubyにあるからバンバン使 > っていいかどうか、というのはまた別問題、という理解が正しいの > ではないでしょうか。 前々から疑問なのですが、include/rubyにあってバンバン使うべきでない関数(等)と いうのは、実際どれで、それらはどういう存在なのでしょうか。 複数の.cで共用したいから、実装の都合上外部に出ているが、第三者のライブラリから 使われることを想定していない、とかでしょうか。 APIとされる関数の動作を解析してドキュメントを付けるのは、作ったご本人以外でもできますが、 「これは使わないで欲しい」という意志は、さすがに本人以外は誰も分からないと思います。 それを使って拡張ライブラリを書いていて、「もともと使うべきでなかった」と言われて仕様が 変更される、とかいう事態になれば、とても悲しいです。 > なお、今の話と全然関係なく、少なくともRStringおよびRArrayは公 > 開APIであると私は理解しています。 > というのは、README.EXE.jaに > > 構造体は「struct RXxxxx」という名前でruby.hで定義されていま > す.例えば文字列は「struct RString」です.実際に使う可能性が > あるのは文字列と配列くらいだと思います. > > と書いてあるためです。 自分は、ここはobsoleteな記述であると考えていました。というのも、RSTRING_XXXという マクロが存在する前から上記文書は存在し、かつその時代は構造体に直接触るしかメンバに アクセスする方法が(必要)なかったためです。 今はRSTRING_LEN等のマクロでしか、(埋め込み・非埋め込みオブジェクトへ)一貫した方法で アクセスできないので、少なくともマクロが提供されている部分のメンバに関しては、 直接触るべきでないと思っていますが、どうでしょうか。 > 例えば、 > > include/ruby/onigiruma.h > rubyが内部で使用している正規表現エンジン「鬼車」のヘッダ。 > ユーザがこのヘッダを利用して直接rubyオブジェクトの内部を > 操作することはできない。 > > とか(これが正しいのかどうかは知りませんが)。 こんな感じでどこかに記述してあればとてもありがたいです。 現状、「公開してある」「ない」だけの基準でしか見分けることができず、どれを使って 安全なのかまったく分からないので。 -- 斎藤ただし