Island Life

2010/01/06

定数伝搬とリテラルの破壊的変更

Gauche trunkのコンパイラでは定数伝搬を多少真面目に計算するようにしてるんだが、 うっかりリテラルリストを破壊しているようなケースで見える結果が異なるケースが あったのでメモ。

問題のコードは木の集合を構築してゆくような関数で、 木の根の集合を頭にダミーノードをつけたリストに集めていた。 こうしとくと、木の途中のノード (<value> <child> ...) に子供を追加するのも 新たな木の根を追加するのも(push! (cdr node) element)で統一できるのだ。

(define (foo)
  (define roots '(#f)) ; #fはダミーノード
  ... 途中でrootsのcdrが破壊的変更される ...
  (cdr roots)) ; ダミーノードを捨てて木の根のリストを返す

もちろんrootsのリストは変更されるので上のようにリテラルリストを使っては いけない。 でもGaucheはリテラルリストの破壊はチェックしないので、 0.9までだと一回目はちゃんと結果が返っていた。 (二回目以降はrootsの初期値が変更されちゃってるので結果が異なってくる)。

一方、trunkのオプティマイザは、

  • rootsの束縛自体は変更されていない
  • その束縛は定数リストである
  • 定数リストのcdrは定数である

ということから最後の(cdr roots)をコンパイル時に計算してしまうので、 fooは常に '() を返す。

正しい修正は (define roots (list #f)) とすること。

Tag: Gauche

2010/01/04

DreamhostのVPSを試している。このブログがサブドメインになってるのはそのため。 とりあえずメモリ最低限の150MB ($15/mo) でも暇なcgiをホストするくらいなら余裕。persistentなプロセスを走らせるならもっと必要だが…

最近になってVPSでもsudo可能アカウントを作れるようになったので、dedicated serverからの移行をためらう理由も特に無くなった。

リソースの割り当てがwebのコントロールパネルから簡単に変えられるのはいいんだけど、そこでリクエストがキューに入れられて、しばらく(10分とか)してからリブートがかかる。この遅延はちょっと不便。リブートが必要ならわかってるタイミングでリブートしたいよね (もちろんこちらからリブートをトリガすることはできるんだけど、どういう設定変更でリブートが必要かがwebパネルからだとわかりにくい。うっかり設定変更して気がつくとリブートしてた、みたいなことが2度ばかりあったので)。

あと、複数のサーバを使ってる場合、共通のユーザを作れない。これは微妙に不便。まあ今から使う人でわざわざ複数サーバにする人は滅多にいないだろうからdreamhost側でも優先順位低いんだろうけど。ずっと使ってきたdedicated serverの方でかなりいろいろやってるので、一気にVPSに移行するのは大変なのだ。

具合が良ければpractical-scheme.netでホストしてるものを徐々に移してゆく予定。

(追記2010/01/04 22:31:59 PST): あれまたrebootしてたぞ。今回は原因不明。 あんまり頻繁にrebootするようだと困るなあ。

Tag: Hosting

2010/01/02

Blogっぽいのに移行

もともとWiLiKiでblogっぽいアプリを書くつもりでいて、 WiLiKiの個人ページ (WiLiKi:Shiro) はそれまでのほんの つなぎのつもりだったのだが、何やかんやで延び延びになっていた。 もうここ4〜5年、年の初めに「今年こそはblog移行」と決意を新たに していたような気がする。けれどもWiLiKiの方でとりあえず用が足りちゃって いたということもあり、常に他のタスクより優先順位が低くなっていた。 今年もまた「今年こそは」と記して実現できないままになるのはさすがに どうかと思い、コードの書き初めとしてえいやと仕上げることにした。 ほんとは1日で終わらせるつもりだったけど、 過去ログの移行に思いのほか手間取って2日になっちゃった。 タグの検索結果表示ページとか、まだ直したいところはちょこちょこあるけど、 ぼちぼちやってく。

もう何年も前からたくさん要望を頂いていた記事毎のpermalinkも つけて、世間から10年くらい遅れてようやく近代化した気分だ。 RSSもあるよ。WiLiKiのRecentChangesが出てくるので、必ずしも エントリの日付の順番にはならないけど(古いエントリを編集すると そいつが上がってくる)、まあそのくらいはご愛嬌。 trackback? うー面倒くさいなあ。来年の正月に暇があったらやるかも。

ありゃ、RSSにmacro errorが出てるな…これはWiLiKi側のバグかなあ… 直した。

Tag: Programming

2009/12/26

東京は寒かった

東大と東工大がやっている「情報理工実践プログラム」というのが受講者向けに時々外部から 講師を招いて講演会を開いていて、それに招いて頂いたので話をしてきた (具体的には笹田さんに呼んで頂いたのだ)。 東京は寒かった。とにかく寒かった。考えてみたら冬に帰るのは数年ぶりだ。 Gauche本の出版の時も寒かったけどあれは3月だったせいか、今回ほど寒くなかったような。

このプログラムは、学生がチームを作り、一年かけて何かソフトウェアを開発する、 というのがメインになっていて、その発表もあったので聞いてきたがなかなかおもしろかった。 自分が作ったものについて話す人は楽しそうで、聞く方も楽しくなる。 学生時代にこういう実習があれば受けたかったなあ。

私の話では、「質問は随時OK」「一人一回以上質問すること」とあらかじめ宣言して おいたのだけれど、結局質問しない人も結構いたなあ。 興味を持てなかったのか、単にシャイなのか、黙ってたんじゃわからん。 まあ話し手の技量不足といえばそこまでだけど、 求められたら質問のひとつやふたつひねり出すのが礼儀だし、 大学院生ならそのくらいのスキルは身につけていて欲しいものだ。

Tags: , Conference

2009/10/31

らむ太語録

  • ら: とうさん、あのひもはなあに。
  • 私: あれは電線。電気が流れてるの。触るとびりびりするよ。
  • ら: えーびりびりしないよ。ぴーちゃん(鳥のこと)、足でつかまってるもん。

なるほど、そういう演繹ができるようになったか。

  • ら: とうさん、I know. はなあに。
  • 私: I knowは「知ってるよ」だよ。
  • ら: ちやうよ。I know. は「いいことかんがえた」だよ。

なるほど、「知ってるよ」はどっちかっていうとI know. だな。

Tag: 生活

More entries ...