diff --git a/README b/README index d893bb81ed82f60c8c508561a52e89914d84a0c2..3eba96e11c123b93940e502b1b47951365858477 100644 --- a/README +++ b/README @@ -1,17 +1,12 @@ asdf: another system definition facility -*- Text -*- -[ Changes in draft 3: plans go away again, but process-option comes - in. OPERATION turns into a clos object ] - -[ Changes in draft 2: acknowledge sources, incorporated bunch of stuff -from kmp proposal, perhaps-easier-to-understand version-satisfies -sample implementation ] +$Id: README,v 1.2 2001/08/02 19:09:07 dan_b Exp $ This system definition utility talks in terms of 'components' and 'operations'. Components form systems: a component represents a source file, or a -collection of source files. A system is therefore a component, +collection of components. A system is therefore a component, recursively formed of a tree of subcomponents. Operations are instantiated then performed on the nodes of a tree to @@ -244,21 +239,22 @@ There is a defsystem form which looks basically similar to mk-defsystem syntax We extend the defsystem syntax to allow for eql-specialised methods on -modules - +components - (:module "foo" (:components "bar" "baz" "quux") - (:perform compile-system :after ((c component)) + (:perform compile-system :after (op c) (do-something c)) - (:explain compile-system :after ((c component)) + (:explain compile-system :after (op c) (explain-something c)) has the effect of -(defmethod perform :after ((operation (eql 'compile-system)) ((c component))) +(defmethod perform :after ((op compile-system) (c (eql ...))) (do-something c)) -(defmethod explain :after ((operation (eql 'compile-system)) ((c component))) +(defmethod explain :after ((op compile-system) (c (eql ...))) (explain-something c)) +where ... is the component in question ** shorthand for source-file components @@ -300,6 +296,21 @@ probably lowercase - and lowercase extensions, with :case :local. This appears to work out fine, but but I haven't thought too hard about it +** symbols vs strings + +Warn the user that they should either use keywords or be careful with +the package that they evaluate defsystem forms in + +<Krystof> You don't want to have (defsystem partition ...) being read in the ++cl-user package +<rahul> hrm +<Krystof> Because that will intern a cl-user:partition symbol +<rahul> yeah, accidental interning could be a problem +<Krystof> Which will then collide with the partition:partition symbol +<Krystof> Hence (defsystem :partition ...) +<rahul> yeah + + ** defsystem syntax *** export process-option-list? *** shortcut to setting up dependencies using :serial, :parallel @@ -323,6 +334,21 @@ We should do this the more general way internally even if it never gets to surface syntax; it'd make the whole "compile-after-load" stuff a lot cleaner. +** the :pathname argument is misnamed + +As demonstrated by the way we split it into name and type ourselves +instead of using parse-namestring, to avoid the problem that "foo.lisp" +is an absolute director when treated as an LPN. As it doesn't behave +like a pathname, we shouldn't fool the user into thinking it is one + +<dan_b> because "foo.lisp" in an LPN is an absolute path +<Krystof> So you should be merging the other way round, no? +<Krystof> (merge-pathname *component-pathname-defaults* "foo.lisp") +[ no ] + +<Krystof> But you can't currently do ((:file "/absolute/file/that/I/want.lisp")) anyway +[ this is true ] + * missing bits in implementation ** all of the above ** package exports @@ -334,3 +360,4 @@ present list is ad-hoc, so go through and consider it properly ** dependency circularities: test it works ** versions +