Thanks, cool refactoring!
1- It makes ASDF more robust against implementations that for some reason would allow only one call to (call-next-method).
I am don't know about this.
But if:
CLHS does say the function has lexical scope and indefinite extent.
... this is problem of implementation, right?
The only previously allowed extension it prevents is defining :before or :after methods ...
The main proplem is that those who use :perform-with-restarts getted not pretty surprise. And therefore need to either warn them of the incompatibility or look the other way.
I think you understand me.
I do not like only one thing: restart try-reCOMPILING semantically not bind with load-op operation. Although i'am not sure that it is necessary to change ...
Чтв 06 Окт 2011 20:21:02 +0400, Far fahree@gmail.com написал:
2011/10/6 Сергей Катревич linkfly1@newmail.ru:
O please do not rush. Simplify perform-with-restart is good way. But your last patch:
- or makes the new version asdf is not backward compatible
- or provides an error (implicitly, rarely appears)
Can you explain in what situation my patch causes an error?
If I understand correctly, the only functional difference wrt your version is that I explicitly call (perform o c) instead of going through (c-n-m).
As for the incompatible replacement of (call-next-method) by an explicit (perform o c):
1- It makes ASDF more robust against implementations that for some reason would allow only one call to (call-next-method). It wasn't clear to me that all implementations behave well when that's not the case; however, the CLHS does say the function has lexical scope and indefinite extent.
2- The only previously allowed extension it prevents is defining :before or :after methods on superclasses of load-op and cl-source-file. I can imagine a use for that: logging, though then you might as well log around perform rather than p-w-r. This does not otherwise affect inline methods on perform-with-restarts; not that anyone defines any such method AFAICT.
In the end, I think your argument wins, and in 2.017.8, I return to (c-n-m) and simplify things further:
- returned to (call-next-method) in the load-op method, make it a loop.
- moved the main restart from perform-plan to an :around method
of perform-with-restarts
- removed the redundant method for compile-op, since the main :around
method already provides a restart that does the very same.
NB: my 2.017.8 does pass all the tests, including test-retry-loading-component-1.script and test/test-try-recompiling-1.script that already test this functionality — thanks a lot to gwking!
NB2: Since there's more coding involved, I'm pushing release candidacy to next week, and release two weeks from now.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org