Gauche > Archives > 2011/12/20

2011/12/20 00:26:02 UTCshiro
#
やっぱそうですよね>vararg。SchemeやCLと同じノリでAPI互換のまま拡張できないのがつらいなあ。
#
R7RS対応もそろそろ考えないとなあ
2011/12/20 06:03:01 UTCshiro
#
以前、pythonの if __name__ = '__main__' とか rubyの if __FILE__ == $0 のような、「このソースがスクリプトとして実行された時にだけ実行してほしいコード」を書く方法が欲しい、って話題が出た覚えがあるんだけどどこだったかな。
#
今さっき思ったんだけど、モジュールの中でmainという手続きを定義しておいて、スクリプト実行時に「このモジュールからmainを探して実行してくれ」ってモジュールをオプションで渡せればいいような気がしてきた。デフォルトではuserモジュールから探すけど、gosh -Mfoo script.scmとかするとモジュールfoo中のmainを実行する。script.scmは (define-module foo ... (define (main args) ...)) とか書いとく。
#
どうじゃろか。
2011/12/20 06:10:36 UTC(び)
#
あ、わたしが希望したものだと思うんですが、それいいと思います。
#
exportしなくていいようにしてあれば、モジュラリティも保たれると思いますし。
2011/12/20 06:44:52 UTCkoguro
#
その機能はすごく欲しい
2011/12/20 12:46:48 UTCshiro
#
なんか望まれてるようなのでつけてみました (79eb925)。 gosh -m foo foomodule.scm とかやると、モジュールfoo内のmainが実行されます。
#
ところで私の手元でもまだたまにcontrol.jobのjob-wait/job-killのテストがfailするなあ。どういうタイミングだろう?
2011/12/20 20:01:51 UTCokuoku
#
nmoshだと"nmosh -T HOGE"で(nmosh applet HOGE)の(HOGE)を実行するけど、R6RS的にはエクスポートしていないライブラリシンボルに触ることができないのでHOGEをエクスポートしないといけない。。(なので実行される手続きの名前をmainにできなかった)
#
テストのこともあるし、with-module的な"エクスポートしていないライブラリシンボルにさわる"手法は提供したほうが良いかもなぁ。。
2011/12/20 20:05:36 UTCshiro
#
R6RS的には、エクスポートしてないライブラリシンボルはそもそも実行時に存在する必要が無いんですよねえ。
2011/12/20 20:07:30 UTCokuoku
#
まぁmoshやnmoshは不正なテクニックを駆使すれば触れてしまうんですが。。(explicitなrenameで、シンボルがexportされているかどうかを判定していないので)
#
冷静に考えると、nmoshはR6RSを拡張して、"すべてのimportされたライブラリはbodyを高々一回評価される"というルールをいれてるので、cond-expandに executed-as-program? みたいなフラグを足してmainの実行をそれで包むというのができるのか。
#
...キャッシュがcond-expandを考慮してないからダメか。