langsmith:272
From: Shiro Kawai <shiro lava.net>
Date: Sun, 28 Aug 2005 01:58:56 -1000 (HST)
Subject: [langsmith:272] Re: perlのuse
セマンティクスに関する議論です。 その場にいなかったので外しているかもしれませんが、 一般に、コンパイルと実行のフェーズが分かれる可能性 がある場合、外部プログラムのロードがどちらの時点で 行われるかが明示されていた方が有難いことがあります。 そのプログラムをロードすることによってコンパイルの セマンティクスに影響が出る場合、コンパイル時点で ファイルをロードしたいでしょう。一方、実行時の情報に よってロードするファイルを切替えたいとか、ロードする かしないかを選択したいとかいう場合は実行時にロード せざるを得ません。後者の場合、外部プログラムのロードは コンパイルのセマンティクスに影響を与えられない、という ことになります。 (Lispのマクロはコンパイルのセマンティクスに影響を与える 典型的な例ですが、それ以外にも例えばプリミティブオペレータが 再定義されたかどうかでコンパイル結果を変えるとか、関数を インライン展開するとか、未定義の変数の使用に警告を出すとか、 色々あります。最適化とかロバストなエラーチェックを指向すると、 なるべくコンパイル時点で多くの情報を得たくなります) Perlのuseの場合、プログラム本体実行前に確実にその モジュールが読まれていることが保証されるわけですよね。 したがってコンパイル時ロードとみなして問題ないと思います。 Rubyのrequireは実行時に作用しますね。 もうひとつ、Perlのuseはファイルのロードだけでなく名前空間 にも作用しますが、Rubyの場合名前空間は別の機構で管理して いるのでここでは関係ないかと思います。 (ちなみにGaucheのuseはPerlと同じ、require+importで コンパイル時の作用。loadが実行時の作用です) --shiro -- ML: langsmith quickml.atdot.net 使い方: http://www.atdot.net/~ko1/quickml
270 2005-08-28 19:59 [ko1 atdot.net ] perlのuse 271 2005-08-28 20:43 ┣[matz ruby-lang.org ] 273 2005-08-28 21:06 ┃┣[hyuki hyuki.com ] 275 2005-08-28 22:00 ┃┃┗[matz ruby-lang.org ] 280 2005-08-29 02:18 ┃┃ ┗[ko1 atdot.net ] 288 2005-08-29 12:00 ┃┃ ┗[ko1 atdot.net ] 289 2005-08-30 00:28 ┃┃ ┗[matz ruby-lang.org ] 274 2005-08-28 21:41 ┃┣[matz ruby-lang.org ] 283 2005-08-29 02:29 ┃┃┗[ko1 atdot.net ] 286 2005-08-29 06:52 ┃┃ ┗[matz ruby-lang.org ] 282 2005-08-29 02:25 ┃┗[ko1 atdot.net ] 287 2005-08-29 06:55 ┃ ┗[matz ruby-lang.org ] -> 272 2005-08-28 20:58 ┗[shiro lava.net ] 276 2005-08-28 22:23 ┣[dankogai dan.co.jp ] 277 2005-08-28 23:03 ┃┣[matz ruby-lang.org ] 278 2005-08-28 23:20 ┃┣[shyouhei ice.uec.ac.] 279 2005-08-29 01:53 ┃┃┗[dankogai dan.co.jp ] 281 2005-08-29 02:21 ┃┗[ko1 atdot.net ] 284 2005-08-29 02:39 ┗[ko1 atdot.net ] 285 2005-08-29 04:57 ┗[shiro lava.net ]