Gauche > Archives > 2009/09/15

2009/09/15 01:41:47 UTCzick
#
Common Lispに「無名パッケージ」というのは存在しないんじゃないでしょうか。
2009/09/15 01:44:46 UTCg000001
#
#:fooとかはパッケージ名ないといえばないですねー。
#
ただ無名パッケージではないような。
2009/09/15 01:45:33 UTCzick
#
Javaなんかはパッケージ名を指定しなければ「無名パッケージ」に属しますが、
#
CLだとcl-userですね。
2009/09/15 01:48:50 UTCshiro
#
make-packageに与えられるのはシンボル、文字列、文字で、全部表示名にcoerceされて内部のパッケージテーブルに登録されちゃうから、
#
Gaucheの(make-module #f)で作れるような「直接のポインタを握ってない人からはアクセス不可能」なパッケージというのは無理っぽいね。
#
まあCLのパッケージはシンボルの外部表現に使う時にシリアライズ可能じゃないとだめだから、その前提を崩さない限り無名パッケージは無理か。
2009/09/15 02:45:17 UTC(び)
#
へい、間違った表現でした >無名パッケージ
2009/09/15 10:35:44 UTCshiro
#
uninternedなシンボルに相当する、uninternedなパッケージというのを考えることはできないかな。グローバルなパッケージテーブルに登録されないパッケージ。
#
外部表現としては、#n#表記がつかえるといいんだけどこれはシンボル全体にかかっちゃうから、何らかの特殊記法を導入して #:0=#:foo:bar #:0#:bar とか(読みにくい!)
#
これは #:foo がfooという名前を持つuninternedがパッケージで、その中のbarという名前のシンボル。通常のuninternedなシンボルは
#
名前にコロンが入ることがないから (入るならエスケープされちゃうから) 区別できる、かな?
#
で、uninternedなので #:foo:bar #:foo:baz とあった場合に最初のパッケージと次のパッケージが同じかどうかわからない。なので#n=記法に似た#:n=記法でもって同一性を示す
#
こんなことするメリットって特に思いつかないけれど、何となくCLのシンボルにおける抽象化階層が循環してないのが気持ち悪いというか (e.g. 同名のシンボルのセットを持つ「世界のコピー」はパッケージを分ければ作れるけれど、複数のパッケージのセットからなる「世界のコピー」を作る手段がない、とか)
2009/09/15 10:48:29 UTCshiro
#
まあそれに関してはGaucheのモジュールも同様で、無名モジュールは作れるけれど、「複数の名前つきモジュールのセット」を複数持ちたいと思うと綺麗にいかない。
#
具体的な応用の可能性としては、たとえば複数のライブラリがどんどんバージョンアップされてる時に、ある時点のライブラリのセットと、別の時点のライブラリのセットを両方オンメモリにして何かやりたい、とか。