|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Scratch の
このドキュメントについて
このドキュメントは
目次
Scratch と .sb3 について
Scratch は MIT メディアラボが開発したビジュアルプログラミング環境で、ブロックをドラッグ&ドロップして組み合わせることでプログラムを作れます。
Scratch プロジェクトは
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| フィールド | 説明 |
|---|---|
blocks
|
ブロックの辞書。ブロック ID をキーにしてブロック情報が格納される |
variables
|
変数の辞書。変数 ID をキーに名前と初期値が入る |
lists
|
リストの辞書。リスト ID をキーに名前と初期値が入る |
costumes
|
コスチューム情報の配列 |
sounds
|
サウンド情報の配列 |
isStage
|
このターゲットがステージかどうか |
各ブロックは次のフィールドを持ちます。
| フィールド | 説明 |
|---|---|
opcode
|
ブロックの種類を表す識別子 (
motion_movesteps
など)
|
inputs
|
ブロックへの入力(数値・文字列・他のブロックへの参照) |
fields
|
ドロップダウンメニューの選択値 |
next
|
次に実行するブロックの ID(連鎖構造) |
parent
|
親ブロックの ID |
topLevel
|
スクリプトの先頭ブロックかどうか |
xyo-rust
は以下を目標としています。
完全な Scratch 互換ランタイムを作るのではなく、「Scratch プロジェクトをどこまで静的に処理できるか」を探ることが現在の中心です。
| 段階 | 内容 | 状態 |
|---|---|---|
| 1 |
.sb3
を ZIP として開き
project.json
を取り出す
|
✅ 完成 |
| 2 |
project.json
を Scratch プロジェクト構造へ変換する
|
✅ 完成 |
| 3 | hat block からスレッドを解析する | ✅ 完成 |
| 4 |
Stmt
/
Expr
に変換する(パーサー)
|
✅ ほぼ完成(86 opcode) |
| 5 | 一部の式 / 文を LLVM IR へ変換し、JIT で実行する | 🚧 一部実装(動き系 + 演算子) |
| 6 | 生成した IR から実行可能ファイルを作る | ❌ 未実装 |
xyo-rust
は Scratch プロジェクトをネイティブコードへ変換するため、以下の 4 段階のパイプラインを通します。
.sb3
│
▼
SB3 ロード(src/sb3.rs)
│ ZIP を展開して project.json を読み込む
│
▼
デシリアライズ(src/types/)
│ JSON → Rust の ScratchProject 構造体
│
▼
パース(src/parser/)
│ hat block → Thread (スレッド)
│ 各ブロック → Stmt / Expr (AST)
│
▼
IR 生成(src/compiler/)
Thread → LLVM 関数
Stmt/Expr → LLVM IR 命令列
最適化パス(O3)を適用
JIT で各スレッドを実行
→ 標準出力へ実行結果を表示
詳細は アーキテクチャ を参照してください。
目的に合わせて読み始めるページを選んでください。
| 目的 | 参照ページ |
|---|---|
| まず動かしてみたい | セットアップ |
| コマンドの使い方を知りたい | CLI |
| 対応済み opcode を確認したい | 対応ブロック一覧 |
| 内部構造を把握したい | アーキテクチャ |
| コントリビュートしたい | アーキテクチャ → 対応ブロック一覧 |
.sb3
サンプルは同梱されていません。Scratch エディタからエクスポートしてください
run
サブコマンドは実験的で、動き系 + 演算子のみ対応しています
続きは セットアップ を参照してください。