langsmith:202
From: MAEDA Atusi <maeda-langsmith atusi.org>
Date: 15 Apr 2005 12:16:41 +0900
Subject: [langsmith:202] Re: C#の匿名メソッド..なぜ、ローカル変数を共有するのか?
Shiro Kawai <shiro lava.net> writes: > 町田さんとしては、どのような仕様だと自然だと思われますか。 > 私が思い付く代替案は、「関数内関数が作成された時点で、その中から > 参照している外側のスコープの変数に関してはスナップショットが作成され、 > 関数内関数からのxやyの変更は外側の変数の実体には影響を及ぼさない」 > というものです。 > (変数の束縛の変更を許さない関数型言語では、環境そのものを > 共有しようが環境のコピーを作ろうが同じことなので、この代替案は > 副作用のある言語ならではと言えます)。 Javaの無名オブジェクトは、それに近い実装です。ただし、コピーしているこ とを見せないように、コピーした変数(自由変数)については誰も変更できない 「final 変数でなければいけない」という規則になっています。 これに比べればC#の方が自然だと思います。 > 実は、それでもあまり困ることは無いかな、という気がします。 > というのは、メソッドからインスタンス変数が直接参照できる言語の > 場合、事実上インスタンスが複数の関数実体に共有される環境を > 作っているので、クローズした変数の共有で可能なことはインスタンス > 変数の共有でできてしまうからです。 Javaだと、自由変数を無名オブジェクトのインスタンスにコピーしています。 しかし、本当に共有して書き換えも許すまではやっていません。その気になれ ば可能でしょうけどね。 > Scheme的に「全てがClosureであり、オブジェクトは修飾にすぎない」 > とするのは極端ですが統一的な見方です。一方、オブジェクトで状態共有を > 行っている言語がClosureを取り込んだ時に、このようなオブジェクト以外 > での状態共有をどう扱うか、というのは興味深い話だと思います。 このあたりのJavaの仕様は後づけ感が強いですね。 「オブジェクトでできるからそんな機能は入れない」 というストイックなポリシーというわけでもない。中途半端。 C#の方は「後発だけあって、さすがに改良されている」とも言えますし、 節操がないと言う見方もできるでしょうね。 前田敦司 -- ML: langsmith quickml.atdot.net 使い方: http://www.atdot.net/~ko1/quickml
197 2005-04-15 09:56 [t.machida.unicom jco] C#の匿名メソッド..なぜ、ローカル変数を共有するのか? 198 2005-04-15 11:15 ┣[shiro lava.net ] 201 2005-04-15 12:02 ┃┣[t.machida.unicom jco] -> 202 2005-04-15 12:16 ┃┗[maeda-langsmith atus] 199 2005-04-15 11:32 ┗[maeda-langsmith atus] 200 2005-04-15 11:50 ┣[maeda-langsmith atus] 203 2005-04-15 12:27 ┗[t.machida.unicom jco] 204 2005-04-15 12:52 ┣[matz ruby-lang.org ] 209 2005-04-16 14:26 ┗[maeda-langsmith atus] 210 2005-04-16 15:41 ┗[t.machida.unicom jco] 211 2005-04-16 15:47 ┣[t.machida.unicom jco] 212 2005-04-16 16:13 ┗[matz ruby-lang.org ] 213 2005-04-16 16:31 ┣[maeda-langsmith atus] 215 2005-04-16 16:54 ┃┗[matz ruby-lang.org ] 214 2005-04-16 16:35 ┗[t.machida.unicom jco] 216 2005-04-16 16:59 ┣[matz ruby-lang.org ] 217 2005-04-16 17:34 ┃┗[t.machida.unicom jco] 219 2005-04-16 18:20 ┃ ┣[kmori lsi-j.co.jp ] 220 2005-04-16 19:32 ┃ ┗[shiro lava.net ] 221 2005-04-17 00:16 ┃ ┣[matz ruby-lang.org ] 222 2005-04-17 14:46 ┃ ┗[hyuki hyuki.com ] 223 2005-04-18 00:30 ┃ ┗[matz ruby-lang.org ] 218 2005-04-16 17:43 ┗[maeda-langsmith atus]