情報証明論 第6章 ソフトウェアの論理モデルT

 第1節 データ上書きの弊害と運命論

目次


第1節 データ上書きの弊害と運命論

第2節 上書きをしないプログラム

第3節 条件分岐

第4節 プログラムの論理モデルと関数化


テスト

Logをみる

Back
 

第6章 ソフトウェアの論理モデルT 第1節 データ上書きの弊害と運命論

 プログラムの中で、i=i+1 というような処理は頻繁にあります。これは数学的にはおかしな等式ですが、変数iに上書きが行われているわけです。

 またワープロのファイルの書き出しでも、上書き機能はよく使われます。

 しかし上書きというのは実は間違って書いたとき回復不能、という意味で危険な機能なのです。例えば空白のデータを元のデータに上書きしてしまうと、もう回復できません。 もし共有のファイルサーバがあって、そこに共通のファイルがあったとしましょう。各々はそのファイルのコピーを自分のパソコンに持っていたとします。

 しかしもし誰かが誤って間違ったデータをファイルサーバに上書きしたとします。また各人はその間違ったファイルを自分のパソコンにダウンロードして上書きしたとします。 すると一瞬にして会社中のそのファイルは消えてしまう訳です。

 もし誰かが自分のパソコン内の同名のファイルを別の名に変更してから、ファイルをダウンロードしたとしますと、その人のお陰で会社のデータは助かるわけです。

 今、かつてないほどメモリもディスクも大容量になり安くなりました。従ってなるべく上書きせずにすますことはできないでしょうか?

 例えばi=i+1とせずに i[k+1]=i[k]+1のように、同じiでなく、別名の変数(ここでは配列)を使ったらどうでしょうか。配列はそれほど領域を取りません。領域が足りなくなる前に、iがオーバーフローするはずです。

 上書きをやめると、面白いプログラムの特徴が出てきます。変数はすべて、右辺に表れるのに先だって左辺に現れなくてはいけない、とするのです(勿論そうしないと、代入していない、あるいは初期化されていない変数の値、すなわちゴミを読みこむことになります)。

 もし、全ての変数に最初にあったゴミデータがたまたま最初に代入されたデータと一致した、と仮定しましょう。そんなことはあり得ないでしょうが、万が1そうであっても、処理の結果には何の影響も与えないでしょう。

 つまりこう考えるのです。「自分では新しい値を変数に書きこんだつもりだが、実は神がそれを見越して予め同じ値をその変数にセットしていた」というものです。そうであれば代入という行為は実行的行為ではなく、単に神が与えた値と自分が使いたいと思った値を比較して同じだと確認しているだけだ、と考えるのです。

 このような考えは運命論的な考えだといえますが、結果については、普通の考え(自分が実行したからこうなった、という考え)と何も変わらないのです。