World: r3wp
[!REBOL3]
older newer | first last |
Ladislav 11-Mar-2010 [1506x2] | (and that it has to be corrected) |
Re the while [return 55][print 1] behaviour in R2 - that is clearly caused by the fact, that the COND-BLOCK is (esp. in R2) handled differently than the BODY-BLOCK; the behaviour of UNTIL looks OK in R2 | |
BrianH 11-Mar-2010 [1508] | Steeve, I thought you were talking about the while [return 55][print 1] code, which would be affected by the [throw] attribute because it has a return in it. The attempt [do "while [] []"] print 'true does get processed by the intrinsic, but doesn't fail (it works correctly) and wouldn't be affected by [throw] because it doesn't have a return in it. |
Steeve 11-Mar-2010 [1509] | Then, how do you explain this ? >> attempt [do "while [][]"] ** Script error: block did not return a value ** Where: while catch either applier do attempt ** Near: while [] [] >> attempt [do [while [][]]] == none |
BrianH 11-Mar-2010 [1510x2] | Sunanda, whoops, you meant the TRY [CATCH/QUIT [...]] bug. It's already been reported. |
Ladislav mentioned it: #851. | |
Steeve 11-Mar-2010 [1512] | Well, it's comming from the intrinsic part still :) |
BrianH 11-Mar-2010 [1513x2] | Right. I just thought that you were talking about his other code because of the return. Interestingly, while [return 55][print 1] is buggy in both R2 and R3, but the bugs are different. |
Sunanda, it turns out that the while [return 55][print 1] bug hasn't been reported yet. It's related to bug#1509, but not quite the same thing. I'll report it later today. | |
Sunanda 11-Mar-2010 [1515x2] | Thanks, Brian..... |
.....Sounds like it needs a RAMBO and a CC report :) | |
BrianH 11-Mar-2010 [1517] | If it's not in the RAMBO records when they get migrated to CureCode, I'll submit it. |
Ladislav 12-Mar-2010 [1518x2] | Sunanda/Andreas/BrianH: check my comment to the CC #1506 containing a B-CATCH/B-THROW example of a dynamic construct allowing an "in time detection" of unhandled throw |
I am curious, how many users actually use the named Throw? | |
Pekr 12-Mar-2010 [1520] | what is there to throw? :-) ..... hence -1 :-) |
Andreas 12-Mar-2010 [1521x5] | Ladislav: very nice |
It's always good to see how easily we can emulate changes of internals at the REBOL level | |
I think `:result` should be `get/any 'result`, though | |
And named throw/catch should be easy to add as well, by just keeping a "stack" of handled names | |
A suggestion: http://bolka.at/share/bug1506-throw.r[temporary URL] | |
Ladislav 12-Mar-2010 [1526] | just a side note: I do not like named throws, because they can be caught by unnamed Catch, but not rethrown from it (the name is unavailable) |
Andreas 12-Mar-2010 [1527] | Ah, yes. I don't like that as well, so of course I forgot about it. |
Ladislav 12-Mar-2010 [1528] | :result versus get/any 'result - these are equivalent in R3 |
Andreas 12-Mar-2010 [1529x3] | Must have tested it with R2, then. |
Ok, updated the script so that unnamed catch catches named throws: | |
b-catch [b-throw/name 42 'foo] ; == 42 | |
Ladislav 12-Mar-2010 [1532x2] | but, anyway, when we are at discussing it, isn't there a proposal to improve the named throw behaviour? |
Is it supposed to actually "emulate" a definitionally scoped catch/throw? | |
Andreas 12-Mar-2010 [1534] | Named catch/throw, you mean? |
Ladislav 12-Mar-2010 [1535] | yes |
Andreas 12-Mar-2010 [1536] | I'm not sure. |
Ladislav 12-Mar-2010 [1537] | Nevertheless, my guess is, that: 1) named throw is not used by Rebol users 2) it can be safely discarded therefore |
Andreas 12-Mar-2010 [1538x2] | Yes, it actually seems to be that way. |
I grepped through the R2/R3 mezzanines and some library scripts, and this seems to confirm your guess. | |
Ladislav 12-Mar-2010 [1540] | will post that to the blog too |
Andreas 12-Mar-2010 [1541x4] | I think it actually Boils down to the question what the named catch/throw is or should actually |
.. be used for. | |
Is used for: not much. Should be used for: not much as well, as I think we could have better solutions for most error handling scenarios. | |
This would then leave us with the "classical" Common Lisp-style use of named catch/throw for non-local exits. And for this use-case, a definitionally scoped name would certainly be the right thing to do, imho. | |
Gregg 12-Mar-2010 [1545] | Maarten and I used a named throw in a proejct for Qtask, but I don't use it much. The question is, *should* we use it more, and what are the scenarios? It does make some handling read cleaner to me. Maybe Carl can say what he envisioned when he designed it. |
BrianH 12-Mar-2010 [1546x3] | Ladislav, your B-CATCH/B-THROW example is similar to what I suggested in an earlier comment, but in code form. Nice code :) |
And I use names CATCH and THROW. | |
I never tried to catch a named throw without a named catch. If that is possible, that is a major bug and should be reported. | |
Gregg 12-Mar-2010 [1549] | It's possible in R2. CATCH returns the name it caught. |
BrianH 12-Mar-2010 [1550x4] | It's possible in R3 as well. I'll report it later. |
Extept CATCH returns the value, not the name. Even worse. | |
Andreas, in R3 :result means GET/any 'result. | |
Sorry, Ladislav mentioned that already. | |
Gregg 12-Mar-2010 [1554] | Is it a bug, or by design though? i.e. it's a general catch. If the name gets lost on a named throw, that seems an obvious oversight in the design. |
BrianH 12-Mar-2010 [1555] | That sounds like an error that should be reported by the console. A named throw that doesn't have a corresponding named catch should be treated like it doesn't have a catch at all. |
older newer | first last |