20230801日記。

  • ゲーム開発
    • ED用の素材を作成
      文字の取り扱いが問題だったけど諦めました。
      エフェクト扱いで作ります。今後もこうなる可能性が高いです。
    • DLカード発注
      テンプレートを用意してあるので底に当てはめる形で作成の上、発注済み。
      これで最低限の頒布は可能になりました。
    • OPの制御整理・画像作成
      遷移周りが人間に理解できるか怪しくなってきたので、内容を整理しておきました。
      これで再利用しやすくなる。
    • ビルド試行
      実行ファイルに固める準備を行いました。これやってないと後で困るので。
    • 作曲(²)
      2曲めを作成。これらをループすることになります。
  • プログラミング
    • MiniscriptのTACについて
      Three-address code – Wikipedia
      日本語のほうはこっち
      3番地コード – Wikipedia
    • どうもアセンブリ言語のことではなく、アセンブリより前に単純な計算に落とし込むって感じか。
    • MiniscriptはOpCode含めたTACに変換して、そこに適合する一時的な変数(以降テンポラリ変数と記述)を用意して、MiniscriptのVMで計算する感じになってるみたい。
    • なので、文字列としては依然として存在してて、コンパイルするとなるとコードの簡略化・最適化を行うとかになるのかと思う。
      オペコードやテンポラリ変数をただの数値扱いにするとしても、パーサーは実行しているため「変数名」は残ってしまうわけで、C#での実装だとここでstringを使って保存している可能性はある。
    • 更にいうとMiniscriptの仕様として文字列は利用可能なので、どちらにしてもstringでデータを持つのが早い。となるとテンポラリ変数もstring扱いにしてる可能性がすっごく高い。
    • つまり以下の可能性がある
      • Interpreter実行の時点で、最低限の計算に落とし込む(これがTAC)
      • アドレスコードはその場で割り当てられる(MiniscriptのInterpreterの実装に依存するため、ずっと同じアドレス・テンポラリ変数にはならない)
      • 実行時、割り当てられたテンポラリ変数を使って計算する
    • 現状だと、事前コンパイルについては期待できない(互換性が維持できない)と考えるべきかなーと。
    • 公式ディスコードでも「保守が大変になる」旨を制作者が語っている(そもそもTACは途中計算扱い)。