Subject | : Re: SAD Update. V1.0.10.4.13a TYPE, DISP, Close |
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]にしてしまう
べきだと思うのですが、ユースケースをお持ちの方いらっしゃいませんか?