[obsidian] vault backup: 2025-07-20 10:34:06[
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Build / build (push) Successful in 17m35s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Build / build (push) Successful in 17m35s
				
			This commit is contained in:
		@@ -30,7 +30,12 @@ https://github.com/mimium-org/mimium-rs
 | 
			
		||||
- [[mimiumのMIRコンパイル過程を真面目に考える]]
 | 
			
		||||
- [[lambda-mmm(実用版)]]
 | 
			
		||||
- [[mimiumグローバル環境評価について]]
 | 
			
		||||
- [[多段階計算を命令型VMインストラクションで表現したい]]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## マクロ
 | 
			
		||||
 | 
			
		||||
- [[mimiumと多段階計算]]
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
### ランタイム周りについて
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										33
									
								
								content/mimiumと多段階計算.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								content/mimiumと多段階計算.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
#memo #mimium 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
- [[多段階計算を命令型VMインストラクションで表現したい]]
 | 
			
		||||
	- 一時期考えていたが、あんまり筋が良くないのでやめた
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[Implement multi-stage computation intepreter by tomoyanonymous · Pull Request #136 · mimium-org/mimium-rs · GitHub](https://github.com/mimium-org/mimium-rs/pull/136)
 | 
			
		||||
 | 
			
		||||
シンプルに構文木レベルでのインタプリタを別途作ることで実現できそう。
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## 課題
 | 
			
		||||
 | 
			
		||||
- 組み込みの関数の型情報がマクロ用(レベル0)とVM用(レベル1)で分かれているので、両方にあることを別々に宣言しなければならない
 | 
			
		||||
	- 逆に、ベクターのappend・removeや文字列操作など、メモリを確保する操作はレベル0でのみ利用できる組み込み関数として制限すると、便利かもしれない
 | 
			
		||||
	- 逆に、`self`や`delay`はレベル1でのみ利用できる関数とする
 | 
			
		||||
	- レベル0,1両方で利用できるpersistentなモジュールは、上記2種類のいずれも使わず、かつescapeとBracketも利用しないものであればよい、ということになる
 | 
			
		||||
- もともとディレイの最大サイズはリテラルで指定しなければいけないという問題があったが、これを`make_delay(size:float)-> <(float,float)->float>`(レベル0で最大時間を指定すると、入力と遅延時間をとる関数のコードを返すという関数)にできるかも
 | 
			
		||||
	- ただ、これやるとディレイが絡む関数はすべてレベル0定義になるのかな
 | 
			
		||||
	- なんかそれよりは、[[数値プリミティブ型に常に範囲をつける]]とかのほうが筋がいいかも
 | 
			
		||||
 | 
			
		||||
```rust
 | 
			
		||||
fn fbdelay(max_time){
 | 
			
		||||
  `|input,time,fb| {
 | 
			
		||||
    (input + self*fb, time) |> make_delay!(max_time)
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- 
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user