Subject | : Re: SAD Update. V1.0.10.4.13a TYPE, DISP, Close |
Article No | : 947 |
Date | : 2011/08/05(Fri) 13:29:38 |
Contributor | : Akio Morita |
今更な話ですが、 > 2. Close now takes more than 1 file numbers. It behaves as: > Close[x__] := Close/@{x}; > Close[{x_,y}] := Close/@Range[x,y]; で導入されたされた、Range Close構文 Close[{begin_Real, end_Real}]なのですが、 具体的なユースケースはどのようなものでしょうか?
意図しない結果を生み出すユースケースとして、TCPOpen[], TCPAccept[], Pipe[]等の 入力用と出力用のLUNペアを返す一連の関数に対して、Read[], Write[]は LUNペアを渡すと自動的に使い分ける機能が有ります。 こうしたユースケースでは、プログラマは次のようなコードを無自覚に書く可能性があります。
fd = TCPAccept[]; input = Read[fd]; Close[fd];
問題は、LUNペアを生成する際に LUNを低位から走査して空いている番号を割り付けるので、 LUNペアが連番にならないケースが存在します(当然、間に含まれるLUNは使用中になります)。 このケースでは、Close[fd]で本来意図しない LUNも閉じてしまいます
* Range Closeのユースケースが無いのなら * Range Closeを廃止する * Close[{luns__Real}] := Close[luns]にしてしまう べきだと思うのですが、ユースケースをお持ちの方いらっしゃいませんか?
|