[obsidian] vault backup: 2025-08-03 22:54:20[
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Build / build (push) Successful in 11m36s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Build / build (push) Successful in 11m36s
				
			This commit is contained in:
		@@ -60,7 +60,7 @@ modname::foo!()
 | 
			
		||||
これがあったとすると、
 | 
			
		||||
 | 
			
		||||
```rust
 | 
			
		||||
let modname = ${
 | 
			
		||||
extern modname = ${
 | 
			
		||||
  foo = | | { },
 | 
			
		||||
  ...
 | 
			
		||||
}
 | 
			
		||||
@@ -77,7 +77,47 @@ modname.foo!()
 | 
			
		||||
 | 
			
		||||
しかし、そうするとラムダ計算として定義する旨味はあんまりないのでは、という気がしてくる
 | 
			
		||||
 | 
			
		||||
`extern name : Type `という宣言に変換さえできれば意味論を保ってコンパイルはできそう
 | 
			
		||||
 | 
			
		||||
型がつけられさえすればいいから、そこで循環する定義にならなければOK
 | 
			
		||||
 | 
			
		||||
```rust
 | 
			
		||||
//modA.mmm
 | 
			
		||||
use modB
 | 
			
		||||
pub fn hoge(){
 | 
			
		||||
	modB::hoge()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//modB.mmm
 | 
			
		||||
use modA
 | 
			
		||||
pub fn hoge(){
 | 
			
		||||
    modA::hoge()
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
(ランタイムで無限ループするけどそれはいいとして)変換するとこう
 | 
			
		||||
 | 
			
		||||
```rust
 | 
			
		||||
// modA.mmm
 | 
			
		||||
extern modB:{
 | 
			
		||||
  hoge: ?
 | 
			
		||||
}
 | 
			
		||||
fn hoge(){
 | 
			
		||||
  modB.hoge()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//modB.mmm
 | 
			
		||||
extern modA:{//実際は型コンストラクタとかで覆って区別できるようにすべき
 | 
			
		||||
 hoge: ?
 | 
			
		||||
}
 | 
			
		||||
fn hoge(){
 | 
			
		||||
 modA.hoge()
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
`modA::hoge : 'a ()->'a, modB::hoge : 'a ()->'a `
 | 
			
		||||
 | 
			
		||||
ここまでしか型は決定できないということに
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user