実行環境の明示
0.2.0の既定はenvironment:"game"です。pcall、xpcall、error、printなどの開発用機能を必要とするホストは、environment:"extended"を明示してください。assertとグローバルunpackもextended側に置いています。
debug.logはgameから利用できます。debugテーブルにLua標準のデバッグ関数はありません。ホストのブレークポイントや変数検査は、このテーブルとは独立して使えます。
onLogの指定だけでprintは有効になりません。devLogsやenableLogs()はextended専用です。ログ配送先の設定と、Luaへ公開する関数の設定を分けてください。
共通コンパイラの追加
/compilerに解析、複数モジュールのリンク、最適化、プロパティ走査を追加しました。通常のコンパイルにLua VMは不要で、実行だけの利用者がコンパイラを初期化する必要もありません。
対象はVehicleのみです。Addonの実行を使えても、Addonの解析・最適化はまだ利用できません。
未知の外部グローバルは、ソース内に代入がないことを理由に改名・nil化しません。_ENVやextended環境は字句短縮に切り替えます。文字数が従来より増える場合もあるため、ゲームへ出す生成物は改めてサイズを確認してください。
以前からStorm Minを利用していた場合、削除済みの4パスと未知のpass IDはエラーになります。診断の変更、数値モード、property設定はCompilerガイドを参照してください。
ホスト拡張とrequire
任意のホスト値・同期関数をbindingsで渡せます。コンパイラへも同じ環境と拡張名を伝えてください。
開発時のファイル分割にはrequireLoaderを追加しました。LifeBoat方式のinclude-onceで、共有グローバル・別チャンク・戻り値破棄を行います。標準Luaのモジュール戻り値方式や、Compilerの静的リンクとは別です。
ローダーの中でvm.load()へ再入するのではなく、ホストはソースとチャンク名だけを返します。読み込み先のブレークポイント・継続・命令予算はSDKが扱います。
Vehicleのreset
0.1.0では、複数回loadしてもresetで再実行するのは最後のソースだけでした。0.2.0は、正常完了した全loadを元の順番で再実行します。前置き・本体・後置きを別チャンクで構成した初期化を維持できます。 loadはプログラム交換ではなく追加実行です。過去のコードを残したくない編集の反映には新しいVMを作成してください。失敗したload、完了前にresetで破棄したloadは再実行履歴へ入りません。 Addonのloadは従来どおり初回のみです。reload(savedata)とrequireLoaderを組み合わせて、同じ入口から開発用モジュールを再実行できます。