[#22503] can't require — IWATSUKI Hiroyuki <don@...>

岩月と申します。

94 messages 2004/01/06
[#22504] Re: can't require — nobu.nakada@... 2004/01/06

なかだです。

[#22505] Re: can't require — matz@... (Yukihiro Matsumoto) 2004/01/06

まつもと ゆきひろです

[#22506] Re: can't require — IWATSUKI Hiroyuki <don@...> 2004/01/06

岩月と申します。

[#22509] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/07

山本です。

[#22513] Re: can't require — IWATSUKI Hiroyuki <don@...> 2004/01/07

岩月と申します。

[#22514] Re: can't require — nobu.nakada@... 2004/01/07

なかだです。

[#22522] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/07

山本です。

[#22524] Re: can't require — nobu.nakada@... 2004/01/07

なかだです。

[#22526] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/07

山本です。

[#22534] Re: can't require — nobu.nakada@... 2004/01/07

なかだです。

[#22535] Re: can't require — matz@... (Yukihiro Matsumoto) 2004/01/07

まつもと ゆきひろです

[#22536] Re: can't require — Tanaka Akira <akr@...17n.org> 2004/01/07

In article <1073474004.933446.5475.nullmailer@picachu.netlab.jp>,

[#22540] Re: can't require — nobu.nakada@... 2004/01/07

なかだです。

[#22541] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/07

山本です。なかださんのコードで気になった点が3つあります。

[#22546] Re: can't require — nobu.nakada@... 2004/01/07

なかだです。

[#22549] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/08

山本です。

[#22550] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/08

山本です。

[#22551] Re: can't require — nobu.nakada@... 2004/01/08

なかだです。

[#22571] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/11

山本です。

[#22667] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/22

山本です。

[#22668] Re: can't require — matz@... (Yukihiro Matsumoto) 2004/01/22

まつもと ゆきひろです

[#22669] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/22

山本です。

[#22676] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/24

山本です。

[#22677] Re: can't require — matz@... (Yukihiro Matsumoto) 2004/01/25

まつもと ゆきひろです

[#22678] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/25

山本です。

[#22679] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/25

山本です。

[#22680] Re: can't require — matz@... (Yukihiro Matsumoto) 2004/01/25

まつもと ゆきひろです

[#22682] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/25

山本です。

[#22683] Re: can't require — matz@... (Yukihiro Matsumoto) 2004/01/25

まつもと ゆきひろです

[#22686] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/26

山本です。

[#22687] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/26

山本です。

[#22697] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/27

山本です。

[#22700] Re: can't require — nobu.nakada@... 2004/01/27

なかだです。

[#22712] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/27

山本です。WinCVS + byacc + sed をインストールして、ビルドできるようになりました。

[#22714] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/27

山本です。

[#22716] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/27

山本です。

[#22725] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/28

山本です。

[#22729] Re: can't require — matz@... (Yukihiro Matsumoto) 2004/01/28

まつもと ゆきひろです

[#22734] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/28

山本です。

[#22736] Re: can't require — matz@... (Yukihiro Matsumoto) 2004/01/28

まつもと ゆきひろです

[#22738] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/28

山本です。

[#22739] Re: can't require — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/28

山本です。

[#22740] Dir.glob (Re: Re: can't require) — nobu.nakada@... 2004/01/28

なかだです。

[#22741] Re: Dir.glob (Re: Re: can't require) — matz@... (Yukihiro Matsumoto) 2004/01/28

まつもと ゆきひろです

[#22744] Re: Dir.glob (Re: Re: can't require) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/28

山本です。

[#22746] Re: Dir.glob (Re: Re: can't require) — nobu.nakada@... 2004/01/28

なかだです。

[#22747] Re: Dir.glob (Re: Re: can't require) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/28

山本です。

[#22748] Re: Dir.glob (Re: Re: can't require) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/28

山本です。

[#22750] Re: Dir.glob (Re: Re: can't require) — matz@... (Yukihiro Matsumoto) 2004/01/28

まつもと ゆきひろです

[#22761] Re: Dir.glob (Re: Re: can't require) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/29

山本です。

[#22764] Re: Dir.glob (Re: Re: can't require) — nobu.nakada@... 2004/01/29

なかだです。

[#22766] Re: Dir.glob (Re: Re: can't require) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/29

山本です。

[#22770] Re: Dir.glob (Re: Re: can't require) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/29

山本です。

[#22772] Re: Dir.glob (Re: Re: can't require) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/01/29

山本です。

[#22774] Re: Dir.glob (Re: Re: can't require) — matz@... (Yukihiro Matsumoto) 2004/01/29

まつもと ゆきひろです

[#22688] output directory for extensions — nobu.nakada@...

なかだです。

14 messages 2004/01/26

[#22691] 次期リリースでの新規添付ライブラリ — "Kawaji, Shinya" <kawaji@...>

かわじ、です

18 messages 2004/01/26
[#22693] Re: 次期リリースでの新規添付ライブラリ — matz@... (Yukihiro Matsumoto) 2004/01/26

まつもと ゆきひろです

[#22694] Re: 次期リリースでの新規添付ライブラリ — matz@... (Yukihiro Matsumoto) 2004/01/26

まつもと ゆきひろです

[#22763] $: trick in test/* — "NAKAMURA, Hiroshi" <nakahiro@...>

なひです。

21 messages 2004/01/29

[ruby-dev:22552] Re: can't require

From: "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
Date: 2004-01-08 10:41:05 UTC
List: ruby-dev #22552
山本です。

>At Thu, 8 Jan 2004 13:49:40 +0900,
>H.Yamamoto wrote:
>> もしも **/ とシンボリックリンクのチェックがタイムリーでなくていいのなら、
>> 上からマッチする順が下からマッチする順と同様に高速で、
>> デフォルトが上からマッチなので互換性も取れて、
>> Win32のパッチも今のままで問題なくなって、
>> なかださんのパッチでよさそうなんですけど、どうなんでしょうか。
>> (ただ、_WIN32のコードは外にだせるかも)
>
>名前を先にyieldしてからその中身を読むという動作上、ある程度はしょ
>うがないような気がします。これをどうしても避けたいなら、今
>rb_w32_opendir()でやっているように一度全部読んでしまう以外には
>ないかも知れません。しかし今度は、readdir()したときにはあったファ
>イルがなくなったり、なかったものが増えていたりという可能性もで
>てくるでしょうし。

この点については、誤解があるかもしれないので確認します。

Rev1.94では、

if (do_lstat(...) && S_ISDIR(...))
{
    glob_helper(...);
}

のように lstat の後すぐ glob_helper を呼んでいるので、
シンボリックリンクでないことが保証されます。

ただ、これを

if (do_lstat(...) && S_ISDIR(...))
{
    dirtype = dir;
}

glob_helper(...); #1

if (dir)
{
    glob_helper(dir); #2
}

とすると、#1のglob_helperによってファイルシステムに変更が加わると、
#2でシンボリックリンクに変わっている可能性があるため、危険があります。

もちろん、ruby以外からファイルシステムに変更が加わる可能性はありますが、
時間は短いのでより安全だし、ruby単独なら完全に安全です。

こういったことは、rb_w32_opendirのように一度に読んでも回避できないはずです。

//////////////////////////////////////////////////////////////////////////////////

>結局、そういう元のディレクトリを変更するような場合にはPOSTORDER
>を使うべし、ということになるのでは。その例では、(_WIN32以外では)
>再帰する前にopendir()することでちょっとマシになるかも知れません。

私はRev1.94で、可読性、高速性、安全性で妥協しないような実装に苦労したので、
この問題について客観的に見れなくなっている気がします。

**/のチェックがタイムリーでなくても安全ならいいんですが、
危険はあるが、フラグ、それも安全性とは本質的な関係のないフラグで
回避すべきというのは、使い勝手が悪い気がします。

本当に安全性として問題ないのでしょうか?他の人の意見も聞きたいです。私はWin32な人間なので、
正直よくわかりません。

//////////////////////////////////////////////////////////////////////////////////

コードはシンプルにしておきたいので、できれば「不定」のままのほうがいいのですが、
多数のファイルにマッチする場合は、メモリを大量に消費するので、
「上からマッチ」「下からマッチ」があったほうがいいのかもしれません。

考えてみたんですが、デフォルトが「上からマッチ」だと、
実装によってデフォルトの方が遅くなる場合もあり、(**/を厳格にした場合など)
望ましくありません。

そこで、デフォルトは不定かつ最速(現在の実装では「下からマッチ」と同じ)で、
Dir::GLOB_HEAD のような指定があれば「上からマッチ」
Dir::GLOB_TAIL のような指定があれば「下からマッチ」にする方が望ましい気がします。

仮に「上からマッチ」や「下からマッチ」が遅いとしても、望んでその動作を選ぶのなら
問題ないでしょうし。


In This Thread