Udon VM 向けのコンパイラを作る[5]

中間言語ができたので高級言語を作っていきます
1
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

やる ・型推論 ・関数のオーバーロード(型クラスで) ・forループとwhileループ ・高階関数 ・無名関数 ・再代入可能なグローバル変数 やるかも ・部分適用 ・簡単なモジュールシステム 今はやらない ・再代入可能なローカル変数(malloc がだるい) ・再帰関数(スタックの管理がだるい)

2020-01-06 21:52:58
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

部分適用はまぁ arity 数えてラムダ抽象被せるだけなのでな

2020-01-06 21:58:27
Ram.Type-0@VRC @RamType0

@cannorin_vrc 関数の実装今思ったけどJUMPINDIRECT使えば楽勝なのでは

2020-01-07 00:48:57
Ram.Type-0@VRC @RamType0

@cannorin_vrc ・return先プログラムカウンターのスタックを用意 ・呼び出し前にスタックにreturnプログラムカウンターをPush ・returnはプログラムカウンタースタックからPopしてJumpIndirect アセンブリの一番最初でプログラムカウンタースタックに0xFFFFFFをPushしておく事でエントリーポイントも統一的に扱える

2020-01-07 00:57:25
Ram.Type-0@VRC @RamType0

Udonの命令セット今気づいたけど Udon VMでネイティブサポートされないクラスへの参照を VM上に実装するの不可能では

2020-01-07 12:44:07
Ram.Type-0@VRC @RamType0

全部object配列に詰めれば理論上可能だけど出来るとか書くとUdon VM製作者のセンスだとじゃあいいじゃんとか言ってきそうで困る

2020-01-07 13:16:36
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

Udon で使える関数を検索できる Udon Extern Search (Udon 関数検索) を公開しました. 7colou.red/UdonExternSear… #MadeWithUdon pic.twitter.com/VVgLvUDEV1

2020-01-07 15:36:54
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

これは ・スタック位置の導出 ・extern の型情報を json にシリアライズしてフロントエンドで読めるようにする の PoC です これらに加えて補完エンジン用に Trie を実装しましたが部分一致をしたいので検索には使ってない

2020-01-07 15:47:10
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

スタック位置が降順になってるのは PUSH する順番がそうだからです

2020-01-07 15:48:41
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

こんな副産物のためにバックエンド用意したくないので 4MB くらいの JSON を雑に読み込んでます ゆるしてね

2020-01-07 15:57:09
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

AND 検索実装し忘れてたので今からします

2020-01-07 16:05:20
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

全てが面倒なので docs/ に webpack 結果全部ぶちまけてそのまま GitHub Pages に上げてる

2020-01-07 16:07:57
Ram.Type-0@VRC @RamType0

UdonVMがクソ過ぎるので自分でVM組んでVRCに投げよう

2020-01-07 16:09:05
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

した そのうち反映されるんじゃない

2020-01-07 16:09:34
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

@Ram_Type64_Mod0 Udon で RISC-V エミュレータ作ってる人がいる

2020-01-07 16:10:37
Ram.Type-0@VRC @RamType0

@cannorin_vrc object配列くんが酷使されてそう

2020-01-07 16:11:25
Ram.Type-0@VRC @RamType0

@cannorin_vrc 動的参照(ポインター)をUdonVMで使いたかったらobject型のフィールドを持つオブジェクトを確保して再起的に詰める必要があるはずなので

2020-01-07 16:19:36
Ram.Type-0@VRC @RamType0

Udon、そもそも例外処理の機構がVMに全くないにもかかわらずEXTERNすると例外がスローされる可能性があるというのが最大の問題なのかもしれない

2020-01-07 18:03:09