[前][次][番号順一覧][スレッド一覧][生データ]

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]