YamaKen
yamak****@bp*****
2006年 1月 26日 (木) 19:49:26 JST
At Thu, 26 Jan 2006 00:07:30 -1000 (HST), shiro****@lava***** wrote: > > From: YamaKen <yamak****@bp*****> > Subject: [Anthy-dev 2803] r5rs: vector expression > Date: Thu, 26 Jan 2006 18:21:32 +0900 > > > これらはいずれもR5RSでそうしろと書かれていますが、以下のように > > quote必須、constにはしないのをデフォルトにしたいと思います > > このポリシーに関しては処理系作成者の都合で良いと思うのですが はい。実際に処理系によってポリシーが異なっているのは確認しました が、R5RSにはerrorにしろとか"vector constants must be quoted"とか 書いてある事は認識した上での判断だという事で上のように書きました。 > > constの方は利便性とlistとの一貫性のためです。R5RSでは '(a b c) > > もconstとして扱う事を要求しているんですが、これはstorage-compact > > ではそもそもビットが足りず実現できないし、書き換え可能listを全て > > list procedureやlist-copy等で生成するのは繁雑すぎます。vectorも > > 同様。 > > 後半は、書き換える可能性のあるlistやvectorであっても初期値を > リテラルとして書いておいてもいいよ、ということでしょうか。 そうです。 > だとしたら、思わぬバグの温床になるのでそのスタイルは避けて > おいた方がいいと思います。つまり、たとえ処理系がリテラルlistや > vectorの変更を許していたとしても、書き換えるlistやvectorは > (listやlist-copy等を使って)明示的に実行時に生成するように > 書くべき、ということです。 恥ずかしながらトップレベルの変数の初期化の事しか頭になかったんで すが、lambdaが返すオブジェクトを直接書き換えたりするとまずいです ね。ご指摘ありがとうございます。 というわけで、方針を変更してvectorリテラルは書き換え不可、listリ テラルもstorage層の実装がサポートする場合は書き換え不可にしたい と思います。 ただし、uimにlistリテラルを直接書き換えているコードがある場合は uim向けビルドでは当面書き換え可とします。 ------------------------------- ヤマケン yamak****@bp*****