Gauche > Archives > 2011/03/28

2011/03/28 00:15:47 UTCshiro
#
POSIX fcntl lockをライブラリでラップしようとしたら恐ろしく難しいことに気づいた。
2011/03/28 05:02:04 UTCshiro
#
なんか色々考えたんだが、汎用ロックライブラリのバックエンドとしてfcntl lockを使うのは無理 (できるかもしれないけど複雑さにメリットが見合わない) という結論に達しつつある。どうせ使えない場合はmkdirとかを使ったロックにフォールバックするんだから、最初から後者だけ用意しとけばいいやな。
2011/03/28 15:28:20 UTC齊藤
#
Gauche の let-syntax はキーワードの重複を許すんですね。
#
(許すというかたまたまそうなってるだけ?)
#
(let-syntax ((a (syntax-rules ()((_) 1)))
             (a (syntax-rules ()((_) 2))))
  (a))
2011/03/28 15:32:41 UTCshiro
#
チェックしてないだけのような気がする。
#
R5RSの"error"は「処理系の好きにしてよい」だからいいんだもん、と強弁。
2011/03/28 15:36:15 UTC齊藤
#
それ自体はユーザーが気を付ければいいだけの話ですしね。
#
あるマクロを書くときに識別子の重複をエラーにしたかったのでダミーの let-syntax を入れれば検査できるじゃないかという思い付きを試してて気付きました。
2011/03/28 15:41:09 UTCshiro
#
実は普通の束縛も重複チェックしてない。(let ((a 1) (a 2)) a) が通る。
2011/03/28 15:42:13 UTC齊藤
#
どちらも上で定義した方が優先されるみたいですね。
2011/03/28 15:43:56 UTCshiro
#
重複チェックってナイーブにやるとO(n^2)だから、コンパイル時のオーバヘッドを恐れて避けてたんだけど、変数数個の場合がほとんどだからそんなに恐れる必要はないかなあ。データ構造つくればオーダーを減らせるけど定数項が大きくなるだろうなあ。
2011/03/28 15:52:24 UTC齊藤
#
Gauche の設計方針は「速度を落とすよりはプログラマが自分の足を撃つことを許す」って書いてた。
#
重複はともかく、 (let ((1 1) (1 2)) 3) が通るのはちょっと笑える。
2011/03/28 15:54:41 UTCshiro
#
大丈夫、オプティマイザは賢いので無意味な束縛は消えます (違