<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">
<br><div><div>On 2010-04-20, at 19:57 , Juan Jose Garcia-Ripoll wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">On Tue, Apr 20, 2010 at 6:17 PM, james anderson <span dir="ltr"><<a href="mailto:james.anderson@setf.de">james.anderson@setf.de</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"> that there is such difficulty to select a stable term indicates that<br> the form of the expression is wrong.<br></blockquote><div><br>Not really. It simply shows that some concepts are difficult to fit in one or two words -- as in :weakly-depends-on How weakly? Condition? Requirement? Works without, builds without?<br></div></div></blockquote><div><br></div>if the concepts are "difficult to fit in one or two words", then the expression form should disambiguate rather than obscure.</div><div><br></div><div>just as</div><div> (defstruct (person (:print-function print-person)) name age sex)</div><div>is better than</div><div> (defstruct person :print-function print-person name age sex)</div><div>or </div><div> (with-open-file (stream "here" :direction :input) (read stream))</div><div>better than</div><div> (with-open-file stream "here" :direction :input (read stream))</div><div><br></div><div>a pattern such as </div><div> (defsystem (a-system :class extended-system :require some-implementation)</div><div> :components ((:file x)))</div><div>is better than</div><div> (defsystem a-system</div><div> :class extended-system</div><div> :require some-implementation</div><div> :components ((:file x)))</div><div> <br><blockquote type="cite"><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"> the mechanism[1] which hard-wires parameter segregation in the<br> defsystem macro is a tell-tale.<br></blockquote><div><br>I do not like the current mechanism and I have made it explicit.<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"> the implementation note[2] did not offer any reasons for the change,<br></blockquote><div><br>This was a followup on various messages, as you have been able to find. </div></div></blockquote><blockquote type="cite"><div class="gmail_quote"><div><br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"> the asdf defsystem protocol fails these requirements in several ways:[...]<br> the instantiation protocol provides limited support for non-core<br> class designators and requires that<br> - all packages must exist before the declaration is read,<br> - all classes must be defined before the declarations is interpreted.<br></blockquote><div><br>Indeed this is a problem.<br></div></div></blockquote><div><br></div>if it might be possible to confirm that the shortlist, above, is a complete statement of the problem, that would help.</div><div><br><blockquote type="cite"><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"> note that all of these issues apply to the model itself, not to the<br> modeled application. in which case, the pertinent declaration forms<br> should be distinct from those which apply to the system components.<br></blockquote><div><br>[...]<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"> there are at least two ways to accomplish the syntactic machinations.<br> one would be to follow the standard source patterns and standardize<br> an independent expression</blockquote><div><br>That would cause less pain because it could be macroexpanded, but it would fail to annotate the system form itself with a dependency,</div></div></blockquote><div><br></div>is that one of the requirements? one of the earlier discussions suggested that the load protocol be implemented as a restricted read-eval loop. which would itself be in a position to collect any annotations.</div><div><br><blockquote type="cite"><div class="gmail_quote"><div> which I, against your way of thinking, is there -- just like a STANDARD-CLASS depends on the existence of such class to process its arguments, this is a meta-dependency: we need a system to parse the existing system. Would you then have the :metaclass argument outside DEFCLASS?<br></div></div></blockquote><div><br></div>it depends on whether the requirement is that it behave like use/in-package or like :metaclass.</div><div>given the present formulation, what is the consequence of a dependency which appears in more than one system definition. is it reloaded or not? what happens if the features have changed since it was first loaded?</div><div>is the behavior by intent, or a side-effect of the implementation?</div><div><br><blockquote type="cite"><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"> a second form would be to elaborate<br> the system name by attaching the annotations to it.</blockquote><div><br>Why the system name?<br></div></div></blockquote><div><br></div>it is a conventional locations. (see above.)</div><div><br><blockquote type="cite"><div class="gmail_quote"><div><br>I insist. CLOS classes do have meta-annotations that give information on how to process the class definition itself, XML does as well, at least from a writer's point of view -- I do not know the programmer's side, which you know better having implemented a library for XML yourself.</div></div></blockquote></div><div><div><br></div>if you would like to pursue that path, we can discuss whether the meta-annotations actually apply to the operator, and, as such, it would be more appropriate to declare the system as</div><div><br></div><div><div>((defsystem :class extended-system :require some-implementation) a-system</div><div> :components ((:file x)))</div><div><br></div><div>but that is outside of the present thread.</div></div><div><br></div><div><br><blockquote type="cite"><div class="gmail_quote"><div> <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"> there are several ways to support the late-binding for the system/<br> module/implementation classes. the existing asdf implementation<br> already delays the process somewhat in the way it resolved classes by<br> permitting the use of keywords. one can conceive of a protocol which<br> relied on the same search process as applies to systems to be applied<br> to the classes themselves during system construction. this would,<br> however. mean that the current suggested practice of interpreting<br> system declarations in a null package would be replaced with one in<br> which the package was significant.<br clear="all"></blockquote><div><br>I do not agree. My view right now is the following:<br><br>1- system definitions continue to be read in the appropriate package.<br></div></div></blockquote><div><br></div>as of last reading, they were loaded by default into a temporary package which was then deleted.</div><div>is this the appropriate package? if so, why?</div><div><br><blockquote type="cite"><div class="gmail_quote"><div>2- at some point we may introduce tokens with late bindings to packages -- this is essential for rules that depend on functions that depend on packages that are not created.<br></div></div></blockquote><div><br></div>why tokens? what function do they support and why are tokens the best way to accomplish that? why is it better to specify the future home package that it would be to search for it? why is that better than it would be to always use the same package? why is it better than to use a package named after the system?</div><div><br></div><div><blockquote type="cite"><div class="gmail_quote"><div> 3- we annotate the system definition with meta-dependencies.<br></div></div></blockquote><div><br></div>what are meta-dependencies?</div><div>- packages?</div><div>- classes in packages?</div><div>- systems?</div><div>- features?</div><div>- ?</div><div><br><blockquote type="cite"><div class="gmail_quote"><div>4- We make _no_promise_, absolutely no promise about when the meta-dependencies will be use. In this sense this is exactly like the MOP class finalization protocol.<br></div></div></blockquote><div><br></div>before perform?</div><div>before operate-on-system?</div><div>before shared-initialize starts? completes?</div><div>before initialize-instance starts, completes?</div><div><br><blockquote type="cite"><div class="gmail_quote"><div> 5- At some point we will decide to actually use the system for something else than querying dependencies or inspecting the semantic annotations (author, description, components, etc).<br>6- It is in that moment that meta dependencies will _typically_ be ensured, the system and components will be finalized to the appropriate classes and we will have fully working dependencies.<br></div></div></blockquote></div><br></body></html>