12 |
GameFSMの改良 |
過去の外部発表記事において、初めてのBSVによるかなり規模の大きなプログラムを開発しましたが、まだノウハウがあまりなかったため、以下のような課題がありました。
改良点
本プログラムには、以下のような改良点があります。
・グローバル変数のローカル化
関数内でのみ使用している変数は、通常関数スコープ内で定義されるローカル変数とすべきですが、現在はグローバル変数になっている。
・関数内シーケンシャル構文のローカル化
メインループでは関数を多数呼び出していますが、それぞれがインライン展開されているようです。これはBSCコンパイル時間も1時間以上と莫大になり、また資源も再利用できないので、サブルーチンのように呼び出したい。
ChatGPTも"5"になり、相当推論能力も上がっているので、ChatGPTの助けを借りてこの辺りを最適化してみます。
現状は例えばCopyAreaは9回呼び出されていますが、functionであり、moduleではないため、メインモジュールからinlineで呼び出され、そのたびに展開されるのでハードウエアとしては膨大な量になります。
一方、module化すれば呼び出し毎にインスタンスされないので、関数は再利用され、また呼び出すパラメータはローカル変数化できるようです。BSVにローカル変数は無いとのことでした。