こうこく
作 ▸
改 ▸

JavaScriptでBrainfuckのインタープリター作った

サイトに『Brainfuck (JavaScript)』をアップしました。

Brainfuckは命令が +-><,.[] の1文字ずつで8種類しかないので、インタープリターを簡単に自作できると聞き、JavaScriptで作ってみたものです。Brainfuckについては下記サイト様がわかりやすかったです。

Brainf\*ck

しかし興味本位で手を出したんですけど、作り始めるまでBrainfuckのことぜんぜん知りませんでした。手前の頭が一番F*ckです。だから、『無限ループしながら入力待ち』というのができるのも知りませんでした。調べたら、Cでもそういうことをやるんですね。Cをろくに書いたことないのがコンプレックスになってきました。

C言語講座:getchar( )とputchar( )

ともかく、そのために1ステップごとにブラウザに制御を戻さないといけませんでした。それは setTimeout() でできますが、でも setTimeout() だとあんまり速度が出ません。delayをゼロにしても、実際にはなんミリ秒か待たされるので微妙に遅いです。

なんとかできないかと調べてみたところ、以下の記事が見つかりました。

David Baron's weblog: setTimeout with a shorter delay

どうやら…………他のページにメッセージを送るための postMessage() を、自分に向かって撃つことで message イベントを発火させ続けると、setTimeout() よりも速く、同じようなことができるみたいです。やばすぎます。試しに使ってみたら本当に爆速でひっくり返ったので、お借りして組み込んでみました。

この記事に何かあればこちらまで (非公開)