レジスタとスタック
疑問点
レジスタ ベースの仮想マシンを使用することと、スタック ベースの仮想マシンを使用することの利点と欠点は、具体的にどのようなものでしょうか。
私には、レジスタ ベースのマシンはプログラムするのがより簡単で、より効率的であるように思えます。 では、なぜ JVM、CLR、および Python VM はすべてスタックベースなのでしょうか?
どのように解決するのか?
これは、Parrot VMのFAQや関連ドキュメントで、すでにある程度の回答がなされています。 Parrot の概要 その文書から関連するテキストは次のとおりです。
Parrot VM はスタックアーキテクチャではなく、レジスタアーキテクチャを採用しています。また、Perl や Python などの中レベル オペレーションよりも Java に近い、非常に低レベルのオペレーションを行います。
この決定の理由は、主に、基礎となるハードウェアにある程度似ていることによって、Parrot バイトコードを効率的なネイティブ機械語にコンパイルダウンすることが可能であるためです。
さらに、高レベル言語の多くのプログラムは、関数とメソッドのネストされた呼び出しで構成され、時には中間結果を保持するための語彙的変数があります。非 JIT 設定では、スタックベースの VM は同じオペランドを何度もポップしてからプッシュしますが、レジスタベースの VM は単に適切な量のレジスタを割り当てて操作するだけなので、操作量と CPU 時間を大幅に削減することができます。
こちらも合わせてお読みください。 インタプリタ設計のためのレジスタとスタック 少し引用します。
<ブロッククオートスタックマシン用のコードを生成するのが簡単なのは本当に間違いないです。1 年生のコンパイラーの学生のほとんどは、それができます。レジスタ マシンをアキュムレータ付きのスタック マシンとして扱わない限り、レジスタ マシンのコードを生成するのは少し困難です。(ターゲットの単純さは、少なくともわたしにとってはそれほど大きな問題ではありません。その数は少ない。もうひとつの問題は、コンパイラーの知識を持つ人々の多くが、一般に使用されているハードウェア CPU がすべてそうであるように、すでにレジスタ マシンをターゲットにすることに満足しているということです。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] グリーンフィールド・アプリケーションとブラウンフィールド・アプリケーションとは?
-
[解決済み] 並行処理と並列処理の違いは何ですか?
-
[解決済み] 不変量とは何ですか?
-
[解決済み] 直交性」とは何ですか?
-
[解決済み] スタックオーバーフローを引き起こす最短のコードは何ですか?[クローズド]
-
[解決済み] コードゴルフ - π day
-
[解決済み] 大文字と小文字が異なるだけの変数名を使用するのは不道徳ですか?
-
[解決済み] プログラミングのための理想的なキーボードレイアウト【終了しました
-
[解決済み] コードゴルフ:ピアノ
-
拡張性のあるソフトウェア(プラグインアーキテクチャ)を設計するには?[クローズド]