From: Bruno H. <br...@cl...> - 2004-06-03 17:56:36
|
Ctrl-D (= EOF on standard-input) has traditionally meant in Unix and clisp: "get outta here", "don't bother me, I don't care". Now in clisp after any ASSERT that doesn't have a place, such as (ASSERT (= 3 4)) Ctrl-D leads to the same situation over and over again. This is annoying. I don't know whether the bug is in the ASSERT macro, the CONTINUE restart or the maybe-continue function. If you don't fix it, I'll deal with it eventually. But in the mean time, please don't make the problem worse. If a user needs to take a complex action, such as defining a function or method, before continuing from a continuable error, you can also assume that he has the time to type ":R2". But if he's in a hurry or wants to get out of a weird situation, let him do so just by typing Ctrl-D. Bruno |
From: Sam S. <sd...@gn...> - 2004-06-03 18:41:09
|
> * Bruno Haible <oe...@py...t> [2004-06-03 19:47:41 +0200]: > > Ctrl-D (= EOF on standard-input) has traditionally meant in Unix and clisp: > "get outta here", "don't bother me, I don't care". > > Now in clisp after any ASSERT that doesn't have a place, such as > (ASSERT (= 3 4)) > Ctrl-D leads to the same situation over and over again. This is annoying. > I don't know whether the bug is in the ASSERT macro, the CONTINUE restart > or the maybe-continue function. this is not a bug. you may be able to change the global state that would make the ASSERT pass. e.g., (assert (zerop *global-error-counter*)) > If a user needs to take a complex action, such as defining a function > or method, before continuing from a continuable error, you can also > assume that he has the time to type ":R2". But if he's in a hurry or > wants to get out of a weird situation, let him do so just by typing > Ctrl-D. Similarly, check_fdefinition() should use RETRY and not CONTINUE. -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> He who laughs last did not get the joke. |
From: Bruno H. <br...@cl...> - 2004-06-03 19:26:26
|
Sam wrote: > > Now in clisp after any ASSERT that doesn't have a place, such as > > (ASSERT (= 3 4)) > > Ctrl-D leads to the same situation over and over again. This is annoying. > > I don't know whether the bug is in the ASSERT macro, the CONTINUE restart > > or the maybe-continue function. > > this is not a bug. Of course it's not a bug in the sense that ANSI CL doesn't say what Ctrl-D means. But it's a very annoying and unfriendly behaviour, to not let the user use the normal, simple escape command in order to escape the break loop. > you may be able to change the global state that would make the ASSERT > pass. > e.g., (assert (zerop *global-error-counter*)) If the user has the time to do (setq *global-error-counter* 0), he also has the time to look at his restarts. > Similarly, check_fdefinition() should use RETRY and not CONTINUE. Yes, when I call (asdoisad 8) I get the same annoying behaviour of Ctrl-D. This would solve 1/3 of the problem. Now about the other parts: - How would you handle the ASSERT case? There, part of the problem is that ANSI CL specifies that a CONTINUE restart is established. Should we establish a RETRY restart as well? - What shall Ctrl-D do? Invoke RETRY? Invoke CONTINUE? Invoke RETRY or CONTINUE? What if both RETRY and CONTINUE restarts are available? Bruno |
From: Sam S. <sd...@gn...> - 2004-06-03 20:03:59
|
> * Bruno Haible <oe...@py...t> [2004-06-03 21:17:32 +0200]: > > - How would you handle the ASSERT case? There, part of the problem is that > ANSI CL specifies that a CONTINUE restart is established. Should we > establish a RETRY restart as well? I think ASSERT is fine as is. this problem has been already solved. > - What shall Ctrl-D do? Invoke RETRY? Invoke CONTINUE? Invoke RETRY or > CONTINUE? What if both RETRY and CONTINUE restarts are available? C-d is always CONTINUE, never RETRY. -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> Live Lisp and prosper. |
From: Bruno H. <br...@cl...> - 2004-06-03 20:34:38
|
Sam wrote: > > - What shall Ctrl-D do? Invoke RETRY? Invoke CONTINUE? Invoke RETRY or > > CONTINUE? What if both RETRY and CONTINUE restarts are available? > > C-d is always CONTINUE, never RETRY. Actually Ctrl-D is CONTINUE if possible, otherwise ABORT. Thanks for the patch, Ctrl-D after calling an undefined function now works as escaping! > > - How would you handle the ASSERT case? There, part of the problem is > > that ANSI CL specifies that a CONTINUE restart is established. Should we > > establish a RETRY restart as well? > > I think ASSERT is fine as is. > this problem has been already solved. Nope, when I enter (assert (integerp pi)) then Ctrl-D effectively does a retry. What has been solved was the particular case of batch mode behaviour. You probably have to distinguish ASSERT with some places and ASSERT with just one argument form. Bruno |
From: Sam S. <sd...@gn...> - 2004-06-03 20:57:19
|
> * Bruno Haible <oe...@py...t> [2004-06-03 22:25:43 +0200]: > >> > - How would you handle the ASSERT case? There, part of the problem is >> > that ANSI CL specifies that a CONTINUE restart is established. Should we >> > establish a RETRY restart as well? >> >> I think ASSERT is fine as is. >> this problem has been already solved. > > Nope, when I enter (assert (integerp pi)) > then Ctrl-D effectively does a retry. that's what you asked for. C-d means CONTINUE, in ASSERT that means retry (after maybe entering new values). -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> If Perl is the solution, you're solving the wrong problem. - Erik Naggum |
From: Bruno H. <br...@cl...> - 2004-06-04 12:07:05
|
Sam wrote: > > Nope, when I enter (assert (integerp pi)) > > then Ctrl-D effectively does a retry. > > C-d means CONTINUE, in ASSERT that means retry > (after maybe entering new values). We are free to define what Ctrl-D means. Since CONTINUE is not the right restart to call in the case of ASSERT with no places, then Ctrl-D should call the ABORT restart instead, in this case. Bruno |
From: Sam S. <sd...@gn...> - 2004-06-04 13:09:47
|
> * Bruno Haible <oe...@py...t> [2004-06-04 13:58:05 +0200]: > > Sam wrote: >> > Nope, when I enter (assert (integerp pi)) >> > then Ctrl-D effectively does a retry. >> >> C-d means CONTINUE, in ASSERT that means retry >> (after maybe entering new values). > > We are free to define what Ctrl-D means. Since CONTINUE is not the > right restart to call in the case of ASSERT with no places, then > Ctrl-D should call the ABORT restart instead, in this case. So sometimes in ASSERT C-d will do CONTINUE and sometimes ABORT?! What are you smoking? -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> The only thing worse than X Windows: (X Windows) - X |
From: Bruno H. <br...@cl...> - 2004-06-04 13:45:33
|
Sam wrote: > > We are free to define what Ctrl-D means. Since CONTINUE is not the > > right restart to call in the case of ASSERT with no places, then > > Ctrl-D should call the ABORT restart instead, in this case. > > So sometimes in ASSERT C-d will do CONTINUE and sometimes ABORT?! It already does. In a break loop signalling a non-continuable error, Ctrl-D already terminates the break loop and returns to the next-higher REP loop; this is equivalent to ABORT. All I'm asking for is that the user interactions after (ASSERT (INTEGERP PI)) are the same as after a non-continuable error. Bruno |
From: Sam S. <sd...@gn...> - 2004-06-04 14:19:00
|
> * Bruno Haible <oe...@py...t> [2004-06-04 15:36:18 +0200]: > > Sam wrote: >> > We are free to define what Ctrl-D means. Since CONTINUE is not the >> > right restart to call in the case of ASSERT with no places, then >> > Ctrl-D should call the ABORT restart instead, in this case. >> >> So sometimes in ASSERT C-d will do CONTINUE and sometimes ABORT?! > > It already does. In a break loop signalling a non-continuable error, > Ctrl-D already terminates the break loop and returns to the > next-higher REP loop; this is equivalent to ABORT. no. C-d after ASSERT is always CONTINUE. C-d after other errors is ABORT. > All I'm asking for is that the user interactions after (ASSERT > (INTEGERP PI)) are the same as after a non-continuable error. No. If he wants a non-continuable error, he can do (unless (integerp pi) (error ...)) ASSERT means that he has some means to change the behavior of the check. (If the compiler can determine that there is no way that the test will evaluate to T, then you can make the error non-continuable). In the last several months, I did personally encounter a place-less ASSERT in a long-running process (code supplied by an outside contractor, run by me in CLISP), where a change in a global variable enabled me to finish the computation. The MAIN concern is to not lose a computation, not fleeting convenience of a newbie. The principal advantage of CL _environment_ over, say, Java and C, is that even on error, not all is lost. -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> Abandon all hope, all ye who press Enter. |
From: Bruno H. <br...@cl...> - 2004-10-28 13:06:24
|
On 2004-06-04 I wrote: > We are free to define what Ctrl-D means. Since CONTINUE is not the right > restart to call in the case of ASSERT with no places, then Ctrl-D should > call the ABORT restart instead, in this case. I've implemented this change now. ANSI CL compliance is still guaranteed, since ASSERT establishes a restart called CONTINUE. [1]> (assert (= 3 4)) *** - (= 3 4) must evaluate to a non-NIL value. The following restarts are available: CONTINUE :R1 Retry ABORT :R2 ABORT Break 1 [2]> continue *** - (= 3 4) must evaluate to a non-NIL value. The following restarts are available: CONTINUE :R1 Retry ABORT :R2 ABORT Break 1 [3]> [Ctrl-D] [4]> Bruno |
From: Sam S. <sd...@gn...> - 2004-10-28 15:53:29
|
> * Bruno Haible <oe...@py...t> [2004-10-28 15:00:25 +0200]: > > On 2004-06-04 I wrote: >> We are free to define what Ctrl-D means. Since CONTINUE is not the right >> restart to call in the case of ASSERT with no places, then Ctrl-D should >> call the ABORT restart instead, in this case. > > I've implemented this change now. ANSI CL compliance is still guaranteed, > since ASSERT establishes a restart called CONTINUE. > > [1]> (assert (= 3 4)) > > *** - (= 3 4) must evaluate to a non-NIL value. > The following restarts are available: > CONTINUE :R1 Retry > ABORT :R2 ABORT > > Break 1 [2]> continue > > *** - (= 3 4) must evaluate to a non-NIL value. > The following restarts are available: > CONTINUE :R1 Retry > ABORT :R2 ABORT > > Break 1 [3]> [Ctrl-D] > [4]> what happens when assert depends on a global variable? (assert *foo*) I think this new behavior is inconsistent: Sometimes C-d means ABORT and sometimes CONTINUE. *YUK*. (note that the original problem with non-interactive infinite loop has been already fixed) -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> A professor is someone who talks in someone else's sleep. |
From: Bruno H. <br...@cl...> - 2004-10-28 17:09:15
|
Sam wrote: > what happens when assert depends on a global variable? > > (assert *foo*) The user can type 'continue' (or copy&paste this word). > I think this new behavior is inconsistent: > Sometimes C-d means ABORT and sometimes CONTINUE. CONTINUE means CONTINUE. Ctrl-D means "I wanna get out of here". > (note that the original problem with non-interactive infinite loop has > been already fixed) Yes that was your 2004-06-03 fix. Bruno |
From: Sam S. <sd...@gn...> - 2004-10-28 17:20:32
|
> * Bruno Haible <oe...@py...t> [2004-10-28 19:03:14 +0200]: > > Sam wrote: >> what happens when assert depends on a global variable? >> >> (assert *foo*) > > The user can type 'continue' (or copy&paste this word). > >> I think this new behavior is inconsistent: >> Sometimes C-d means ABORT and sometimes CONTINUE. > > CONTINUE means CONTINUE. > Ctrl-D means "I wanna get out of here". I agree. All I am saying is that C-d should mean the exact same this _regardless_ if whether ASSERT has any places or not. -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> Any connection between your reality and mine is purely coincidental. |
From: Bruno H. <br...@cl...> - 2004-10-28 19:10:27
|
Sam wrote: > > CONTINUE means CONTINUE. > > Ctrl-D means "I wanna get out of here". > > I agree. > All I am saying is that C-d should mean the exact same this _regardless_ > if whether ASSERT has any places or not. So, to treat ASSERT with places like you did with CHECK-TYPE? Makes sense, indeed. Bruno |
From: Sam S. <sd...@gn...> - 2004-10-28 19:32:23
|
> * Bruno Haible <oe...@py...t> [2004-10-28 21:04:29 +0200]: > > Sam wrote: >> > CONTINUE means CONTINUE. >> > Ctrl-D means "I wanna get out of here". >> >> I agree. >> All I am saying is that C-d should mean the exact same this _regardless_ >> if whether ASSERT has any places or not. > > So, to treat ASSERT with places like you did with CHECK-TYPE? Makes > sense, indeed. so let's make C-d always mean ABORT. -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> My other CAR is a CDR. |
From: Bruno H. <br...@cl...> - 2004-10-28 20:28:30
|
Sam wrote: > > So, to treat ASSERT with places like you did with CHECK-TYPE? Makes > > sense, indeed. > > so let's make C-d always mean ABORT. Not always! For all cases of ASSERT, I don't mind, but for CERROR it must mean CONTINUE. Just like when pressing Return on a GUI panel is sometimes equivalent to the OK button and sometimes to the Cancel button. It depends on the situation. Bruno |
From: Sam S. <sd...@gn...> - 2004-10-29 13:20:47
|
> * Bruno Haible <oe...@py...t> [2004-10-28 22:22:26 +0200]: > > Just like when pressing Return on a GUI panel is sometimes equivalent > to the OK button and sometimes to the Cancel button. It depends on the > situation. I thought that RET was always Yes/OK and ESC was always No/Cancel and Space was the default. whatever. -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> Bus error -- driver executed. |
From: Bruno H. <br...@cl...> - 2004-10-29 13:50:12
|
Sam wrote: > > Just like when pressing Return on a GUI panel is sometimes equivalent > > to the OK button and sometimes to the Cancel button. It depends on the > > situation. > > I thought that RET was always Yes/OK and ESC was always No/Cancel and > Space was the default. It isn't. In most GUIs today there is the notion of a "default" button for a dialog, see e.g. http://developer.kde.org/documentation/standards/kde/style/dialogs/simple.html The Apple GUI guideline are more precise: http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGDialogs/chapter_9_section_3.html#//apple_ref/doc/uid/20000962/TPXREF27 "The default button should be the button that represents the action that the user is most likely to perform if that action isn't potentially dangerous. A default button has color and pulses to let the user know that it is the default." I think our RESTARTs and the code in MAYBE-CONTINUE and BREAK-LOOP could use this concept as well: 1) let Ctrl-D be this "default" button, 2) display a visual mark to indicate which one is the default. Like this: [1]> (check-type pi integer) *** - The value of PI should be of type INTEGER. The value is: 3.1415926535897932385L0 The following restarts are available: STORE-VALUE :R1 You may input a new value for PI. ABORT :R2 (*) ABORT Bruno |