Re: Pattern matching details questions

From: Date: Tue, 04 Feb 2025 22:30:44 +0000
Subject: Re: Pattern matching details questions
References: 1 2 3 4  Groups: php.internals 
Request: Send a blank email to internals+get-126290@lists.php.net to get a copy of this message
On Tue, Feb 4, 2025, at 22:16, Larry Garfield wrote: > On Tue, Feb 4, 2025, at 1:14 PM, Marc Bennewitz wrote: > > On 04.02.25 08:51, Rob Landers wrote: > >> > >> > >> On Tue, Feb 4, 2025, at 05:31, Larry Garfield wrote: > >>> Hi folks. Ilija is still working on the implementation for the pattern matching > >>> RFC, which we want to complete before proposing it officially in case we run into implementation > >>> challenges. > >>> > >>> Such as these, on which we'd like feedback on how to proceed. > > > >>> [1] > >>> https://github.com/Crell/php-rfcs/blob/master/pattern-matching/research.md > >>> > >>> -- > >>> Larry Garfield > >>> larry@garfieldtech.com > >>> > >> > >> Hey Larry, > >> > >> Instead of symbols, why not use words? > >> > >> We already have &&, but it looks like this uses & instead, which is a > >> bitwise-and. But the language does have “and” as a keyword. So instead of: > >> > >> $value is int & &$x > >> > >> It would be: > >> > >> $value is int and &$x > >> > >> Which removes the confusion you mentioned before (also for someone like me who uses > >> bitwise-and quite a bit). > >> > >> — Rob > > Patterns are deliberately designed as a superset of existing DNF types.. You can already have > a type of Foo&Bar, so we want the pattern for "instanceof Foo || instanceof Bar" to be > the same. That means & and | for conjunctions is necessary. Also supporting "and" > and "or" would technically be possible, but wouldn't resolve the issue (since & > would still be needed either way) and would just add more complication, confusion, and > inconsistency. I don't think that's viable. Interesting way of looking at it, not wrong either. I guess I'm not used to this syntax that much. It's like reading the following statement and working out what the value is without running it: add($a = add($a = 2, $a), $a = add($a, $a)) + $a; To me, mixing up both setting and using values in the same statement reads like above. Once you work out how it works, it makes sense that the first parameter is 4 and the second is 8, with $a == 8 and the result being 20 (https://3v4l.org/MPb5P). It takes some getting used to, though, and only works because we intrinsically understand the parser to AST to opcodes -- even if we don't know the details. Personally, it might be worth adding binding/setting values until a later RFC just to reduce the complexity until people get used to it. Right now, you (and maybe a couple of others) are probably the only people on earth who can truly understand how the syntax actually works; the rest of us may not _yet_ be equipped to give useful feedback. It won't stop me from trying to help, but I also don't want to waste your time by saying incredibly incorrect statements like using "and" instead of "&" to denote a type. :) — Rob

« previous php.internals (#126290) next »