I wouldn't be so eager to judge the proposal based on the original post. Sometimes I submit tickets fast, and sometimes ideas are not conveyed as clearly as I assumed.
“How are those things related?” These were the examples of the pair syntax (what works and what doesn't). Now, ?↔! pattern is strangely established by at least two precedents: * ? and ! prefix ops (e.g. !42 or ?42) * Optional and required parameters (e.g. $foo?, $bar!, :$baz?, :$cat!) Check out irc logs for more discussion. On 2017-07-22 21:50:58, duff wrote: > The OP said :?foo should work because :foo and :!foo work. I don't > follow > the logic. How are those things related? Why should :foo and :!foo > imply > :?foo? (In my head it makes as much sense as ":foo and :!foo implies > :*foo", which is to say, none.) > > I don't see any benefit to adding a :?foo syntax that means exactly > the > same thing as :foo. I also don't see how it increases or improves > consistency (strangely or otherwise). That it could be implemented > quickly > or easily is irrelevant. > > So ... -1 for me too. > > -Scott > > > On Sat, Jul 22, 2017 at 10:11 PM, Lloyd Fournier via RT < > perl6-bugs-follo...@perl.org> wrote: > > > 2¢: > > ? doesn't imply truth it implies a question. The ? prefix asks an > > expression whether it's True or False. When used as a sigil like > > $?FILE > > it's asking the compiler about something. > > > > ‘:foo’ sets foo to True. ‘:!foo’ sets it to False. ‘:?foo’ looks like > > it's > > trying to ask something a question, but I'm not sure about what. > > > > On Sun, Jul 23, 2017 at 12:41 PM Aleks-Daniel Jakimenko-Aleksejev via > > RT < > > perl6-bugs-follo...@perl.org> wrote: > > > > > Yes, I should have been more clear. > > > > > > Basically, it should work like (:foo) does, which is construct foo > > > => > > True > > > pair. > > > > > > On 2017-07-22 19:25:19, lloyd.fo...@gmail.com wrote: > > > > Sorry for being think but what is > > > > say (:?foo); > > > > meant to do? The OP just says it should "work". > > > > > > > > On Sun, Jul 23, 2017 at 6:05 AM Aleks-Daniel Jakimenko-Aleksejev > > > > via > > > > RT < > > > > perl6-bugs-follo...@perl.org> wrote: > > > > > > > > > sub foo($bar!) { say $bar }; foo(42) > > > > > > > > > > On 2017-07-22 11:19:41, alex.jakime...@gmail.com wrote: > > > > > > Eh. The effort required to implement the feature is much less > > > > > > than > > > > > > having > > > > > > discussions *like this*. I'll try to be quick. > > > > > > > > > > > > “there's large possibility of introducing some unwanted > > > > > > ambiguity > > > > > > somewhere” > > > > > > > > > > > > A good thing to keep in mind indeed. > > > > > > > > > > > > I don't really like these discussions before actual PRs, but > > > > > > if we > > > > > > think about > > > > > > it a little bit… > > > > > > > > > > > > <colonpair> panics if it finds :! but then fails to find > > > > > > <identifier> > > > > > > ( > > > > > > > > > > > > > > > > > > > > > > https://github.com/rakudo/rakudo/blob/fb7ecb60f006b5738bfe7a234535e0 > > 7344268b31/src/Perl6/Grammar.nqp#L1892 > > > > > > ), so if there is any ambiguity introduced, then it's not > > > > > > bigger > > > > > > than > > > > > > what we > > > > > > have with :! already. > > > > > > > > > > > > I've tried ::!CLASS and it complains about private method > > > > > > !CLASS. > > > > > > > > > > > > :?foo itself says “Confused … expecting any of: colon pair”, > > > > > > so it > > > > > > expects a > > > > > > colon pair anyway. > > > > > > > > > > > > Maybe you have some good examples, but *so far* looks ok. > > > > > > > > > > > > > > > > > > “complex syntax feature” > > > > > > > > > > > > Let's make this complex feature strangely consistent. > > > > > > > > > > > > > > > > > > “OP came up[^1] with this idea while trying to think of more > > > > > > cases > > > > > > to > > > > > > add to > > > > > > the catalog of colon uses in Rakudo” > > > > > > > > > > > > Why does this sound so bad? :) Does it really matter at what > > > > > > point > > > > > > I > > > > > > noticed > > > > > > that the feature that I always thought was implemented > > > > > > actually > > > > > > isn't? > > > > > > I don't > > > > > > use colonpairs as often, truthy or falsy, so never noticed > > > > > > before. > > > > > > > > > > > > However, even the fact that :!foo does not align vertically > > > > > > with > > > > > > :bar > > > > > > is enough > > > > > > to convince me regarding the usefulness of the proposed > > > > > > feature. > > > > > > > > > > > > > > > > > > “But if we follow that logic, it'd mean:” > > > > > > > > > > > > What I meant was that we can make it strangely consistent in > > > > > > a > > > > > > useful > > > > > > way. Then > > > > > > you extrapolated it to unbelievable extents. > > > > > > > > > > > > Then there are examples that are totally unrelated to the > > > > > > ticket. > > > > > > Even > > > > > > ?? !! is > > > > > > not in any way strangely consistent (you can't write else { } > > > > > > if { > > > > > > }). > > > > > > > > > > > > > > > > > > I like this definition a lot: > > > > > > > > > > > > <masak> "strangely consistent" is all about using loose > > > > > > connections > > > > > > people have > > > > > > in their brains, so that a feature feels syntactically > > > > > > vaguely > > > > > > right > > > > > > for > > > > > > various reasons. > > > > > > > > > > > > > > > > > > This ticket is not about making colonpairs accept prefix > > > > > > operators. > > > > > > It > > > > > > is also > > > > > > not about being able to syntactically put ? anywhere you can > > > > > > put !. > > > > > > And let's > > > > > > also not bring unrelated stuff here (like colonpairs only > > > > > > accepting > > > > > > natural > > > > > > numbers with *no sign* whatsoever). What kind of derailing > > > > > > kung fu > > > > > > is > > > > > > this > > > > > > anyway? > > > > > > > > > > > > > > > > > > On 2017-07-22 09:12:31, c...@zoffix.com wrote: > > > > > > > On Sat, 22 Jul 2017 07:53:26 -0700, > > > > > > > alex.jakime...@gmail.com > > > > > > > wrote: > > > > > > > > This should work: > > > > > > > > > > > > > > > > Code: > > > > > > > > say (:?foo); > > > > > > > > > > > > > > > > Result: > > > > > > > > ===SORRY!=== Error while compiling -e > > > > > > > > Bogus statement > > > > > > > > at -e:1 > > > > > > > > ------> say (:⏏?foo); > > > > > > > > expecting any of: > > > > > > > > colon pair > > > > > > > > > > > > > > > > > > > > > > > > Because these work: > > > > > > > > > > > > > > > > Code: > > > > > > > > say (:foo); > > > > > > > > say (:!foo); > > > > > > > > > > > > > > > > Result: > > > > > > > > foo => True > > > > > > > > foo => False > > > > > > > > > > > > > > > > > > > > > -1 from me: > > > > > > > > > > > > > > 1) Colonpairs are ubiquitous in the language, so there's > > > > > > > large > > > > > > > possibility of introducing some unwanted ambiguity > > > > > > > somewhere and > > > > > > > it's > > > > > > > hard to predict where it might occur > > > > > > > 2) Colonpairs are already one of the most complex syntax > > > > > > > feature > > > > > > > of > > > > > > > the language, requiring beginners to learn a wealth of > > > > > > > syntax to > > > > > > > understand most of the common code. > > > > > > > 3) Given (1) and (2), I'd expect any changes to extend > > > > > > > their > > > > > > > syntax > > > > > > > to > > > > > > > carry large benefits, however, the proposal offers > > > > > > > literally zero > > > > > > > practical use and the OP came up[^1] with this idea while > > > > > > > trying > > > > > > > to > > > > > > > think of more cases to add to the catalog of colon uses in > > > > > > > Rakudo. > > > > > > > The > > > > > > > `?` prefix op at least coerces the already-true arg to Bool > > > > > > > (e.g. > > > > > > > `?"foo" === True`) but in the case of the colonpair, > > > > > > > there's > > > > > > > nothing > > > > > > > to coerce, so there's absolutely no point in typing the > > > > > > > extra `?` > > > > > > > and > > > > > > > it's unlikely anyone would want to type it. > > > > > > > 4) The OP makes the case that this syntax should exist > > > > > > > solely for > > > > > > > the > > > > > > > sake of consistency, by interpreting the `!` in `:!foo` > > > > > > > syntax to > > > > > > > mean > > > > > > > the `!` op, and there exists the `?` op. But if we follow > > > > > > > that > > > > > > > logic, > > > > > > > it'd mean: > > > > > > > *) `!! ??` should be allowed too, to mean reverse ternary > > > > > > > *) `::!CLASS` should mean `anything but ::?CLASS` > > > > > > > *) `has $?foo` should be an alternative to `has $!foo` > > > > > > > *) `self?foo` should be an alternative to `self!foo` > > > > > > > *) `:-42foo` should parse just as `:42foo` parses > > > > > > > The point being that the current syntax is `":"` vs `":!"` > > > > > > > not > > > > > > > `":"` > > > > > > > vs `":" + some op`. And things that have "!" in them do not > > > > > > > necessarily need to have a "?" alternative. > > > > > > > > > > > > > > In summation, there's no practical use of this feature and > > > > > > > it is > > > > > > > unlikely it'll ever be used in real programs. The colonpair > > > > > > > syntax is > > > > > > > used across the entire language and any changes to it have > > > > > > > large > > > > > > > impact. It's very hard to anticipate any problematic > > > > > > > ambiguity > > > > > > > cases > > > > > > > introduction of `?` into colon syntax might have. And given > > > > > > > lack > > > > > > > of > > > > > > > technical benefits of this feature, I do not think we > > > > > > > should > > > > > > > accept > > > > > > > the risks. > > > > > > > > > > > > > > > > > > > > > [1] https://irclog.perlgeek.de/perl6/2017-07-22#i_14907647 > > > > > > > > > > > >