> ASDF checks to make sure all of the initargs are defined when parsing a 
> `defsystem`. This is good for catching errors, but is terrible for 
> extensibility. This means that any attempt to add additional metadata will be 
> backwards incompatible.

> I can think of two ways to fix this:

>  1. Add a "garbage can" slot to `component` that will be filled with a 
> property list, and allow programmers to do whatever they want here. This 
> doesn't seem great to me.

>  2. Add a new `defsystem` parsing error class that is 
> `unknown-component-property`, raise it when an unknown property is 
> encountered and allow the user to continue, discarding the initarg and 
> accompanying value.

> The second alternative is what I favor. It isn't great, because it will only 
> maintain extensibility going forward, but I think it's the best we can do.


How can ASDF or a developer determine that the unknown property doesn't change 
the semantics of the DEFSYSTEM, and therefore discarding it would have an 
effect that's contrary to the author's intention ?
ASDF has no syntactic distinction between properties that affect the 
compilation process and mere annotations like author, licence, etc...


> I suppose that we could also add an initarg to tell ASDF to continue such 
> errors silently.

> I'd be inclined to suggest that this take an ASDF version expression as 
> value, so that the error is quietly ignored only by ASDF versions below that. 
> This means that the property will start to be checked when it has become 
> authoritative.
> Note that for one's own `system` and `component` subclasses, the set of 
> initargs can be extended without any monkeying around.



This is a recipe for maintenance nightmares. Let's not go there.

--
Stelian Ionescu

Reply via email to