JavaScriptでBrainfuckのインタープリター作った
サイトに『Brainfuck (JavaScript)』をアップしました。
Brainfuckは命令が +-><,.[]
の1文字ずつで8種類しかないので、インタープリターを簡単に自作できると聞き、JavaScriptで作ってみたものです。Brainfuckについては下記サイト様がわかりやすかったです。
しかし興味本位で手を出したんですけど、作り始めるまでBrainfuckのことぜんぜん知りませんでした。手前の頭が一番F*ckです。だから、『無限ループしながら入力待ち』というのができるのも知りませんでした。調べたら、Cでもそういうことをやるんですね。Cをろくに書いたことないのがコンプレックスになってきました。
ともかく、そのために1ステップごとにブラウザに制御を戻さないといけませんでした。それは setTimeout()
でできますが、でも setTimeout()
だとあんまり速度が出ません。delayをゼロにしても、実際にはなんミリ秒か待たされるので微妙に遅いです。
なんとかできないかと調べてみたところ、以下の記事が見つかりました。
David Baron's weblog: setTimeout with a shorter delay
どうやら…………他のページにメッセージを送るための postMessage()
を、自分に向かって撃つことで message
イベントを発火させ続けると、setTimeout()
よりも速く、同じようなことができるみたいです。やばすぎます。試しに使ってみたら本当に爆速でひっくり返ったので、お借りして組み込んでみました。