#山本です。初心者の質問です。
#slib の wttree.scm を直す許可が出たので、修正するコードを書いています。
#質問ですが、Scheme で使われていないローカル変数を見つけ出すには、どうすればいいのでしょうか?
#コンパイルする言語だと、コンパイラーが見つけてくれるのですが、Scheme ではどうやるのでしょうか?
#言語仕様上は特に定めはないです。処理系によっては警告を出すものがあるかもしれませんが、各処理系のマニュアルを読まないとわからないかと
#(maa
#(まあそれはほとんどすべての言語処理系に言えることだとおもいますが)
#Gaucheでは使われていないローカル変数はコンパイラの最適化パスが消してしまいますが、特に警告などは出しません。(なお、変数が使われていなくても初期化式に副作用があり得る場合は、初期化式自体は実行されます)
#そういえば、glintってtrunkで機能するのかなぁ
##ああ、glintがありましたね。あれは優秀だ(型チェックとかもやってくれる)。でも0.8.13からはかなり変わってるところがあるからどうかなあ。
#最適化パスにちょろっと手を入れて警告出せるかなと思ったけど、「インライン展開→条件判断がコンパイル時計算可能→条件分岐の一方がdead codeに→その中だけで使われてるローカル変数が不要に」なんて流れでローカル変数が消されることもある。なのでローカル変数削除のところにフックを入れるだけでは不十分だな。
#実はこの変数削除のせいで、letrec*を単にletrecのaliasにできない。削除されたローカル変数の(副作用があり得る)初期化式はbodyの先頭に移されるため、初期化式の実行順序が変わってしまうことがあるから。
#ありがとうございます。glint を構築できるかやってみます。
#あと、slib の wttree.scm のバグを直して公開しました。
##slib/ の下で、make とやると新しいコードのテスト、make old とやると古いコードのテストをやります。make old は、ときどき失敗するのが分かると思います。
#なにぶん、Scheme は素人なので、おかしいところがあれば、何でも言っていただけるとありがたいです。
#私が試した限りでは (少なくとも普通に make しただけでは) trunk で glint は使えないようです。
#以前に Gauche 0.9 で試して駄目だったような気が。
#shiroさん、 先日のShibuya.lispで発表したGaucheを使った簡易出版システム( http://www.slideshare.net/yuumi3/gauche-dt-psys-5945913 )のコードをGitHubで公開しようと思うのですが。中にWilikiに少し手を入れたものがあります。
この改造Wilikiの公開ですが wiliki.cgi wiliki.scm wiliki/*.scm README のみを一つのディレクトリーに入れたもので良いですか? それとも WiLiKi-0.6.1.tgz を展開した構造 ? どちらにしろオリジナル(0.6.1)と git diff が取れる形にします。
#読みにくいのでもう一度 m(__)m
shiroさん、 先日のShibuya.lispで発表したGaucheを使った簡易出版システム
( http://www.slideshare.net/yuumi3/gauche-dt-psys-5945913 )の
コードをGitHubで公開しようと思うのですが。中にWilikiに少し手を入れたものがあります。
この改造Wilikiの公開ですが wiliki.cgi wiliki.scm wiliki/*.scm README のみを一つの
ディレクトリーに入れたもので良いですか? それとも WiLiKi-0.6.1.tgz を展開した構造 ?
どちらにしろオリジナル(0.6.1)と git diff が取れる形にします。
#どちらでも良いですよ。改造が汎用的なものならフィードバック頂ければ本体に統合しますし。