#call/cc使ってないのになぜか途中式から2回帰ってくるという楽しいバグの原因をつきとめた
#parameterizeの仕様変更ですが、srfi-226での議論が進んで、現在のdraftではスレッドローカルなパラメータと共有されるパラメータをパラメータごとに指定できるようになっています。
#srfi-226ではmake-parameterで作るやつは共有、make-thread-parameterで作るやつがスレッドローカル、なのでスレッドに関しては、make-parameterをmake-thread-parameterにするだけで従来と同じ振る舞いになります。
#ただ、それとは別に、srfi-226セマンティクスのparmaeterizeとdynamic-windベースのparameterizeで、限定継続を使った場合に振る舞いの違いが出てくることが発覚しました (KahuaのテストがGauche HEADでこけてるのはそのためです)。こちらの互換性を保つ方法は考え中です。
#gauche.parameterをuseした時のparameterizeは従来の動作、組み込みのparameterizeはsrfi-226の動作、というのはどうだろう。古いコードはだいたいgauche.parameterをuseしてるからそのままで変化は見えない。
#以前、限定継続まわりを調査していたときに、
guard を限定継続で実現する方法があったのですが、
他の限定継続と干渉しないように、
guard 専用の prompt tag が必要なようでした。
#しかし、prompt tag を導入すると、入れ子だけでなく
たすきがけのようなケースも出てくるし、
ややこしそうだなと思った記憶があります。
#今のとこまだChaton-Twitterブリッジ動いてるけど、どうしようかなあ。まだBasic Tierって発表されてないよね?
#0.9.11から0.9.12の間に入ったバグをbisectで見つけるには、0.9.11をインストールしないとならない
#Chaton-Twitterブリッジを停止します。ただでさえ過疎ってるのにいちいち見にこないとならないのは厳しいので、Mastodonに流すのを作ろうかなあ。
#RSS があるのですからウォッチしたい人にとっては十分な気がしますが。
#yeeeeahhh
#Chibi scheme に、Provide delimited continuations という pull request が出ていますね。
#ただ、やはり難しそうです。「本質的にはこれだけ」みたいな情報があるとよいのですが…
#継続はランタイムにかなり深く手を入れないとならないですからね…
#0.9.13_pre3 で %sin 等がなくなっていますが、real-sin 等に修正が必要でしょうか?
#けっこう使っていたのですが…
#今までundocumentedだったので変えちゃったんですが、影響大きいですか? 正式にはreal-* でいきたいと思います。影響大きいようでしたら互換性バインディング入れます。
#compat.real-trigというモジュールで%sinなどのバインディングをimportできるようにしました。
#ありがとうございます。
#新しい Gauche で動かす場合には、(use compat.real-trig) を追加で良いと思いますが、
古い Gauche で動かした場合に、(use compat.real-trig) でエラーにしないよい方法はありますか?
以前だと、
(define-module module-A)
(import module-A)
(define *module-A-loaded* (load "module-A" :error-if-not-found #f))
みたいなことをしていたようです。
あとは、
(if (version>=? (gauche-version) "0.9.13")
(eval '(use module-A) (current-module)))
とか。
#cond-expand
#cond-expandでversionの比較演算ができるようにしたいなと前から思ってはいるんですが、今のところあまり綺麗にやる方法はないですね…
#(use gauche.version)
(define-macro (load-real-trig)
(if (version<=? (gauche-vresion) "0.9.13")
`(use compat.real-trig)
#f))
(load-real-trig)
#とかもできますが、もうちょいスマートに書きたいですね。
#(cond-expandでversion比較、の導入に躊躇しているのは、それをやるとsrfi-0と互換にならないことです。)
#ありがとうございます。define-macro が昔からあってシンプルそうなので、それで対応してみます。
#あ、機能を足さないでもできることに気づきました。
(cond-expand ((library compat.real-trig) (use compat.real-trig)) (else))
でいけるはず。
#すんません、ドキュメント書いてたらモジュール名が気になりだしました。trigonometryだけじゃないんで、ちょっと長いけどcompat.real-elementary-functions とかにします。
#リファレンスの eqv? の項目で、"NaNはいかなるオブジェクト(NaN自身も含めて)と eqv?ではありません。" と断定的に書いてありますが、"(eqv? +nan.0 +nan.0)は#tを返すことがあるかもしれません。" とも書いてあって、混乱します。前者がGaucheの話で、後者がR7RSの話でしょうか?
#ああ、確かに。R7RSでは(eqv? +nan.0 +nan.0)の値は未定義です。R7RSに合わせて書き足した時に齟齬が出たっぽいです。