SunabaWebをTypeScriptで開発した

平山尚著「プログラムはこうして作られる プログラマの頭の中をのぞいてみよう」のレビュー記事を書いて、あらためてSunaba言語いいねと思いました。

平山氏のgithubのSunabaWebは、まだ開発途中のようです。SunabaWebは、HTMLとJavaScriptで書かれています。

ninton版

ソースファイルを見ると、もう少しで完成という雰囲気です。そこで勝手ではありますが、ぼくがTypeScriptで実装にチャレンジしました。

オリジナル版のサンプルプログラムがひととおり動いたので、nintonのgithubに公開しました。

github pageを設定しました。SunabaWebの動くところを確認できます。古めのPCでも、新しめのPCでも、同じぐらいの速さで動きます。

平山氏githubのsamples/サンプル/お手本.txt をコピペして、[実行]ボタンをクリックしてください。テトリス風ブロックが落ちてきます。上矢印キーで回転、左右矢印キーで左右移動します。

苦労したところ

Parser、CodeGenerator、FunctionGeneratorクラスをC++ソースから移植したこと。行数ベースで半分近くになりました。また、C++のmapオブジェクトの->first、->secondを見慣れなくて、自信のないまま移植していました。

オリジナルのWindows版をVisual Studioでビルドして、デバッガで変数の値を確認したこと。VSCodeでもデバッガで変数表示しながら、同じsunabaソースを入力して、生成されるトークン配列や構文ツリーが同じになるように、デバッグ作業しました。

最後になってからeslint+airbnbを導入したので、大量のeslintエラーの修正が大変でした。gitのコミットメッセージにも大量の「eslint」が残っています。最初からeslint+airbnbを導入しておけばよかった。

平山氏オリジナル版

平山尚著「プログラムはこうして作られる プログラマの頭の中をのぞいてみよう」は、Sunabaというプログラミング言語を使って、テトリス風ゲームを作っていきます。

平山氏のgithubで、Windows版、macos版のソース、バイナリが公開されています。

Sunaba言語は、メモリの番地に書いたり、読んだりして、プログラムを作ります。

おもしろいのは、メモリの60000番地から69999番地が、100×100ディスプレイのVRAMになっていることです。VRAM領域に値を書くと、ディスプレイの対応する位置の色が変化します。

また、50000番地を読むとマウスのX座標がわかり、50004番地を読むと矢印の左キーが押されているかがわかります。

# ディスプレイの左上(0,0)に白い点を表示する
メモリ[60000] → 999999

# 矢印の左キーが押されていたら
メモリ[50004] = 1 ならばCode language: PHP (php)
タイトルとURLをコピーしました