2008年1月11日金曜日

Chapter 15 Practical: A Portable Pathname Library

前説
The API

特になし。


*FEATURES* and Read-Time Conditionalization

  • read-time conditionalization とは、処理系毎に異なるコードを走らせることによって、総体としては処理系に渡ってポータブルなコードとなる機構である。
  • *FEATURES*を評価していみると、

    CL-USER> *FEATURES*
    (:ALLEGRO-CL-EXPRESS :ALLEGRO-CL-TRIAL :IPV6 :ACL-SOCKET :HIPER-SOCKET
    :PROFILER :MULTIPROCESSING :FLAVORS :LITTLE-ENDIAN :GSGC :COMPILER
    :USE-STRUCTS-IN-COMPILER :CLOS :DYNLOAD :DLFCN :UNIX :LINUX :REDHAT9
    :LINUX86 :X86 :VERIFY-STACK :VERIFY-CAR-CDR :ENCAPSULATING-EFS
    :RELATIVE-PACKAGE-NAMES :MODULE-VERSIONS :IEEE :IEEE-FLOATING-POINT
    :CONFORMING-IEEE :ICS :COMMON-LISP :ANSI-CL :DRAFT-ANSI-CL-2 :X3J13
    :ALLEGRO :EXCL :FRANZ-INC :ALLEGRO-VERSION>= :ALLEGRO-VERSION=
    :NEW-ENVIRONMENTS :SYMBOL-VALUE-VECTOR :PROCESS7 :USE-THREAD-LIBS
    :DYNLOAD-ACL-LIBRARY :ALLEGRO-V8.1 :TLSVALUES :TLSBNP :SSL-SUPPORT)
    CL-USER>

    UbuntuなのにREDHAT9と出ているところが気になる。
    別のシステムでも取ってみる。

    CL-USER> *FEATURES*
    (:ALLEGRO-CL-ENTERPRISE :IPV6 :ACL-SOCKET :HIPER-SOCKET :PROFILER
    :MULTIPROCESSING :FLAVORS :LITTLE-ENDIAN :GSGC :COMPILER
    :USE-STRUCTS-IN-COMPILER :CLOS :DYNLOAD :DLFCN :UNIX :LINUX :AMD64
    :LINUX86-64 :X86-64 :ENCAPSULATING-EFS :RELATIVE-PACKAGE-NAMES
    :MODULE-VERSIONS :IEEE :IEEE-FLOATING-POINT :CONFORMING-IEEE :ICS
    :COMMON-LISP :ANSI-CL :DRAFT-ANSI-CL-2 :X3J13 :ALLEGRO :EXCL
    :FRANZ-INC :ALLEGRO-VERSION>= :ALLEGRO-VERSION= :NEW-ENVIRONMENTS
    :SYMBOL-VALUE-VECTOR :PROCESS7 :DYNLOAD-ACL-LIBRARY :ALLEGRO-V8.1
    :64BIT :TLSVALUES :TLSBNP :SSL-SUPPORT)
    CL-USER>

    逆にこっちは、CentOSなのだがREDHATはない。。。
    まあ、*BSDと言われているわけではないので深掘りしない。

パッケージのところがわかりにくい。メモをとりながら。

  • どのようなパッケージが存在するかは、処理系毎に異なる。
  • *FEATURES*に含まれるsymbolsは、通常keywordsである。
  • feature expressionsを読んでいる間は、the readerは、KEYWORDパッケージに*PACKAGE*をbinds(する)。
  • "Thus, a name with no package qualification will be read as a keyword symbol." なんじゃこりゃ?

うーん。何がいいたいのか。パッケージの章をやった後、再度考えることにする。


Listing a Directory

この本、その場での説明なしにCLの関数を利用することが増えてきた。
そこで、SLIMEのC-cC-dhでhyperspecを参照することにする。
デフォルトでは、mozillaを立ち上げようとするので、w3mに変更する。

(setq browse-url-browser-function 'w3m-browse-url)
(autoload 'w3m-browse-url "w3m" "Ask a WWW browser to show a URL." t)
(global-set-key "¥C-xm" 'browse-url-at-point)
(defadvice browse-url-at-point
(around change-browse-url-browser-function activate compile)
(let ((browse-url-browser-function
(if (eq major-mode 'w3m-mode)
'browse-url-netscape
'w3m-browse-url)))
ad-do-it))

SLIMEがもっている調査機能はここ。
http://common-lisp.net/project/slime/doc/html/Documentation.html#Documentation

うーん、別frameにw3mが立ち上がるようにしたい。elispをいつか勉強するということで。


Testing a File's Existence

  • labelsはlocal functions and macrosを定義。(HyperSpec)

0 件のコメント: