From: Goro Fuji Date: 2008-07-21T17:03:53+09:00 Subject: [ruby-dev:35618] Re: [request]C APIの拡張 卜部さん snprintf()のバッファサイズを決定するのが,私にとってはわりと面倒な作業であり,またRubyソースコード中で用いられる値が様々であることから,この「面倒くささ」はわりと普遍なのではないかと思いました。実装しているときに「面倒くさい」と思うことは,第三者(や,数ヵ月後の自分)にとっては「理解しにくい」ということになりがちなような気がします。「妥当性の検証が難しい」という言葉はそういう意味で使用しました。 なかださん ありがとうございます。 パッチのバグについてはすみません。 sprintf()にまつわる過去の議論を考慮しなかったことについては調査不足でした。たしかに,「壊れていないものを直すな」ということで,既存のコードを書き換える必要はないのでしょう。 ところで名前ですが,rb_append_(v)sprintf()は分かりにくいように思います。第一引数がStringなのでrb_str_*で始まる方が自然で覚えやすい(ので,使いやすい・使われやすい)のではないかと思いますがいかがでしょうか。しかしそうなるとrb_str_append_(v)sprintf()となりさすがに長すぎるようにも思いますが。 2008/07/21 16:31 Nobuyoshi Nakada : > なかだです。 > > At Mon, 21 Jul 2008 12:23:42 +0900, > Goro Fuji wrote in [ruby-dev:35611]: >> 1.1 rb_str_catf()の需要 >> >> このことから,catf()についてはそれなりの需要があるのではないかと考えました。 > > たしかに需要はそこそこあるようですね。あとは名前かな。ちなみに、 > [ruby-dev:35597]のパッチでは実際のcapaを考慮せずに120byte空いて > いるとみなしているのでまずいです。 > >> 1.2 rb_str_newf()の需要 >> >> それではなぜrb_sprintf()ではなく,s(n)printf()とrb_str_new2() >> を使っているのかということになります > > その多くは、rb_sprintf()が追加される以前からのコードではないでしょ > うか。単に、検証済みのコードをわざわざ全部書き直すことはしていな > いだけだと思います。 > >> (1) README.EXT(.ja)に載っていないため > > 簡単ながら追加しておきました。説明の改善は歓迎です。 > >> また,今回の議論は,s(n)printf()はバッファサイズの妥当性を検証 >> することが難しく,使用を避けた方が良いということを前提としてい >> ますが,私はこの点を強く感じすぎているかもしれません。 > > これは以前取り上げられた問題でして、既存のコードの検証と > rb_sprintf()の追加ということになったと思います。 > >> print()とprintf()の違いがfだけなのでそれで十分かと思ってしまい >> ました。名前については特にこだわりはありません。Rubyの慣習に従 >> うならば,rb_str_new6()ということになるでしょうか。 > > もうnew+数字はやめましょうよ。すでにあるものはともかく、今さら増 > やすことはないでしょう。 new+数字という名前については冗談が過ぎました。申し訳ありません。 またこれについては,考えてみれば,マクロで十分対処できるので,もし採用するとしても新しくシンボルを定義するには及びませんね。 -- Goro Fuji (藤 吾郎)