Rubyで遊んだ日々の記録。あくまで著者視点の私的な記録なので、正確さを求めないように。
Rubyと関係ない話題にはその旨注記しているはず。なので、一見関係無いように見える話題もどこかで関係あるのかもしれません。または、注記の書き忘れかもしれません...
'もquote文字として扱う'で囲まれた中にあるglob文字はglob文字としては扱わない_ で、問題は先頭の「VC++のスタートアップコードと同じ」というやつですが、こいつにはいろいろ理不尽な癖があり、
\は普段は\という文字そのものだが、"の前でのみescape文字として扱われる(*1)"の前にn個の\があるとき、nが奇数であればn >> 1個の\と1個の"として扱われ、nが偶数であればn >> 1個の\と1個のquote文字として扱われる""はquoteの外では当然quoteの開始と終了(*2)となるが、quoteの中では1個の"と1個のquote文字(*3)として扱われる
_ さて、現状、1.8系では、quote中の""の扱いはVC++のスタートアップコードと異なり、単に2個のquote文字(*4)として扱われています。
一方、1.9.0ではこれをVC++のスタートアップコードと同じように扱っていた... つもりだったのですが、quote中の\""の扱いがなんかおかしくなっていました。
というわけで、上記のルールと一致するようにコマンドライン解釈部の修正が行われました。
_ で、quote中の""の扱いは上記の通りですが、quote中の''の扱いは1.8系と同じ(*5)になるようにしておきました。
あーややこしい...
(*1) escape文字として扱われる
"がquote文字でなくなる。
(*2) quoteの開始と終了
つまり結果として空の文字列。
(*3) 1個のquote文字
つまりquoteの終了。
(*4) 2個のquote文字
結果として、quoteを閉じて開くため、ないのと同じ。
_ いや、「日経Ruby」という名前は誰かのジョークなんですが、オブジェクトの広場みたいなののRuby版を作ろうという試みの話。
_ どんな記事が欲しいかとか俺はこんな記事を書いてやってもいいぜとか編集手伝うぜとかゆーのをWikiで集めてるのでよろしかったらみなさんぜひ。
_ この話。
いつもながら、かとんぼさんはショックのでかい問題を発見してくださいます。いや、ほんとは私が真っ先に気づかないといけないんだけど。
_ [ruby-dev:24134]には巻き戻し希望と書いてるけど、我らがパッチ怪獣のパッチをあてて、さらにdir.cの1218行目を
while (p < pend && isdelim(*p)) p++;
とすれば問題は解決します(おいらのデバッグが手間取ったせいで、この最終解決の前にパッチ怪獣はカプセルに戻ってしまいました)。
_ しかし1.8にこの変更入れちゃっていいんだったっけ。なんか非互換問題があったから入ってないんだと思ってたけど違ったかなあ。
_ またしてもかとんぼさんから恐ろしい指摘が。
いや、今度は無論気づいてたんですけど、mswin32固有だとは思ってなかったので、当然誰かが直してるんだろうと……。
_ 要するに、stdioのFILE*内にあるバッファの残量の管理を、読み込み時と書き込み時で分離してない環境で発生する問題だったようです。修正commit済み。
_ 追記: リポジトリのローカルコピーにcommitしたって意味ねーよ! ebanさんに指摘されるまでぜんぜん気づかなかった... orz orz orz
被捕捉アンテナ類
[\ay antenna (testing)]
[Ant]
[Antenna-Julia]
[LayserあんてなV2]
[nAntenna]
[nuance de Antenna]
[Rabbit's Antenna]
[Read List]
[Ruby hotlinks 五月雨版 (るるりん。)]
[してたま (私的アンテナ with たまてばこ)]
[ただのあんてな]
[ちゃらんぽらん]
[でこぽんリンク]
[なよろアンテナ]
[にっきトレーサー]
[偽善者あんてな - 2nd season -]
[湘南日記放送局(SDB)]
[はてなの各アンテナ]