「抽象機械」の版間の差分
削除された内容 追加された内容
m fix template param obsolete error タグ: 2017年版ソースエディター |
編集の要約なし |
||
2行目:
| 出典の明記 = 2009年10月<!-- ノートに議論がないため2013年8月に未検証から出典の明記に書き換え -->
}}
'''抽象機械
==
[[理論計算機科学]]ないし主に[[計算理論]]がこれに関係する主たる分野であるが、現実のコンピュータへの応用などもある。他の「機械っぽくない」[[計算モデル]]も含む一般的な議論はそちらを参照のこと。
[[チューリングマシン]]の提案がそうであったように、[[計算可能性理論]]でも使われるが、[[レジスタマシン]]の記事にあるうちのいくつかのような、現実のコンピュータに比較的近い抽象機械は、[[計算複雑性理論]]や、あるいはより現実的な実際のコンピュータにおける計算量の議論のために使いやすいといったことに特徴がある。
1例として、チューリングマシンにおけるテープは、読み書きしたい目的の場所まで、ひとコマずつ移動させなければならず、少しでも複雑なことをすると途端に必要なステップ数は膨大となる。そのため、実際のコンピュータで使うようなアルゴリズムの計算量の検討には、チューリングマシンは向かない。それに対し例えば、random-access machineの頭字語で「RAM」という抽象機械は([[:en:Random-access machine]])、名前の通りメモリにランダムアクセスが、すなわちメモリのどこでも一定ステップで読み書きが、できる。
キャッシュメモリなど、記憶の階層([[:en:Memory hierarchy]])の段階が増えてきている近年では、速いメモリをできるだけ使うことが高速化の鍵になっており、計算量の議論もそれを考慮する必要がある場合もある。それを考慮した抽象機械の必要性もあるかもしれない。
[[SECDマシン]]のような、より実用を目的とした抽象機械もある。他の例としては、[[OCaml]]のベースであるCamlは、もともとはCategorical abstract machine([[:en:Categorical abstract machine]])という抽象機械をベースとした実装だったことからその名前が付いた(後に別の抽象機械をベースに、大幅に改造された)。そのような抽象機械と、「[[仮想機械]]」という語が指すものとの違いは、いくぶんはっきりしない。明確に分けることは不可能だが、抽象というよりは具体に近いほうが仮想機械と言えるであろう(歴史的理由から、仮想機械(virtual machine)という語は、全く無関係ではないにしても異なった2種類のものを指すようになってしまっている。英語版 [[:en:Virtual machine]] で system virtual machine ではなく process virtual machine としているほうが、ここで議論しているほうである)。
==階層的分類==
いくらかの抽象機械は、階層的に分類できる。ここでは[[チューリング完全]]のもののみを対象とする。以下は網羅したものではないし、このような分類のしかたが唯一のものというわけでもない。
:属 (1.1) テープベースの[[チューリングマシン]]モデル▼
:属 (1.2) レジスタベースの[[レジスタマシン]]▼
: { シングルテープ、マルチテープチューリングマシン、決定性チューリングマシン、非決定性チューリングマシン、Wang B-マシン、ポストチューリングマシン、[[神託機械]]、万能チューリングマシン }▼
* 直列計算の機械
* 並列計算の機械
::{ アバカスマシン、Lambekマシン、Melzakモデル、ミンスキーマシン、Shepherdson-Sturgisマシン、プログラムマシンなど }▼
以下は直列計算の機械のみである。
::{ [[ハーバード・アーキテクチャ]]における状態機械の''間接アドレス指定''を追加した命令を除いたCounter-machine modelモデル; ハーバード・アーキテクチャにおける状態機械の命令を除いた間接指定アドレッシングを追加した「アキュムレータ」を伴う任意のモデル }▼
▲
** counter machine、RAM(Random-Access Machine)、RASP(Random-Access Stored-Program machine)、pointer machine
レジスタベースのそれぞれについての詳細は以下のようになる。
::= { Schonhage Storage Modification Machine SMM, Kolmogorov-Uspensky KU-machine, Knuth linking automaton }▼
* counter machine
▲**([[:en:
* RAM(Random-Access Machine)
▲**([[:en:
* RASP(Random-Access Stored-Program machine)
** ([[:en:Random-access stored-program machine]] も参照)[[ノイマン型|ノイマンマシン]]
* pointer machine
▲** ([[:en:
<!--Within each of the model-species there are varieties.
48 ⟶ 45行目:
There are models with "convenience instructions" (e.g. unconditional-J xxx, CLR h; CPY a,b ) including in particular:
* 2-operand: Shepherdson-Sturgis (1963), Minsky (1967) -->
==その他の
▲*[[:en:Caml]] (Categorical abstract machine language)
*[[有限オートマトン]]
▲* [[Prolog]]用の抽象機械:
**[[:en:Warren Abstract Machine]]
*[[SECDマシン]]
*[[:en:Ten15]]
**[[:en:TenDRA Distribution Format]]
==脚注==
|