2008年1月14日月曜日

Chapter 21 Programming in the Large: Packages and Symbols

前説

名前の衝突の問題は、CLでは、the readerの振舞の問題となる。テキスト上の名前をsymbolsに変換するのは、the readerの役目。そのときに、同じ名前を同じsymbolにするか違うsymbolにするか、ということ。


How the Reader Uses Packages

メモ。


  • packagesはそれぞれ名前を持つ。
  • FIND-PACKAGEで、packagesの名前検索ができる。
  • *PACKAGE*はa packageの名前をもち、それをthe current packageと呼ぶ。
  • FIND-SYMBOLは、a name と a package nameを引数にとり、そのnameに対応したsymbolが存在する場合はそれを返し、存在しない場合はNILを返す。
  • INTERNは、FIND-SYMBOLと似たようなものだが、存在しないときには、そのnameに対応したsymbolをそのpackageに生成する。
  • プログラマが使用する名前のほとんどは、unqualified(無資格? 無修飾? 無制限?)である。具体的には、コロンをひとつも含んでいない。
  • その場合、the readerが「テキストの a name を読む」とは、それのエスケープ文字を変換して、全体を大文字にして、INTERNに渡すということだ。
  • コロンを含んでいる名前を a package-qualified name と呼ぶ。(修飾/制限だ)
  • the readerは、a package-qualified name を読むと、それをコロンを区切りとして分解する。それぞれの部分をa package nameやa nameと解釈する。
  • 1コロンは、an external symbolを指すものであり、externalであるということは、元packageがそれをexportsしているということ。存在しなかったり、externalでなかったりすると、the readerがエラーを上げる。
  • 2連続コロンは、おお!強制介入。externalであるかにかかわらず、そのsymbolがそのpackageに存在するなら返却される。
  • keyword symbolsとは、コロンから始まるもののこと。これらは、KEYWORDという名前のpackageにINTERNされて、自動的にexportされる。さらに、同時に、そのsymbolと同じ名前と値のa constant variableを定義する。
  • uninterned symbolsは、頭に#:をつけたもの。どのpakageにもINTERNされない。それを読むたびにthe readerは異なるsymbolを生成する。



A Bit of Package and Symbol Vocabulary

メモ。


  • FIND-SYMBOLを使ってあるpackageについて取得可能なsymbolsを、"accesible in that package"と言う。これは、対象としているpackageが current packageであるときに、unqualified nameで参照可能なものということ。
  • この内訳は2つになる。
  • ひとつは、the readerがそのpackageのname-to-symbolテーブルにinternしたもの。それは、"present in the package"と言う。
  • もうひとつは、そのpackageが他のpackageのsymbolsをinheritsしたもの。inheritsするということは、"using the other package"と言う。ただし、the used package自身がexportsしているsymbolsだけがinheritsされる。このようにexportsには2つの効果がある。inheritsされるということと、package-qurlified names(コロン1つ型)で参照可能になるということ。
  • このinheritanceにおいて名前衝突がおこった場合は、そのうちのひとつを a shdowing symbolにすることによって、name-to-symbolの対応を単一にして解消できる。
  • useとは別にimportがある? (頭がクラクラしてきた。。。)
    だめだ、概念を文章だけで説明されてもなんだかわからない。この後の節の例をみて理解しよう。
  • a present symbolはuninternできる。uninterned symbolのPRINTは#:記法となる。



Three Standard Packages
Defining Your Own Packages
Packaging Reusable Libraries

特になし。


Importing Individual Names

importは個々のsymbolに対してなんですね。


Packaging Mechanics
Package Gotchas

特になし。

この章も楽しめました。

0 件のコメント: