平山尚著「プログラムはこうして作られる プログラマの頭の中をのぞいてみよう」のレビュー記事を書いて、あらためて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版のソース、バイナリが公開されています。
- https://github.com/hirasho/Sunaba
- zipダウンロード
https://github.com/hirasho/Sunaba/releases - githubページ
https://hirasho.github.io/Sunaba/
Sunaba言語は、メモリの番地に書いたり、読んだりして、プログラムを作ります。
おもしろいのは、メモリの60000番地から69999番地が、100×100ディスプレイのVRAMになっていることです。VRAM領域に値を書くと、ディスプレイの対応する位置の色が変化します。
また、50000番地を読むとマウスのX座標がわかり、50004番地を読むと矢印の左キーが押されているかがわかります。
# ディスプレイの左上(0,0)に白い点を表示する
メモリ[60000] → 999999
# 矢印の左キーが押されていたら
メモリ[50004] = 1 ならば
Code language: PHP (php)