「レジスタ」とはハードウエアをうまく使いこなして、演算させるためのメモリといえる。
あきらかにMelスクリプトやC++、Pythonで使われている「変数」と
ハードウエアの制約からデータを一時保管しておく「レジスタ」ことはことなる。
その違いとつながりをうまく説明したものはないものか、少し検索してみた。
MASM32によるアセンブラ入門:パート2
「アセンブラには変数はありません。少なくとも、C++で使われているような意味での変数はありません。」
「レジスタは変数に似ていますが、プロセッサのみが使用するという点が異なります。先ほど「高等言語のような意味での変数は存在しない」と言ったのはそういうわけです。」
「プロセッサチップ上には一定数のレジスタのみが存在します。レジスタは「プロセッサチップ上に物理的に存在し、プロセッサ用にハードコーディングされた変数である」と考えるとわかりやすいでしょう。」
同じ「メモリを使う」という発想からきているが、
「レジスタ」と「変数」は違う物ということだ。
「レジスタ」はハードウエアであり、
「変数」は物理メモリ上に保存されるものの、仮想の設定である。
そうすると最初の疑問
「なぜ変数がプログラミングには必要なのか?」
「なぜ一時的にある情報を記憶しておく必要があるのか?」
に対する回答は、ハードウエアから考えていくと答えが見つからなくなってくる可能性がでてきた。
「逐次処理の中で、一時記憶の場所を利用する」というのは、
もしかしたら人間の思考の構造として必要なものかもしれない。
ここでチューリングマシンの定義にもどって考えてみる。
チューリングマシンは、「脳が問題を解くプロセスを、仮想のコンピュータに置き換えた」ものであることからもそれが正しい回答かもしれない。
チューリング機械の解説
「アルゴリズムによって計算できる関数は全て原則的にはチューリング機械によって計算することができ、(略)」
「チューリング機械ではこのような動きが逐次的に行われていく」
「アルゴリズムによって計算できる関数は全て原則的にはチューリング機械によって計算することができ、逆にチューリング機械で解けない問題にはアルゴリズムは存在しないと言える。」
「つまり、アルゴリズムの判定をする機械がチューリング機械である。」
ここから考えると、コンピュータの設計は人間の思考(計算)を実現するために生み出され、
アルゴリズムを処理することが目的だ。
コンピュータがあるからアルゴリズムが生まれたわけではない。
もうすこし自分なりに「メモリを使う」ということについて考えてみる。
1)「アルゴリズムを機械で処理しようとするとデータを次の処理に引き継ぐための一時記憶場所が必要になる。」
2)「人間がアルゴリズムにしたがって何かを処理しようとすると、データを引き継ぐために一時記憶場所(メモリ)を使う必要がある。」
のどちらかがその出所ではないかと思う。
アルゴリズムを論理回路で処理できるまでに細かく分解していくと、一時記憶場所が必要になるのかもしれない。
そうであるとしたら、
3)「人間が機械で処理できるまでにアルゴリズムを細かくわけていくと、一時記憶場所が必要になる」
というほうが近いのかもしれない。
アルゴリズム入門
アルゴリズム
<アルゴリズムの表現(wiki)>
アルゴリズムの記述は、チューリング機械に関する記述として以下の3つに分類される。
「高レベルな記述: 自然言語でアルゴリズムを説明したもの。詳細は省かれている。このレベルでは、テープやヘッドの動きまでは説明しない。」
「実装レベルの記述:チューリング機械のヘッドの動きやテープへのデータ格納方法を自然言語で説明する。このレベルでは機械の状態や遷移関数の詳細は説明しない。」
「形式的記述: 最も詳しい説明。チューリング機械の「状態表」を提示する」
上記のことからすると、
「人間が機械で処理できるまでにアルゴリズムを細かくわけていくと、一時記憶場所が必要になる」
ということで正解なのかもしれない。
「それはなぜか?」というとまだわからない(泣)
それに、これは変数への回答ではなく「レジスタ」への回答だ... orz
いつのまにか話が脱線している(><)
でも答えに近づいてきたような気はする。
追加メモ:
「そのデータは処理によって形をかえていく必要がある。そこで変数という概念がつかわれる」
「変数によってデータを特定の値ではなく抽象的な値として扱うことが出来るようになった」
とうことを推測している。
高級言語がうまれて、その「変数」の概念がが抽象的なものとして一人歩きをはじめ、自由度がたかまったのではないだろうか。
このあたりは高級言語の「変数」をもっと調べてみないといけない。
0 件のコメント:
コメントを投稿