4

'98 年の元の仕様によると、Ben Olmstead Malbolge VM は、前の 2 つのセルでクレイジーな操作を使用して空のメモリ セルを埋めます。「初期化されていないセルは、前の 2 つのセルに対して op を繰り返し実行することによって設定されます。」いえ

[m] = crz [m-2], [m-1]

プログラムに命令が 1 つしか含まれていない場合、正気を保つためにどうすればよいでしょうか?

または、最後の文字は常に であると想定する必要がありEOFますか?

4

1 に答える 1

2

実装と言語法から判断すると、2 つのオプションがあります。

  • 「前の 2 つのセル」の定義を文字通り、前の 2 つのセルと見なすと、仕様に従って実行できないため、単一文字または空のマルボルジ プログラムは言語では違法です。

  • の定義を考えると[m] = crz [m-2], [m-1]面白くなります。主な実装 (おそらく残りのほとんどと同様) は、メモリ ポインターにunsigned short(または) を使用します。( )からint減算しようとすると、10 進数になります(詳細については、この回答を参照してください)。これは、malbolge のメモリ制限を少し超えています。このグリッチは通常のマシンでは(ほぼ)完全に動作し、セルを異常な操作のコンピューティングに使用します (環境外のメモリに害を与えることさえありません!) が、限られたメモリまたは仮想マシンでは失敗します。21m-20xffff65535590490xffff

    • ポインターの使用方法によっては、0xffffffff代わりに が表示される場合があります。0xffff

要するに

  • 手動で実行する場合は、失敗すると想定してください。
  • 仮想マシンで実行すると失敗します
  • シミュレータで実行すると、おそらく動作0xffffしますが、環境メモリに沿ってランダムな値につながるランダムな値のメモリ セルであるため、実行自体に失敗します。一方、1 バイトのマルボルジ プログラムには何が期待できるでしょうか。
于 2017-01-10T16:26:41.957 に答える