gauche

「安全なeval」別解

実は、「安全なeval」には、「(可能なら、別サーバかつ)別プロセスでgoshを起動し、そこにS式を流し込んで評価させる」という、結構シンプルな別解がある。 (別プロセスの方が死んだり、応答がなかったら「失敗」扱いにするという事になる) 実際、S式バトラ…

GC_oom_fn対策(1)

今回の結論: 月曜ぐらいからコード書く。 これまでの流れ: 「安全なeval」を作りたい 「安全なeval」では、evalが過剰にメモリを消費しても、evalの親に影響を与えない必要がある 例えば、evalのメモリ過使用に巻き込まれて、eval元がプロセスごと死んだりし…

eval/memlimitについての内容をちょっとまとめた。 http://e.tir.jp/wiliki?eval-sv%3aeval%2fmemlimit

直した。 (use eval-sv) (use gauche.parameter) (use util.list) (define-values (eval/sv env) (make-eval/sv :isolate-port? #f)) (define start-size (make-parameter #f)) (define runup-size (make-parameter 0)) (define limit-size (make-parameter …

さっきの問題を調べ直した。 どうやら、二回目以降のeval/memlimitでは、dynamic-windのbefore thunk内の(gc)では、まだメモリが解決されないが、実際のeval/svに突入した段階で(gc)すると、メモリ使用量が確かに回復するようだ。 おそらく、副作用(current-…

昨日の続き。 dynamic-windを使えば、昨日の 他の問題点としては、S式バトラーのように、複数のevalを同時に起動して、継続を使ってコルーチン的に動きまわるような場合には、正常にメモリ使用量を取る事が出来ない。 を一応、解決できる事に気付いた。 (但…

厳密でなくてもいいなら、eval/svと(gc-stat)を使えば、擬似的にメモリ使用量を制御できる事に気付いた。 (use eval-sv) (use gauche.parameter) (use util.list) (define-values (eval/sv env) (make-eval/sv :isolate-port? #f)) (define original-size (m…

call/ccパズルをeval-svで解いて?みた。 http://e.tir.jp/wiliki?eval-sv%3a%a5%b9%a5%c6%a5%c3%a5%d7%bc%c2%b9%d4 今思うと、S式バトラーよりも、こっち(call/ccパズルみたいな問題をステップ実行で解かせる)をgauche.gongの出し物にした方がウケが良かっ…

S式バトラーは結局、「battle-main手続きが終了したらペナルティを与える」ように仕様変更した。 この仕様変更により、最短のS式は「(define (battle-main) (battle-main))」となり、最大で約10秒ぐらいになった。それでも長いが。 eval-svがかなり重いとい…

ステップ実行eval開発中(9)

internal defineも正常に機能していない事に気付いた。 ちゃんとtest caseを書かないと駄目だなあ。 defineは、トップレベルで呼ばれた時と、let等の内部で呼ばれた時とで挙動が違う。 これは、defineの内部で、トップレベルで呼ばれたのかlet等の内部で呼ば…

ステップ実行eval開発中(8)

quasiquote内の、unquoteとunquote-splicingが正常に動作していない事に気付き、しばらくはまった。 (Gaucheの)quasiquoteは、内部のunquote、unquote-splicingを、シンボルでのみ判定しており、その実体が何かという事については気にしていないという事を知…

ステップ実行eval開発中(6)

隠し束縛を安全に隠す方法を思い付いた。 (gensym)を使って、文字列からは変換不可能なシンボルを生成する 対象モジュール内で、このシンボルに対して、隠したい内容(今回はspecial formの実体)を束縛する このシンボル内の束縛にアクセスする為には、元のシ…

ステップ実行eval開発中(5)

WiLiKiに書いた。 しかし……これって、ものすごくR5RS外だよなあ、あんまり突き詰めるような部分じゃないよなあ、移植性ないよなあ、とも、書きながら思ってしまった。 mzschemeで追試したら、mzschemeではそもそも、special formやmacroの実体に、(即値風に)…

ステップ実行eval開発中(4)

できた。eval拡張パッチが。 さっきのコメントは、((lambda () ...) ...)のような、car部分がlistになってるものについてだった。気にしなくてよかった。 R5RSのevalの項目も確認した。 expression は,データとして表現された一つの妥当な Scheme 式でなけ…

ステップ実行eval開発中(3)

http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3AYAGHG%3AIntroduction#H-1l0p7af 回り道したが、これを発見した。凄い有難い。 で、問題のコードはcompile.scmのpass1のところにあった。 evalの第一引数のlistの先頭が何なのかをpass1/lookup-head…

ステップ実行eval開発中(2)

要は、 ((eval `(,lambda (arg) arg) (interaction-environment)) 123) => 123 のように、evalに対して、マクロやspecial formの「実体」を渡した時にも、evalがそれをマクロやspecial formとして扱ってくれれば問題は解決するのだが、とりあえずGaucheはそ…

ステップ実行eval開発中(1)

とりあえず手続き類は問題無く動くようになった。 しかし、マクロとspecial formの評価時に割り込み処理を入れるのが難しい。 マクロとspecial formには割り込み処理を入れない事にすると、当初に想定していた利用方法の大半が駄目になってしまう為、この部…

gauche.gong出たい

ステップ実行evalが実はかなり応用範囲が広い事に気付き、ちょっとgauche.gongでプレゼン(という名目の自慢)をしたくなった。 しかし、gauche.gongの応募締め切りは2/17だ。 gauche.nightのある3/8は、Zepp Nagoyaの某イベントに行く(最優先)のだが、このイ…

ステップ実行evalが欲しい

インターフェースは以下のような感じ(仮)。 (with-step-eval expr env step-num interval-proc) exprとenvは、通常のevalと同じ。 step-numに、「何ステップ分実行したらinterval-procを呼ぶか」のステップ数を設定。 「ステップ」は、例えば、(car (cons 1 …

hack=「ごにょごにょ」

なんか微妙に思い立って、ちょっとGaucheをごにょごにょした。 その後でなんとなくウェブを見ていたら、コレを発見! http://wiki.monaos.org/pukiwiki.php?Reading%20Gauche うっはー、これはもっと早く気付いてれば良かった。 昔はGHGを参考にしてたけど、…

Gauche-rfbがヤバイ

gauche.nightで小黒さんによってデモが行われ、会場を大いに沸かせたGauche-rfbのパッケージが公開されたのでいじってみた。 rfb-initを:portキーワード付きで実行すると簡易ウェブサーバが起動するので、適当な番号を指定する(※インターネットに接続してい…

GaucheNightに向けて、今日はspeedygoshのメンテを進めた。 引数の解釈(一部怪しい部分があるが)を実装し、他の多くの未実装な部分も実装した。 あとは動作確認を取り問題が無い事を確認し、パッケージングすれば、speedygoshに関しては問題ないだろう。 問…

世界樹キャラジェネCGIの乱数偏り問題その後

体調は微妙に少しずつ良くなってはいるが、なかなか治らない。 しかし、半分ぐらいは治ってきた今から病院に行くのも微妙だ。 素直に早い段階で病院に行っておけばよかった。 とりあえず、一旦またmt-random-integerを使うように戻して、偏りがあるかどうか…

偏り問題を統計学的に確認

腹具合は収まってきたが、すごい頭が痛くなってきた。 熱が出てきた。これはやばい。 しかし眠れない。 仮に、100回試行するとする。 この中で、三回連続で同じ職がでるかどうか確認できるチャンスは98回(最後の二回では、もう次に試行する事は無いので、チ…

Gaucheのmath.mt-randomにバグがあるかどうか検証

結論: なんか別のバグが見付かったが、偏りの方は起こってなさそう。 (または、自分の書いたコード側に問題があるか) 頭と腹はずっと痛くて、全然眠れない。 この前のノロっぽい症状だ。 寝れないので、検証方法を考えてみた。 要は、同じ数値が連続で出る可…

Gaucheのmath.mt-randomにバグがあるかも知れない?

この前作った「世界樹の迷宮 私家版キャラクタジェネレータ」に、「偏ってない?」という意見が来た。 実際に自分でも試してみると、確かに、微妙に、同じ職が連続で出やすいような気がする。 職種が九種類なので、例えば、どれかの職業が三連続で出る可能性…

もうすぐKahua 1.0がリリースされるらしい

要約: https://www.kahua.org/cgi-bin/kahua.fcgi/kahua-web/ http://practical-scheme.net/wiliki/wiliki.cgi?cut-sea の、Kahuaのところ Kahua 1.0リリースされたら早速いじって遊ぶ。リリース待ち。 イーガンっぽい部分要約: HTTPのウェブサービスは、可…