GC_oom_fn対策(1)

今回の結論: 月曜ぐらいからコード書く。


これまでの流れ:

  1. 「安全なeval」を作りたい
  2. 「安全なeval」では、evalが過剰にメモリを消費しても、evalの親に影響を与えない必要がある
    • 例えば、evalのメモリ過使用に巻き込まれて、eval元がプロセスごと死んだりしてはいけない
    • Gaucheでは、GC_oom_fnには、即座にエラー終了する関数が設定されていて、GC_MALLOCは常に成功するという前提でコードが書かれている
  3. eval/memlimitを作った
  4. しかし、eval/memlimitでは、GC_oom_fnでの死亡を完全には防げない
    • 具体的には、突然、超巨大な文字列等が生成された場合、現在のeval/memlimitのコードでは、とりあえずSCM_MALLOCが実行されてしまうので、その時点でGC_oom_fnが呼ばれて死んでしまう
  5. GC_oom_fnでの死亡を完全に防げなくては「安全なeval」という目的を達成できない。どうにか対策しなくてはいけない
  6. とりあえず、Gaucheに手を入れる必要がある
  7. とりあえず、簡単にできそうなところからちょっとずつ実装していって、確認してみよう
    • ↑今ここ

今日は何やかやでゴチャゴチャやってたら、もうこんな時間になってしまった。
明日はずっと外に出るので、おそらくコード書きは進まない。
適当にやろう。