[obsidian] vault backup: 2025-09-25 13:38:52[
All checks were successful
Build / build (push) Successful in 10m47s

This commit is contained in:
2025-09-25 13:38:52 +09:00
parent 410cca5f13
commit a1ed1f1f74
2 changed files with 29 additions and 8 deletions

View File

@@ -5,7 +5,7 @@ date: 2024-10-20 12:02
ツリー形式からBasicBlockのインストラクション形式に変える ツリー形式からBasicBlockのインストラクション形式に変える
Stateのこととupvalueを両方処理しなくてはならない Stateのこととupvalueを両方処理しなくてはならない。ワンパスで処理できるのか?
StateSize計算とUpvalue計算の両方をtraitとして切り出す方がいいのかな StateSize計算とUpvalue計算の両方をtraitとして切り出す方がいいのかな
@@ -48,11 +48,32 @@ $$
## コンパイル ## コンパイル
```ocaml ```rust
let compiler = fun e -> match e with fn eval(e:ExprNodeId,env:Env<Value>)->(Value,Type){
Id(x) -> match e.to_expr() {
| App(e1,e2)-> Expr::Id(name)=>{
| Feed(x,e) -> env.lookup(name)
},
Expr::Let(name,e,body)=>{
let env = env.extend((name,eval(e,env).0));
eval(e,env)
},
Expr::App(e,args)=>{
let (f,ft) = eval(e,env);
let argvs = args.iter().map(|e| eval(e,env));
match f{
Value::Closure(fproto,names,body,env)=>{
let kvs = names.iter().zip(argvs.zip()).collect()
let env = env.extend(kvs);
eval(body,env)
}
_=>panic!()
}
}
}
}
``` ```

View File

@@ -32,7 +32,7 @@ MaxMSPやPureDataにおける信号処理のように、信号処理のイ
これはソースコードの増分比較に基づいている。同じ差分でも、複数の変更のパターンがあり得るので、単なるテキスト比較ではなくEmacsの拡張として操作の履歴を取得している。 これはソースコードの増分比較に基づいている。同じ差分でも、複数の変更のパターンがあり得るので、単なるテキスト比較ではなくEmacsの拡張として操作の履歴を取得している。
プリミティブを小さくする&&ソースコードの変更→評価の間隔が短くても済むような仕組みを作れ プリミティブを小さくする&&ソースコードの変更→評価の間隔が短くても済むような仕組みを作れば良い。
## lambda-mmmの記法 ## lambda-mmmの記法
@@ -78,9 +78,9 @@ MaxMSPやPureDataにおける信号処理のように、信号処理のイ
## 将来的な展望 ## 将来的な展望
原理的にはFaustでも実現できるはず。 原理的にはFaustでも実現できるはず。
ディレイ、Feed以外に、外部定義の関数呼び出しにもこの仕組みを応用できるかLuaのUserData的な仕組み。