diff --git a/content/ecsact.md b/content/ecsact.md new file mode 100644 index 00000000..5999223f --- /dev/null +++ b/content/ecsact.md @@ -0,0 +1,13 @@ +#programming-language + +[Ecsact](https://ecsact.dev/) + +[[Entity Component System]]を言語のコアに組み込んだプログラミング言語とランタイムシステム。 + +Componentの仕様と、システムの型宣言のところまではシンプルな言語として実装されていて、宣言されたSystemの実装をどうするかはLanguage-Agnosticな形に任せるという方式を取っている + + ランタイムのAPIが言語としても公開されているので、これを経由してSystemを実装する。 + ゲームエンジンへの埋め込みを想定しているっぽい + +システムを統一した言語で書けるわけではないのがいいのか悪いのかわからんけど、宣言部だけなら[[ProtoBuf]]的な役割を担えそうな予感はする + diff --git a/content/mimiumのモジュールシステム.md b/content/mimiumのモジュールシステム.md index 60ef6695..958893c8 100644 --- a/content/mimiumのモジュールシステム.md +++ b/content/mimiumのモジュールシステム.md @@ -119,17 +119,26 @@ fn hoge(){ ここまでしか型は決定できないということに -ただまあ、型が決定不能ならその時コンパイルエラーにすればいいだけで、一応型推論自体は無限ループに陥らず完了するのか? +ただまあ、型が決定不能ならその時コンパイルエラーにすればいいだけで、一応型推論自体は無限ループに陥らず完了するのか?ただ、extern宣言に変えるためには一回すべてのモジュールを読み込んでみてからでないと名前一覧すら作れない + +Rustの場合はグローバルな宣言が基本的に型推論しなくて済むようになっているからなあ + + 型付け手順 - モジュールA読み込み開始 + +- いったんuse宣言以外の全部のProgramStatementを読んで名前をグローバル空間に登録(型宣言は関数などわかるところ以外はすべて変数として登録) - モジュールー型宣言マップにファイル名登録 - use modBの解釈開始 - マップに問い合わせ、ファイルがないのでファイル読み込み開始 - use modAの解釈開始 - マップに問い合わせ、ファイルがあったのでそれを参照 -- + - とりあえずmodAの型はすべて不明なレコード型として解釈して型付け開始 +- Proigram→Exprへの変換の中でuse宣言をextern modA:{...}に変換し、名前空間参照をレコードへのアクセスに変換 + + ---