読者です 読者をやめる 読者になる 読者になる

hs2bf - 可視化

今度こそうまくいったので、成果と今後の方針について。

昨日言ったようにSAMのインタプリタを実装して問題の切り分けを試みたのですが、
いたるところで問題がおきて、結構fixに手間取りました(30個ぐらいのバグ)。


前より長くなってしまったので、今回はリンクを張っておきます。

しかし生成されたコードを眺めているだけではおもしろく無いので、実行の過程を可視化するプログラムも書いてみました。

bfvprof (brainfuck visual profiler)

ひとつめは

  • 上から下にステップ数
  • 左はインストラクションポインタ
  • 右はメモリのポインタ

ふたつめは

  • 横軸: メモリ位置
  • 縦軸: コード位置
  • ステップ: 緑(左上)->赤(下端)

となっています。

結構fancyな感じになっていると思います。


ただ楽しむだけでなく、ふたつめの図で中心付近に真っ白な領域が見えると思いますが、
これでこの部分のコードがまったく実行されていない、というような事も分かります。

(このツールはもうちょっと機能追加・デバッグしたらHackageに上げます)

今後の方針

Haskellの仕様は大きいですし、完成度を高めるのはキリがありません。
そこで「これが動けばひとまず完成」というような目標を決めましょう。

  1. 拡張機能に依存しない (コンパイラ自身をコンパイル、は断念します)
  2. 直接手書き出来ないような物 (既にBFのテキストアドベンチャーがある http://jonripley.com/brainfuck/games/adv.html)
  3. インタラクティブ (IOのフレームワークを活用)


「AI付きリバーシ


BFで動いている相手に負ける、というのもなかなか乙な体験では無いでしょうか。

実際的なこと

さて最終目標も決まりましたので、実装すべき機能も見えてきます。

  • λ lifting (実はまだでした)
  • まともなlaziness
  • 2バイト以上のアドレス
  • GC
  • GMの全てをSAMに変換できるように
  • リテラル
  • よくある演算(掛け算など)
  • ある程度の最適化

あと、テスト用のコードを自動でコンパイルしてパフォーマンスを比較するようなスクリプトも欲しいですね。