#:g1: defsystem-compatibilityの紹介

Posted 2014-11-08 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の313日目です。

defsystem-compatibilityとはなにか

 defsystem-compatibilityは、Gary Warren King氏作の各種defsystemを統一的に扱うためのコンパチライブラリです。

パッケージ情報

パッケージ名defsystem-compatibility
Quicklisp
CLiKiCLiki: defsystem-compatibility
Quickdocsdefsystem-compatibility | Quickdocs
CL Test Grid: ビルド状況defsystem-compatibility | CL Test Grid

インストール方法

(ql:quickload :defsystem-compatibility)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 defsystemは1980年前後のMIT CADRから現在のasdf:defsystemと同じようなものが存在しますが、Common Lispには取り入れられませんでした。
Kent Pitman氏がANSI Common Lispに提案したりはしていたみたいですが、これも入らず現在に至ります。

 ただ、やはりdefsystemの需要はあったので、処理系が各々実装したり、コミュニティで提案/実装されたりしていました。
各種defsystemは大まかなところは源流のLispマシンのdefsystemと同じではあるのですが、それぞれ微妙に違っています。

 現在主流のものはasdf:defsystemですが、90年代ではMark Kantrowitz氏のmk:defsystemが良く使われていました。
また、Allegro CLやLispWorksも独自のdefsystemを持っていますが、IDE等ではこっちのサポートの方が手厚かったりはします。

 ということで、この辺りの各種systemを統一的に扱おうというのが、defsystem-compatibilityです。
現在のところ下記のようなものが定義されています。しかし、残念ながら現在のところASDFのサポートのみとのこと。

動作は、一部ですが、こんな感じです。

(dsc:map-system-files :cl-ppcre #'print)
;>>  
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/packages.lisp" 
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/specials.lisp" 
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/util.lisp" 
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/errors.lisp" 
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/charset.lisp" 
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/charmap.lisp" 
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/chartest.lisp" 
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/lexer.lisp" 
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/parser.lisp" 
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/regex-class.lisp" 
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/regex-class-util.lisp" 
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/convert.lisp" 
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/optimize.lisp" 
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/closures.lisp" 
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/repetition-closures.lisp" 
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/scanner.lisp" 
;>>  "/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/api.lisp" 
;=>  NIL

(dsc:system-source-directory (dsc:find-system :cl-ppcre)) ;=> #P"/quicklisp/dists/quicklisp/software/cl-ppcre-2.0.7/"

(dsc:available-systems) ;=> ("quicklisp")

(dsc:filename-looks-like-system-file-p "foo.asd") ;=> T

(dsc:filename-looks-like-system-file-p "foo.system") ;=> NIL

まとめ

 今回は、defsystem-compatibilityを紹介してみました。
20年前位のコードだとmk:defsystemでまとめられていることが結構多いのですが、この辺りをasdfと一緒に扱えると書き換えなくて良いので個人的には非常に嬉しいです。
今後に期待したいところですが、しかし、どうも開発は停止している様子。

comments powered by Disqus