- 現在の構成は
parserがかなり広く、compilerと runtime ABI がまだ薄い段階です。 - 現在の実装は
motion_movestepsを含む動き系の一部、見た目の say/think と大きさ変更、変数代入と加算、制御の repeat/forever/if/ifelse/wait until、タイマーリセットまで進んでいます。 - 次にやるべきことは、残っている
looks/sound/event/data/controlの未対応分岐を減らしつつ、DataExprとリスト系の IR 生成を切り出していくことです。
- CLI (
run/stats/json) は変更しない。 - 文字列の内部表現と runtime ABI は現状維持に寄せる。
StringStructへの移行、xyo_dtoaの本格接続、新しい string helper ABI は別タスクに分離する。
- Toolchain を先に固定する。
.github/workflows/build.ymlを正として、repo-local.llvm/<os-arch>を使うローカル手順かスクリプトを用意し、LLVM_SYS_211_PREFIXとLLVM_CONFIG_PATHを必須前提にする。 - 文字列/runtime 側の変更は別タスクで扱う。
src/compiler/types.rs/src/compiler/utils.rs/src/compiler/blocks/literal.rsの pointer-based string 変更と、bitcodes/c/dtoa.cの rename は分離して進める。 - テストとドキュメントを実装結果に合わせて追随させる。
tests/template_cli.rsをテンプレのまま残さず、tests/fixtures/simple.sb3のような最小 fixture でstatsとrunの smoke test を作る。 README とdocs/markdown/blocks.mdの IR 対応数を現状に合わせる。
llvm-config --versionが21.1.xを返す。cargo buildとcargo testが通る。runの smoke test で、motion / looks / control / sensing / data の現行 IR 対応範囲が崩れていないことを確認する。statsの opcode 出力にmotion_movestepsとcontrol_ifなど現行 IR 対応 opcode を含む fixture がテストで確認できる。
- 直近の目的は「新しい大きな runtime 設計」ではなく「IR 対応範囲を段階的に広げながら build 可能性を保つこと」。
- 文字列 ABI は今は固定しない。runtime 側の置き換えは別タスクで進める。
- テスト用の小さな
.sb3fixture をリポジトリに置く方針で進める。
- まず未対応の IR 分岐を切り分ける。
looksの残り、sound、event、dataのリスト系、controlの残りをカテゴリ単位で整理する。 DataExprの lowering を追加する。DataItemOfList/DataItemNumOfList/DataLengthOfList/DataListContainsItemを IR に落とし、DataListContentsの扱いも含めてリストの ABI を決める。- 見た目と制御の残りを埋める。
LooksStmtのサイズ以外、ControlStmtのWait/RepeatUntil/RepeatWhile/AllAtOnce/CreateCloneOf/DeleteThisClone/Stop/ForEach/ カウンター系を実装対象にする。 - 最後に build と smoke test を固定する。
cargo build/cargo testに加えて、motion_movesteps、control_if、looks_say、sensing_resettimerが混在する fixture でrunが落ちないことを確認する。