Conference Room SAD
[thread display] [new arrival display] [word search] [past log] [管理用]

Subject Re^3: SAD Update V1.0.10.5.4a01 Read
Date: 2012/03/01(Thu) 11:47:39
ContributorAkio Morita

> > > Dear Users,
> > >
> > > 1. A routine for Read, tfwrite.f, has been modified to avoid an unwilling effect probably due to optimization of gfortran.
> > >
> > 読み込み指示子が Stringの場合、Record終端まで読む込み、文字列を返すのが仕様ですが、退行しています
> >
> > 旧実装では、WordSeparatorsオプションの初期値が String指示子("")とそれ以外(" ,\t")で切り替えることで実現していたのが
> > オプション解析器を分離したことにより、String指示子での制御が効かなくなったためです
> >
> > さらに、旧実装にも String指示子に加えて明示的に WordSeparatorsオプションを指定すると
> > Record終端まで読まないバグがあります
>
> 一応、1.0.10.5.4a11で対応したと思います。
>
tfwrite.fを調査中に読み込み指示子が、Expressionの場合の動作も旧実装と変化しているのを発見しました。

A. 旧来の実装の挙動
* Read[fp_Real, Expression] := Read[fp]
* Read[fp_Real, Expression, opt__] := Read[fp, Real, opt]

B. 1.0.10.5.4a11の挙動
* Read[fp_Real, Expression, opt___] := Read[fp]

C. SAD/Tkinterの使い方 13.1.2 Readの解説
* Read[fo_Real]
チャンネル fpから式を読み込み、それを評価した結果を返します。
この場合、一つの Recordで式が完結しない場合、完結するまで読み進みます。

* Real[fp_Real, Expression, opt___]
チャンネル fpから "1語"を読み込み、それを式として評価した"結果"を返します。

* Real[fp_Real, Real, opt___]
チャンネル fpから "1語"を読み込み、それを式として評価した"値"を返します。

状況をまとめると
* (B)の挙動は Real[fp_Real, Expression, opt__]のケースで (A)と異なる
したがって、内部実装の変更に止まらず、仕様変更になっている

* (A), (B)の挙動ともに (C)の解説と異なる
- (C)の解説では、Read[fp_Real, Expression, opt___]は、"1語"読み込みである(WordSeparatorsの影響を受ける)
- "式として評価した結果"と"式として評価した値"という表現上の違いを除けば、Real[fp_Real, Real, opt___]と同義を思われる
- 旧来の挙動(A)のうち Read[fp_Real, Expressiion, opt__]は、(C)の解説と一致している


- 関連一覧ツリー (Click ▼ to display all articles in a thread.)