Re: Pattern matching details questions
| From: | Larry Garfield | Date: | Thu, 06 Feb 2025 04:55:44 +0000 |
| Subject: | Re: Pattern matching details questions | ||
| References: | 1 2 3 4 5 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-126301@lists.php.net to get a copy of this message | ||
On Tue, Feb 4, 2025, at 4:30 PM, Rob Landers wrote:
> On Tue, Feb 4, 2025, at 22:16, Larry Garfield wrote:
>> 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:
Well, right now no one is used to it. :-) Unless they've spent a lot of time in Rust. Ilija
and I have been staring at it longer than anyone else, obviously, but any new feature is, well, new.
> 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.
That's been suggested a few times. The challenge here is:
1. variable binding is a core part of pattern matching in basically every language that has it. The
decomposition capability is the primary use case. So leaving that out gives us... basically a more
compact way to chain instanceof, which isn't that impressive.
2. Variable pinning is an optional feature, most languages don't have it, but it's a
nice-to-have. It would be fine to punt to later.
3. Except we really need to ensure that the syntax for variable binding doesn't cause problems
for a future variable pinning feature due to syntax/parsing confusion. That means we have to do at
least a large chunk of the design and trial implementation up-front to make sure we're not
painting ourselves into a corner.
4. At which point, we've basically implemented pinning anyway so may as well just include it.
--Larry Garfield