何をしようかな

ヤマケンさんが色々やったはる。mand_max.diff については見た瞬間バカみたいな気分になりましたね(顔。超単純に解決されちゃったよ。
太田さんも帰ってきたし、しばらくは commit が続きそうだ。そこで私は何をしようかな。

  • 環境 frame の簡略化とか
  • SIOD_BUGS な関数に lint コード入れるとか
  • 数年前に書いた文字コード処理を持ってきて encoding.c を充実させるとか
  • port の改造 (string port 追加など) とか
  • SCM_SHIFT_ARGS interface 改定とか
  • list_ctor (要相談) とか
  • define-macro (syntax-rules は保留) とか

結構あるな。とりあえず FUNCTYPE の流れから、ARGS interface ですかね。他のも一応心積もりはあります。
そんなわけで放置状態になってたSHIFT マクロ再編への要望についてコメント。

のっけから主観的でアレなんですが、名前は SHIFT より POP の方がいいと思います。Scheme というか LISP ではリストを stack として使うのは常套手段ですし、Schemer にはそっちのがいいんでは。Gauche でもこの操作は pop! として用意されています。まぁどっちでもいいっちゃいいんですが。

'shift'はスクリプト系言語のそれの動作イメージを借用してるのでshiftした時点で値が左辺に渡ってしまうのが基本で、その後にevalするように読める名前は違和感があります

いや、shift のち eval でいいですよ。Perl の shift でも、shift (@ary) は先頭を破壊的に取り出して継続に渡すだけであって、代入は含みません。本当なら EVAL (SHIFT (args), env) としたいんですが、型チェックなどを含めるのが困難だったので SHIFT_AND_EVAL にしたんです。 それで、SHIFT_THEN_EVAL とかどうだろう、とか思ってたんですが、FUNCTYPE 改造しながら考えてみると、SHIFT_EVAL を使うのは構文だけ→構文はどうせ EVAL するのしないのの algorithm が特殊→SHIFT_RAW 相当のものだけでいいのでは? どう思われますか。これをやめると誓ったんでした。とっととコード書きます。

- できるだけマクロではなく関数に

これなら error message の " required but got " の部分が 1 instance で足りますね。そうしましょう。ただ、エラーを起こした関数名はどうやって取得しましょう。マクロで隠蔽して渡す隠し parameter にするか大域変数を使うか。後者の方が柔軟ですけど、気持ち悪いし。何か心積もりがあれば教えてください。

-- TRY_SHIFT_ARG_FOR_INT → TRY_SHIFT_INT_ARG

これは、没にします (TRY_ じゃなくて _FOR_INT の部分)。理由は…あれ、何だっけ。FUNCTYPE 改造時に「これじゃダメ過ぎ」って思ったんですが…
思い出したらまた書きます(顔