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

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

よく考えたらループの中で関数オブジェクト作られたらクロージャの環境保存で malloc 発生するんで UdonVM で第一級関数無理じゃん

2020-01-07 18:55:51
Ram.Type-0@VRC @RamType0

@cannorin_vrc 再起呼び出しにおけるローカル変数の領域確保なら型別にローカル変数退避用のスタック用意して関数呼び出し前に全部スタックにぶち込めば大丈夫だと思う デリゲートも問題ないはず

2020-01-07 19:01:39
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

@Ram_Type64_Mod0 object[] で自力で Stack<T> 再実装するやつやりたくなさすぎる

2020-01-07 19:04:18
Ram.Type-0@VRC @RamType0

@cannorin_vrc 何でもボクシングなしで積める.NETの VMのスタックに対して余りにも VM自身のスタックが貧弱すぎる

2020-01-07 19:09:02
Ram.Type-0@VRC @RamType0

@cannorin_vrc ちなみに唯一最大の理論上ですら解決不能な問題はtry catchの欠如 これが何とかなればILの命令P/Invoke以外全部1:1で変換できるはず

2020-01-07 19:14:03
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

めっちゃリツイートされてるけどそんなに Udon の関数検索したいことってある?私はコンパイラ作ってるのでしたいですが……

2020-01-07 20:00:26
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

Udon Extern Search ができたから SAnuki もまぁまぁギリギリ使える程度にはなったんじゃない

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

とりあえず言語仕様は固まってきた

2020-01-08 18:28:57
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

多相な関数(含: 型クラス制約)はアセンブラでは全てインライン展開することにした(Udon の event としてはコンパイルしない)

2020-01-08 18:32:31
𝚌𝚊𝚗𝚗𝚘𝚛𝚒𝚗 @cannorin3

ユーザにカリー化について考えさせなくて済むようにタプルを入れるのと,部分適用を実装するのと,クロージャに対応するのと,再帰関数に対応するのが全て同じこと(=malloc 自前実装)なので,どれか一つでも入れるかどうか迷ってしまう

2020-01-08 19:21:23