2024:07:08
文書の過去の版を表示しています。
7/8日記
プログラム
- ライブコーディングツール、まずはテスト的にシーケンス切り出し処理を実装してみる。
- 現在作成中のツールで実装するのでもいいけど複合要因で「どこが間違っているのか分からない」ケースが発生しうるので、できる限り最初から切り分けて考えられるようにした。
- Valueクラスを基準にして再帰関数を作って調べられるようにした。
- せっかくC#での実装を以前に作っているので、同じことするのであればC++上で再現してみることにした。
- まずnote_info構造体を作り、複数の情報を保存できるようにしておく。
- 理由は「音程」「譜面の長さ」「譜面単位の現在の再生位置」「ネスト構造が作られているかどうか」等、意外と判断する情報が多いから。
- 移植は終わって、まともに動いてるよう。
- 後述の問題があって、確認するのは後になりそうだが。
プログラム2
- 問題勃発。
- 仕組み上、グローバル変数を別途保存領域に確保することが困難で、これをどうやって保存したらいいのか、という問題が発生した。
- なお、これはC++版でのみ発生で、C#版については簡単に可能なことを特記しておく。
- MiniscriptはVMを確保して動かしており、変数はそのVMに紐づく形で保存領域を確保している。
- VMの他に別途staticなメモリ領域を確保しても、Miniscriptで利用する型を定義する場合基本的にはアドレスしか保存されておらず、実体の保存および参照が正常に行えないことになる。
- つまり、VMで得た値を簡単な方法でVM外に保存するのが困難ということ。
- ただ、VMの機能上グローバル変数用のマップ(文字列と値のペア)を持っているため、この領域に保存と参照が可能になっている。
- 今回作成中のアプリの形式ではコンパイルと実行を一個のインタプリタで行う事から、再コンパイル時にグローバル変数も最悪消えずに済みそう(初期化してないはずなので)
- この調査のためにDiscordを延々調べてようやくたどり着いたという。すげえ時間かかったわ。
- あとでMiniscriptのWikiに情報アップしておく予定。組み込みする人だと必要になると思うし。
- 16時頃に問題に遭遇、途中で寝てたけどそこから解決まで色々調べていた。
- こういうのがあると情報がない分面倒だなと思う。
2024/07/08.1720459983.txt.gz · 最終更新: 2024/07/09 02:33 by machiaworx