[obsidian] vault backup: 2025-08-04 00:54:53[
Some checks failed
Build / build (push) Failing after 14m41s

This commit is contained in:
2025-08-04 00:54:54 +09:00
parent 665489d7a7
commit 33afe3ca27
2 changed files with 24 additions and 2 deletions

13
content/ecsact.md Normal file
View File

@@ -0,0 +1,13 @@
#programming-language
[Ecsact](https://ecsact.dev/)
[[Entity Component System]]を言語のコアに組み込んだプログラミング言語とランタイムシステム。
Componentの仕様と、システムの型宣言のところまではシンプルな言語として実装されていて、宣言されたSystemの実装をどうするかはLanguage-Agnosticな形に任せるという方式を取っている
 ランタイムのAPIが言語としても公開されているので、これを経由してSystemを実装する。
 ゲームエンジンへの埋め込みを想定しているっぽい
システムを統一した言語で書けるわけではないのがいいのか悪いのかわからんけど、宣言部だけなら[[ProtoBuf]]的な役割を担えそうな予感はする

View File

@@ -119,17 +119,26 @@ fn hoge(){
ここまでしか型は決定できないということに
ただまあ、型が決定不能ならその時コンパイルエラーにすればいいだけで、一応型推論自体は無限ループに陥らず完了するのか?
ただまあ、型が決定不能ならその時コンパイルエラーにすればいいだけで、一応型推論自体は無限ループに陥らず完了するのか?ただ、extern宣言に変えるためには一回すべてのモジュールを読み込んでみてからでないと名前一覧すら作れない
Rustの場合はグローバルな宣言が基本的に型推論しなくて済むようになっているからなあ
型付け手順
- モジュールA読み込み開始
- いったんuse宣言以外の全部のProgramStatementを読んで名前をグローバル空間に登録型宣言は関数などわかるところ以外はすべて変数として登録
- モジュールー型宣言マップにファイル名登録
- use modBの解釈開始
- マップに問い合わせ、ファイルがないのでファイル読み込み開始
- use modAの解釈開始
- マップに問い合わせ、ファイルがあったのでそれを参照
-
- とりあえずmodAの型はすべて不明なレコード型として解釈して型付け開始
- Proigram→Exprへの変換の中でuse宣言をextern modA:{...}に変換し、名前空間参照をレコードへのアクセスに変換
---