[obsidian] vault backup: 2025-08-03 18:51:27[
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Build / build (push) Successful in 7m14s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Build / build (push) Successful in 7m14s
				
			This commit is contained in:
		@@ -4,7 +4,22 @@
 | 
			
		||||
 | 
			
		||||
### 必要要件
 | 
			
		||||
 | 
			
		||||
分割コンパイルできる、かつ、意味論的にもある程度一貫性がある
 | 
			
		||||
理想としては、以下を全部満たしたい
 | 
			
		||||
 | 
			
		||||
- 分割コンパイルしたうえで、コンパイル済みのモジュールは変更がなければ再利用できる
 | 
			
		||||
- 操作的意味論的にもある程度一貫性がある
 | 
			
		||||
- モジュール内ではシンボルの相互参照が可能(後から定義されるシンボルでも参照可能)
 | 
			
		||||
 | 
			
		||||
で、デザインチョイスのトレードオフとしては意味論を楽にしようと思うと分割コンパイルがめんどくさくなる
 | 
			
		||||
 | 
			
		||||
複数のコードを合体させるときに、流用されるコードの複製が増える問題
 | 
			
		||||
 | 
			
		||||
ただ、どっちみちDSPにおけるコードの量なんてたかが知れているのでは?という問題も
 | 
			
		||||
 | 
			
		||||
実際、そこまでモジュール内での相互参照って必要か?というのもある、Letrecで十分じゃね?
 | 
			
		||||
 | 
			
		||||
モジュールの循環参照が起きたらどうなるのかという問題もある
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### モジュール内での宣言一覧
 | 
			
		||||
```rust
 | 
			
		||||
@@ -13,8 +28,8 @@ pub fn (){
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
pub const Foo = 100
 | 
			
		||||
type Bar = Constructor(()->float) //新しい型宣言
 | 
			
		||||
type alias Hoge = ()->float //エイリアス宣言
 | 
			
		||||
pub type Bar = Constructor(()->float) //新しい型宣言
 | 
			
		||||
pub type alias Hoge = ()->float //エイリアス宣言
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@@ -54,6 +69,13 @@ modname.foo!()
 | 
			
		||||
 | 
			
		||||
こういう感じかなー、あ、でもこうするとモジュール内での相互参照が解決できないか
 | 
			
		||||
 | 
			
		||||
トップレベルでのモジュールの名前解決は後から定義されたシンボルも参照できるので、型推論のやり方はなんか考える必要がありそう
 | 
			
		||||
 | 
			
		||||
一旦トップレベルの宣言の名前だけを回収して、あとから実際の定義の型推論を行っていく形になる
 | 
			
		||||
 | 
			
		||||
しかし、そうするとラムダ計算として定義する旨味はあんまりないのでは、という気がしてくる
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
@@ -68,4 +90,16 @@ Program = FunctionDefinition
 | 
			
		||||
ModuleDeclaration = Visibility(stage) { Program }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Pythonのモジュールシステム [Python's Import System - Module object|Regular/Namespace Packages|Finders & Loaders|Relative imports - YouTube](https://www.youtube.com/watch?v=QCSz0j8tGmI)
 | 
			
		||||
 | 
			
		||||
モジュールはオブジェクトであり、`__file__`などはモジュールオブジェクトに付属するメンバ変数
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[[Gluon]]のモジュール [Modules - Gluon Documentation](https://gluon-lang.org/doc/crates_io/book/modules.html)
 | 
			
		||||
 | 
			
		||||
これマクロとして実装してあるので、分割コンパイルとかは全然考慮されてないけど意味論はすっきり
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user