Re: inconsistencies with __return ejector
"Mark Miller" <[email protected]>
| Newsgroups | gmane.comp.lang.e.general |
|---|---|
| Message-ID | <[email protected]> |
On Sun, Mar 23, 2008 at 8:23 AM, Toby Murray <[email protected]> wrote: > Hi e-lang, > > I'm writing to bring up the issue of the __return ejector and some > potential inconsistencies that surround it. > > The essential potential problem is that most new programmers to E will > treat "return" as a statement and thus expect to be able to use it > pervasively. > > I have been tripped up by the following > > match [verb, args] { > return E.call(target, verb, args) > } > > which is erroneous since the "__return" ejector is not defined here. It has been discussed before, rather endlessly if I recall. For each construct that one might think would bind __return, we need to decide whether it does or not. No matter what we decide, programmers will often expect the other and get tripped up. You have identified the two most problematic: match clauses and when. * On match clauses, I also often trip up in the way you describe, even though I defined the behavior. Also, the problem's worse than you describe. In the code: def foo() { def bar { match [verb, args] { ... return ... } def x := bar.msg(1,2) } the return inside the match clause returns from foo(). x never gets assigned a value. * when clauses used to operate the way this page editor expected. Again, either way will violate expectations, because expectations cut both ways. However, the block on the right side of a when is thought of more like a control structure block than like a normal object. In order to enable control structures to be written in the language (the Smalltalk-like "lambda-args" sugar), control-structure-like blocks cannot implicitly rebind __return. We wish to take "when" out of the E language grammer, making "when" no longer be a keyword, and to redefine it using lambda-args. This would help ensure that other eventual control abstractions can be written in the language as well. -- Text by me above is hereby placed in the public domain Cheers, --MarkM