Thanks for your feedback, all.

Elizabeth, I've posted this on problem-solving, as suggested, as
https://github.com/Raku/problem-solving/issues/308 .  Thanks!

yary, definitely good feedback, and I agree that I've probably attached
these things to the wrong object(s); that part of the proposal never felt
quite right to me, but I don't know enough to know what I'm missing.  I've
amended the document slightly (see intro to the Iterating section over on
problem-solving) to include part of your suggestion, but feel free to
re-make your point over there.

Clifton:
- I assumed that the "when False" construct would match False against the
topic, but maybe I'm wrong.
- Regardless, I've incorporated all your suggestions into the document.
- My only query would be, would it work just as well to say "when not
.block-fine"?
- Your point about not limiting the smartmatching is very much a part of
the point I was trying to make.  More options for everyone :) .

Thanks all!

On Mon, 13 Dec 2021 at 09:53, Clifton Wood <clifton.w...@gmail.com> wrote:

> Tim,
>
> Love the suggestions, but some of the syntax is a little confusing. Let me
> see if I can reword these a bit:
>
> First off, the good:
>
> BEGIN {} COMPILE ENTER {}
>
> CHECK {} COMPILE LEAVE {}
>
> INIT {} RUNTIME ENTER {}
>
> END {} RUNTIME LEAVE {}
>
> DOC * DOC * (No change)
>
> ENTER {} ENTER {} (No change)
>
> LEAVE {} LEAVE {} (No change in syntax)
>
>
> Great! These remove a lot of the ambiguity of things.
>
> KEEP {} LEAVE { .success and do {} }
>
> UNDO {} LEAVE { .success or do {} }
>
>
> Took me a minute to realize you are using &?BLOCK as the topic here. Yes,
> you did mention this from the start, but I am a firm believer that code
> should be as intuitive as possible, and this is not. I would almost
> prefer that this were spelled out, precisely for this reason.
>
> FIRST {} ENTER { once {} }
>
>
> Not bad!
>
>
>> NEXT {} LEAVE .iter-done { when False {} }
>
>
> Here's the first I have serious issues with. For one thing "when False {}"
> is a no-no. It will NEVER evaluate. You'd have to use "when False.so.not".
> Having this here just makes things too confusing.
> I think a better rewrite would be:
>
> LEAVE { when .iter-done.not { } }
>
> Which sums things up more concisely.
>
>
>> LAST {} LEAVE .iter-fine { when True {} }
>
>
> Same thing, here. Better written as:
>
> LEAVE { when .iter-fine { } }
>
>
>> PRE {} ENTER { assert {} }
>
> POST {} LEAVE { assert {} }
>
>
> Also good
>
>
>> CONTROL {} LEAVE .block-done { when X::Control {} }
>
>
> Again, the compound use of a method and a when block makes things too
> confusing. Better written as:
>
> LEAVE { when .block-done ~~ X::Control { } }
>
>
>> CATCH {} LEAVE .block-fine { when False {} }
>
>
> Same situation with the nested when. Better written as:
>
> LEAVE { when .block-fine.not { } }
>
> QUIT {} LEAVE .iter-fine { when False {} }
>
>
> Same as above. Better written as:
>
> LEAVE { when .iter-fine.not { } }
>
>
>> LAST {} LEAVE .iter-fine(CX::Done) { when True {} }
>
>
> Better written as:
>
> LEAVE { when .iter-fine(CX::DONE) { } }
>
>
>> CLOSE {} LEAVE .iter-done { when CX::Done {} }
>
>
> Better written as:
>
> LEAVE { when .iter-done ~~ CX::Done { } }
>
>
>> COMPOSE {} COMPOSE ENTER { }
>
>
> Finally, this one I'd just leave as COMPOSE since there doesn't seem to be
> a corresponding LEAVE
>
>  And now, once you look at the above, you'll notice that *don't really
> have to limit the smartmatching*. So these:
>
> (CONTROL) LEAVE { when .block-done ~~ X::Control { } }
> (LAST)         LEAVE { when .iter-fine(CX::DONE) { } }
> (CLOSE)      LEAVE { when .iter-done ~~ CX::Done { } }
>
> *could *become more useful as specialized exception handlers.
>
> Just a thought.
>
> Thanks for presenting these! You should definitely pass these on to
> Raku/problem-solving
>
> - Xliff
>
>
> On Sun, Dec 12, 2021 at 1:52 PM Elizabeth Mattijsen <l...@dijkmat.nl>
> wrote:
>
>> I suggest making this a problem-solving issue:
>> https://github.com/raku/problem-solving
>>
>> > On 11 Dec 2021, at 05:48, Timothy Nelson <wayl...@wayland.id.au> wrote:
>> >
>> > Hi all.
>> >
>> > I've been lurking on this list for years (and once won an "oldest
>> resurrected conversation" award).  I've loved Raku conceptually since the
>> start, but have only recently been putting it to much use.  Mostly, the
>> reality is as good as the promises, but there are two areas I have been
>> liking a bit less.  One of these is Phasers.  The idea is a great one, but
>> after going to them numerous times and often not finding what I want, I've
>> come to the conclusion that they need some remodelling.
>> >
>> > That's a big step in a language that's been around for a while like
>> Raku has.  Maybe this is a discussion for the Raku 2.0 standard (if there
>> will be such a thing), or maybe it's something that can be introduced over
>> time (or as a Slang, or something).  Anyway, after thinking about them for
>> a while, and having my thoughts coalesce into a document over the last few
>> days, I thought I'd post the document to this mailing list and see what
>> people think.  I have put in a number of hours today trying to make it more
>> readable, but still may not have gotten the ordering right.
>> >
>> > I'm fully aware that there may be drawbacks that I haven't thought of,
>> but if one useful idea comes from this document, then that's a step in the
>> right direction.
>> >
>> > Thanks all,
>> > <PhasersMkIIDocumentation.pdf>
>>
>>

Reply via email to