3.2 Data handling

ほとんどの VM は、 VM 命令間で一時データを渡すために 1 つ以上のスタックを使用します。 私達は、 通常、 スタック・アーキテクチャを使用する方が簡単かつ高速であると考えていますが、 もう一つのオプションとして、 仮想マシンにレジスター・マシン・アーキテクチャを使用することが考えられます。

ただし、 このオプションはスタック・マシン・アーキテクチャよりも実装に時間がかかるか、 非常に複雑です。

Vmgen にはスタック VM に対する特別なサポートと最適化があり、 スタック VM の実装が簡単かつ効率的に行えます。

また、 Vmgen (see Register Machines) を使用して レジスター VM を実装することもできます。 その場合でも、 あなたは Vmgen のほとんどの機能を活用できます。

スタック項目はすべて同一サイズなので、 通常は整数やポインターや浮動小数点数値は同じサイズ幅になります。 Vmgen は、 2 つの連続したスタック項目を単一の値として扱うことをサポートしていますが、 それより大きいものは、 スタックに置いた、 データへのポインターを使用して、 他のメモリ領域(ヒープなど)に保持するのが最適です。

もう 1 つのデータ源は、 (VM 命令ストリーム内の) 即時引数 VM 命令達(immediate arguments VM instructions)です。 VM 命令ストリームは、 Vmgen のスタックと同様に処理されます。

Vmgen には、 「ガーベジ・コレクション」に対するサポートも制限も組み込まれていません。 ガベージ・コレクションが必要な場合は、 ランタイム・ライブラリーでそれを提供する必要があります。 「参照カウント」(reference counting)を使用するのはおそらく困難、 可能な場合もあります(興味がある場合は私達にお問い合わせください)。