From: "U.Nakamura" Date: 2001-08-18T16:19:17+09:00 Subject: [ruby-list:30958] Re: file exist check method? こんにちは、なかむら(う)です。 At Aug.18,2001 03:56:13, wrote in '[ruby-list:30956] Re: file exist check method?' > > やっぱりcygwin版ではなくmswin32/mingw32版を使う理由というの > > は「ふつーにWindowsで使える」ことを期待していると思うのです > > よ。 > > やっぱ、「Windowsのパスがそのまま使えること」が要件なわけですね。 と、僕は思ってるのですが、多数意見は異なっているかもしれない です。 # というわけでご意見募集中 ^^; > > > ところで興味本位ですが、DOSISH 対応のゴールってどこに置 > > > かれてて、現在の問題はなんでしょう? > > > > > > 1. \ も / もパスセパレータ > > > 2. UNC は '\\\\machine\path' あるいは '//machine/path' > > > 3. Shift_JIS("表"とか)対応 > > > 4. その他... > > > > 4. ドライブレターの正しいハンドリング > > > > とか。 > > 1.7系の話をすると、file.cでは1〜3はほぼ対応が終わっていて、 > > あとは4くらいです(既に対応するパッチは公開済み)。 > > dir.cだと、\がメタ文字扱いなので1・3は全滅です。2・4はまずま > > ずだったはず。 > > 4. の具体的な問題は ruby-dev で議論してた dirname だかでしたっけ? File.dirname・File.basename・File.expand_path(・File.join)で すね。 最近のruby-devの話はもともと僕のところにPatrick Cheng氏から パッチが届いたのが発端([ruby-dev:13817])で、これは1と4に対応 したものでした。 で、そこからいろいろやって、このパッチに2と3の対応を加えて4 の対応を抜いたものが1.7にcommitされてます。 なぜ4の対応が抜いてあるかというと、 File.dirname("C:/foo") # => "C:/" となるのがいいかどうかの議論が済んでないためです。 これを認めるとFile.joinもいじらないと整合性が取れなくなるの ですが、そうすると非DOSISH環境にも影響が生じる... ということ です。 > > # ちょっと探せなかった > > 別のメールを見返しててちょっと気になったのは > > > Subject: [ruby-dev:14179] Re: library search path > > From: "U.Nakamura" > > To: ruby-dev@ruby-lang.org (ruby developers list) > > > あと、これはまだ議論してないのですが、ENV['HOME']中のパス区 > > 切りが\だった場合、/に変換した方がいいんでしょうか? > > # 僕のパッチだとそうしてます、なんとなく。 > > これは、それでいいんですか?なんでだろう?とか思ったのですが。 [ruby-dev:14186]にあるように、ruby内部ではパス区切りを/に統 一してるから、ですね。 ユーザーからは\でも/でも好きなように指定可能だけど、それを処 理して出てくるものは/に統一しておく、ということです。 ま、別に\に統一してもいいんでしょうけど、File::SEPARATORが"/" なので、それに合わせてるということだと思います。 > 「(ユーザが望まなければ) / をパス区切りとして見せない」 > という要件はないのでしょうか?(ないのかな?いや無理なのかな?) ユーザーが望めば、オプションかなんかで出力のパス区切りも\に する、という指定が可能であってもいいと思うのですが、現状はそ ういう話はありませんね。 これで特に苦情が目立たない、ということは、入力としての\をち ゃんとハンドリングせい、という話はあるけど出力については特に 誰も気にしてないということ? > > # さらに、自分が普段使ってるrubyには別のパッチをあててあって > > # 挙動がいろいろ違うので余計に混乱してたり... > > ていうのも気になりました、この「挙動がいろいろ違う」というの > は、DOSISH対応により現在の(UNIX側の)仕様が変わる、あるいは変 > えたいというのがあったりします? > > もしそういうのがあるようでしたらゴールも近いようですしそろそ > ろまとめに入った方がよろしいのではないかと思いました。 なかなか難しいのですけど、僕自身のスタンスは、DOSISH対応のた めにUNIX側の仕様を変えるのはなるべく避けたい、というものです。 さらに、DOSISHな環境とUNIXな環境とで非互換な動作というのもな るべく避けたい、と。 DOSISHな側の都合から言えば、Dir.globが ・\をメタ文字として扱うという仕様(1.7) ・空白文字をデリミタとして扱うという仕様(1.6) を変えちゃいたいというのが本音ですが(でないと\をパス区切りと して扱う対応やShift_JISの対応を入れ込むのが難しい)、DOSISHの 都合だけでそれを変えちゃうことまでは望んでいません。 んじゃ、DOSISHだけ動作を変えるのはどうかというと、これはもう ケースバイケースだと思うのですけど、UNIX側との互換性とどちら が希求度が高いか、という話になっちゃうわけですね。 で、僕自身は、互換性の方が重視されるべきだと思っているわけで す。 rubyをDOSISHな環境だけ・UNIXな環境だけで使う人は意見が違うか もしれないですけど。 > # Windows側の動向はたぶんマニュアルで追い切れてないのですよ。 > # 怒涛のパッチ攻勢が起こるし(^^;; いいように言えばcommitの前に変更内容をレビューするようにして るってことですね。 悪いように言えば、どうしても試行錯誤が避けらない、ということ ですけど... 最終的にcommitされた変更については、ChangeLogだけじゃなくて doc/NEWSなりなんなりにちゃんと反映してかないといかんですね。 それでは。 -- U.Nakamura