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