restarts vs debugger command
fahree at gmail.com
Thu Jul 9 15:26:05 UTC 2015
> But what about "normal" operation? E.g. I use "of-system" to declare and assert
> that the file is loaded through a correct system. Only a special
> variable works there as there is no condition at all.
Why would a file be loaded through the wrong system? Is it something
likely to happen? How often do you write systems with overlapping
That said, if that's a concern you have, e.g. while cleaning up a big
hairy non-incremental build like the one we used to have for QRes at
ITA, instead of a dynamic check with a dynamic variable, why don't you
instead try a static analysis of your system files? See
asdf/contrib/detect-multiply-used-files.lisp for how to do just that.
Finally, going forward, if you use package-inferred-system, you will
be able to easily depend on single files from other systems without
introducing bad dependencies that prevent an incremental build.
> What edit-file does? It can call external editor, wait while user
> finishes the editing
> and then retry operation. But in SLIME and Lispworks my code does just
> some other
> thing: asynchronous message is sent to IDE so that file is opened in
> the IDE. The editing
> is done in another thread and maybe in anoter process (as with
> SLIME/EMACS). Debugger with all restarts is still available, so user
> can choose any restart. When user decides what to do, he can invoke
> the restart he wants.
It's your responsibility to have the edit-file function either
synchronize on some buffer commit (C-x # for emacsclient), or just
return immediately, at which point the loop kicks in and you're back
at the same menu, but with an editor window opened.
> After sending a message a control is returned to handler function.
> What is the reasonable action of that function? IMO the only
> reasonable action is to resignal the condition. This is unnecessary
> blinking, or unnecessary output: user just starting to edit, and
> resignaling does not supply user with any new useful information.
> This is the difference between restart and "debugger command". Restart
> either fixes the problem or resignals condition (maybe some new one).
> Debugger command (e.g. "show source" or "eval in frame") does another
> thing: it just evaluates some code in current context and then returns
> to the debugger without restarting.
OK, I can see that this is a limit with the restart interface, unless
you can somehow integrate the "waiting for the editor to be done" with
your debugger's interface.
> My extension can be kept separated, but it defines some around method
> and thus can interfere with other extensions which could also define
> the same method. This is not very good.
This might still be better than patching the source. And if such
conflict DOES occur, it will be time to add a hook for what will
*then* be a commonly used extension point.
> Also maybe I can use some wrapper function to asdf::oos instead of
> patching asdf, but it will not work in the cases where load-system is
> called implicitly, e.g. from ql:quickload.
oos is a deprecated API, and not one to define wrappers for. Maybe you
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
As the Chinese say, 1001 words is worth more than a picture. — John McCarthy
More information about the asdf-devel