研究開発

Crystal Nightsを読んだ / そこから色々と妄想した

SFマガジンに載ってたCrystal Nightsを読んだ。 SFマガジン自体はまだ読み途中。 Crystal Nightsなかなか面白かったが、最後のオチは、真女神転生Strange Journeyのある場面を連想してしまった(制作順的にはCrystal Nightsの方が先だけど、自分がプレイした/…

たまには「プレイ」しましょう

今回の要約: 実は、自然言語はプログラミング言語的な面も持っていた。 長いので要点だけ。 最初に考えていた事: 自然言語はプログラミング言語とは違い、チューリング完全ではない イーガンのTAP言語と自然言語の比較 TAP言語には「スキャン」と「プレイ」…

LOL(日本語版)読了

面白かった。 全体の1/3ぐらいの最初の方は目新しい点はあまりなかったが、「アナフォラの閉鎖」から「パンドラのマクロ」にかけての辺りが凄かった。 レキシカルな環境を、こんな風に開く事ができるとは、これを読むまでは思ってもなかった。 S式(もしくはS…

すごい寝た。 起きた。 昨日、SCM_INTERNAL_MUTEX_LOCKとSCM_INTERNAL_MUTEX_UNLOCKに囲まれた部分のチェックをした。 結果をWiLiKiに書いた。

昨日のSCM_NEWのチェックの残りを行った。 とりあえず、チェックの結果、SCM_NEW*系マクロを呼び出している関数単体では、SCM_NEW*内で継続呼び出し(というかlongjmp?)して途中で脱出した時に怪しくなりそうなものは一つも存在しない事が自分の中で確認され…

昨日に書いたGauche用OOMパッチをwilikiに貼った。 返事をもらった。 http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3aOOM どうも、Scm_ConsですらOOMが発生するという事は、性能の劣化無しにOOM対策はできず、仮にOOM対策をしても、OS側のoom-kill…

昨日は時間ギリギリに帰ったので、すごく疲れた。 やっぱり移動には時間に余裕を見ておきたい。 この前書いたGC_oom_fn対策のコードはそれなりに動いた。 しかし、スレッド安全になってないので、Gaucheの他の部分を見て、どういう風にスレッド安全にすべき…

今回の要約: とりあえずGC_oom_fn対策のコードだけ書いた。動作確認とかは帰ってからやる。 今日は、出社する事になった。 先日の優先順位を考えた。 とりあえず、GC_oom_fn対策が実現可能な事を簡単に確認する とりあえず適当に動く、eval/svを作る(大体完…

「安全なeval」別解

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

GC_oom_fn対策(1)

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

windowsのstartコマンドがヤバいくらいに便利

新山さんのメモを読んでstartコマンドの事を知った。 http://www.unixuser.org/~euske/offline/memo/2008/42.html#072157 なんでこんな便利なものが知られていないんだ。知らなかったのは自分だけなのか? 他にも、細かい挙動を制御できるオプションが満載。…

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…

さっきの続き。 eval時に行うmalloc(的な何か)は、eager型とlazy型を選べるようにする。 eager型evalがさっき書いた、eval時に一括で申請して、領域が無くなったらエラー例外を投げるもの。 lazy型evalは普通に、eval時には何もせずに、cons等の度にmalloc(…

今日の要約: 俺Lispに必要な仕様がまとまってきた。実際に作るかどうかは未定。しかし、カッコ良い名前を考えておく事。 http://d.hatena.ne.jp/ranekov/20080403/1207163582 http://d.hatena.ne.jp/ranekov/20080228/1204186771 http://d.hatena.ne.jp/rane…

shs(仮)とArc

今回の結論: 暇が出来たら、Arcが「HTTP上の/bin/sh」として使えないか試してみる 色々書いてたが、長くなったので要約だけ残す。 phpはアレだが、「php的なアプローチ」(?)は悪くないとは思ってる。 今のphpは、進化する方向を間違えてしまったように思え…

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の出し物にした方がウケが良かっ…

evalのよみかた

http://www.area51.gr.jp/~rin/diary/?date=20080308#p04 evalは「エ」ヴァルではなく「イ」ヴァルだったらしい? gauche.gongのeval-svのデモの時に思いっきりエヴァルエヴァル言ってしまってた。 これは恥ずかしい。 次からは間違わないようにしよう。イヴ…

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

Arcでは「define」や「lambda」という「単語」を廃止して、「def」や「fn」のような「略語」にしてある。 これは実はかなり重要な事のような気がしている。 というのは、「lambda」はともかく、「define」は、英語の元の単語と全く同じ文字列だ。 しかし、そ…

風邪引いた。 すごい頭がフラフラして胴がしんどい。 今日はgauche.gongの追い上げ&家の雑用の為に有休を取っていたが、ただ単に寝るだけに消耗されてしまった。 http://practical-scheme.net/wiliki/wiliki.cgi?Arc%e3%81%8b%e3%82%89%e3%81%ae%e6%8c%91%e…

ステップ実行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…