[PHP-DEV] [RFC] Asymmetric Visibility, v2

On Wed, May 29, 2024, at 2:15 PM, Larry Garfield wrote:

As promised, Ilija and I offer this revised version of asymmetric visibility.

PHP: rfc:asymmetric-visibility-v2

It's still essentially the same as last year's version, but with a few
adjustments and changes:

* readonly properties are now supported in a logical fashion.
* We've brought back the abbreviated form, as public-read, something
else set is the most common use case.
* The section on magic methods has been greatly simplified. The
implementation itself hasn't changed, but the explanation is a lot less
confusing now.
* We've explained how aviz interacts with hooks (they don't, really)
and with interface properties (in the obvious way), which didn't exist
at the time of the last draft.
* We've added a section with examples of how aviz is a concrete
improvement, even in a world with readonly and hooks.
* We've added a section discussing why the prefix-style syntax was
chosen.

Hi folks. After a side quest to polish off hooks, we're nearly ready to bring aviz to a vote.

We've made one change since we last discussed it: Specifically, Ilija realized that __set's behavior is already inconsistent, so supporting it for aviz properties with invisible set would make it even more inconsistent, not less. For that reason, we've changed the __set behavior such that a non-readonly aviz property will not trigger __set. Further details are in the RFC, but in short, all of the use cases for that behavior now have better alternatives, such as property types, hooks, and aviz itself. So there's really no point to falling back to __set in edge cases.

https://wiki.php.net/rfc/asymmetric-visibility-v2#interaction_with_set_and_unset

Baring any new developments, we plan to start the vote early next week.

Cheers.

--Larry Garfield

Will the alternative syntax on hook not even be put to a vote?

I think the "prefix-style" syntax breaks the standard property signature template that exists since PHP 5!

Natural syntax:

<visibility> <types> $<name>;

With prefix-style:

<visibility> <visibility>(set) <types> $<name>;

This introduces a syntax that is totally unexpected to natural reading. In my opinion, pretty ugly.

What about some static code analysis tools? What about using regex to parse code and syntax in PHP (which takes a lot of work to build) for extensions used in IDEs like VSCode, IntelliJ, etc.?
To parse Property Hooks, a lot of time and work will already be spent adapting to the new syntax, and now this as well? Why not take advantage of the new Property Hooks syntax newly implemented?

Implementing visibility in the hook, which can be now the default API of the properties, would further enhance the syntax of Property Hooks, which in my opinion is one of the best features of PHP in the past five years.

If more operations on Hooks are implemented in the future, what is the use of this syntax? How could it be used? For example, an operation that is called only when a property is first set: `init` hook.

public $prop {
private init => //...set a default initial value here
}

A hook called 'push' only for arrays, would solve some semantic problems and make it clear to separate the set operation (set values of an array) vs push only one item to the array as I showed in the example above.

What about other operations that are already common when we use magical methods in the future: unset, isset, etc.?
In the Property Hooks RFC, it was mentioned that more hooks may be added in the future.

It may be a default behavior for developers to want to override all magic methods for properties using Property Hooks. For now there is only get and set, but what about unset, isset, etc? How is it to define the visibility for this in the future?

public private(set, unset)....
??
Where would new operations beyond the `set` will enter this syntax?

Cheers,
Rodrigo Vieira
Em Jul 19, 2024, 10:18 PM -0300, Larry Garfield <larry@garfieldtech.com> escreveu:

On Wed, May 29, 2024, at 2:15 PM, Larry Garfield wrote:
> As promised, Ilija and I offer this revised version of asymmetric visibility.
>
> PHP: rfc:asymmetric-visibility-v2
>
> It's still essentially the same as last year's version, but with a few
> adjustments and changes:
>
> * readonly properties are now supported in a logical fashion.
> * We've brought back the abbreviated form, as public-read, something
> else set is the most common use case.
> * The section on magic methods has been greatly simplified. The
> implementation itself hasn't changed, but the explanation is a lot less
> confusing now.
> * We've explained how aviz interacts with hooks (they don't, really)
> and with interface properties (in the obvious way), which didn't exist
> at the time of the last draft.
> * We've added a section with examples of how aviz is a concrete
> improvement, even in a world with readonly and hooks.
> * We've added a section discussing why the prefix-style syntax was
> chosen.

Hi folks. After a side quest to polish off hooks, we're nearly ready to bring aviz to a vote.

We've made one change since we last discussed it: Specifically, Ilija realized that __set's behavior is already inconsistent, so supporting it for aviz properties with invisible set would make it even more inconsistent, not less. For that reason, we've changed the __set behavior such that a non-readonly aviz property will not trigger __set. Further details are in the RFC, but in short, all of the use cases for that behavior now have better alternatives, such as property types, hooks, and aviz itself. So there's really no point to falling back to __set in edge cases.

PHP: rfc:asymmetric-visibility-v2

Baring any new developments, we plan to start the vote early next week.

Cheers.

--Larry Garfield

On Sat, Jul 20, 2024, at 03:14, Larry Garfield wrote:

On Wed, May 29, 2024, at 2:15 PM, Larry Garfield wrote:

As promised, Ilija and I offer this revised version of asymmetric visibility.

https://wiki.php.net/rfc/asymmetric-visibility-v2

It’s still essentially the same as last year’s version, but with a few

adjustments and changes:

  • readonly properties are now supported in a logical fashion.
  • We’ve brought back the abbreviated form, as public-read, something

else set is the most common use case.

  • The section on magic methods has been greatly simplified. The

implementation itself hasn’t changed, but the explanation is a lot less

confusing now.

  • We’ve explained how aviz interacts with hooks (they don’t, really)

and with interface properties (in the obvious way), which didn’t exist

at the time of the last draft.

  • We’ve added a section with examples of how aviz is a concrete

improvement, even in a world with readonly and hooks.

  • We’ve added a section discussing why the prefix-style syntax was

chosen.

Hi folks. After a side quest to polish off hooks, we’re nearly ready to bring aviz to a vote.

We’ve made one change since we last discussed it: Specifically, Ilija realized that __set’s behavior is already inconsistent, so supporting it for aviz properties with invisible set would make it even more inconsistent, not less. For that reason, we’ve changed the __set behavior such that a non-readonly aviz property will not trigger __set. Further details are in the RFC, but in short, all of the use cases for that behavior now have better alternatives, such as property types, hooks, and aviz itself. So there’s really no point to falling back to __set in edge cases.

https://wiki.php.net/rfc/asymmetric-visibility-v2#interaction_with_set_and_unset

Baring any new developments, we plan to start the vote early next week.

Cheers.

–Larry Garfield

Hmm,

There’s a lot of existing code that relies on this behavior, it’s pretty much the best way to create proxies without requiring code generation.

This is a pretty massive breaking change.

— Rob

Hi Rob

On Sat, Jul 20, 2024 at 3:47 PM Rob Landers <rob@bottled.codes> wrote:

On Sat, Jul 20, 2024, at 03:14, Larry Garfield wrote:

On Wed, May 29, 2024, at 2:15 PM, Larry Garfield wrote:
>
> PHP: rfc:asymmetric-visibility-v2

Hi folks. After a side quest to polish off hooks, we're nearly ready to bring aviz to a vote.

We've made one change since we last discussed it: Specifically, Ilija realized that __set's behavior is already inconsistent, so supporting it for aviz properties with invisible set would make it even more inconsistent, not less. For that reason, we've changed the __set behavior such that a non-readonly aviz property will not trigger __set. Further details are in the RFC, but in short, all of the use cases for that behavior now have better alternatives, such as property types, hooks, and aviz itself. So there's really no point to falling back to __set in edge cases.

PHP: rfc:asymmetric-visibility-v2

Hmm,

There’s a lot of existing code that relies on this behavior, it’s pretty much the best way to create proxies without requiring code generation.

This is a pretty massive breaking change.

There was a miscommunication between Larry and me. The change is not
to any existing behavior. __get/__set are currently called under two
circumstances:

* The properties _full_ visibility is not met.
* The property was explicitly unset.

We're not changing this behavior. Instead, we decided not calling
__set for asymmetric visibility, when only the set visibility isn't
met. Before making this decision, implicitly implying protected(set)
for a readonly property would have led to __set being called (because
the scope protection now comes from asymmetric visibility, rather than
readonly itself), which would have been a change to the current
behavior.

So, in short: If only the set visibility isn't met, we're now throwing
an error. This is consistent with readonly today, and with get-only
hooks. If somebody wants to change this in the future, they can do so
without any BC breaks, and most likely should make the behavior
consistent across all of these three cases.

Ilija

On Sat, Jul 20, 2024, at 10:47 AM, Ilija Tovilo wrote:

Hi Rob

On Sat, Jul 20, 2024 at 3:47 PM Rob Landers <rob@bottled.codes> wrote:

On Sat, Jul 20, 2024, at 03:14, Larry Garfield wrote:

On Wed, May 29, 2024, at 2:15 PM, Larry Garfield wrote:
>
> PHP: rfc:asymmetric-visibility-v2

Hi folks. After a side quest to polish off hooks, we're nearly ready to bring aviz to a vote.

We've made one change since we last discussed it: Specifically, Ilija realized that __set's behavior is already inconsistent, so supporting it for aviz properties with invisible set would make it even more inconsistent, not less. For that reason, we've changed the __set behavior such that a non-readonly aviz property will not trigger __set. Further details are in the RFC, but in short, all of the use cases for that behavior now have better alternatives, such as property types, hooks, and aviz itself. So there's really no point to falling back to __set in edge cases.

PHP: rfc:asymmetric-visibility-v2

This is a pretty massive breaking change.

There was a miscommunication between Larry and me. The change is not
to any existing behavior. __get/__set are currently called under two
circumstances:

* The properties _full_ visibility is not met.
* The property was explicitly unset.

We're not changing this behavior. Instead, we decided not calling
__set for asymmetric visibility, when only the set visibility isn't
met. Before making this decision, implicitly implying protected(set)
for a readonly property would have led to __set being called (because
the scope protection now comes from asymmetric visibility, rather than
readonly itself), which would have been a change to the current
behavior.

So, in short: If only the set visibility isn't met, we're now throwing
an error. This is consistent with readonly today, and with get-only
hooks. If somebody wants to change this in the future, they can do so
without any BC breaks, and most likely should make the behavior
consistent across all of these three cases.

Ilija

After discussing with Ilija further, I've rewritten the __set section (again). As Ilija said, the long and short of it is "we change nothing", but leave the door open to clean up __set's behavior in the future, once we decide what cleanup is warranted.

--Larry Garfield

On Sat, Jul 20, 2024, at 7:22 AM, Rodrigo Vieira wrote:

Will the alternative syntax on hook not even be put to a vote?

It was, a year and a half ago when Aviz was first proposed. The preference was split, but leaned toward the prefix-style syntax. So we went with that. I don't think we'll ever get everyone to want the same syntax, but we're using the one that was both somewhat more popular, and (as discussed in the RFC) arguably superior.

As the "comments in yield from" thread has shown, *any* even slight change to PHP's syntax will require work from static analysis tools. That's the nature of the problem space, regardless of the syntax specifics.

--Larry Garfield

On Sat, Jul 20, 2024, at 23:51, Larry Garfield wrote:

On Sat, Jul 20, 2024, at 7:22 AM, Rodrigo Vieira wrote:

Will the alternative syntax on hook not even be put to a vote?

It was, a year and a half ago when Aviz was first proposed. The preference was split, but leaned toward the prefix-style syntax. So we went with that. I don’t think we’ll ever get everyone to want the same syntax, but we’re using the one that was both somewhat more popular, and (as discussed in the RFC) arguably superior.

As the “comments in yield from” thread has shown, any even slight change to PHP’s syntax will require work from static analysis tools. That’s the nature of the problem space, regardless of the syntax specifics.

–Larry Garfield

Just to play devil’s advocate, it was also before we had property hooks who advertised itself as a way to “wrap and guard access to object properties” but we are simply ignoring their existence here.

— Rob

Hi

On 7/20/24 03:14, Larry Garfield wrote:

We've made one change since we last discussed it: Specifically, Ilija realized that __set's behavior is already inconsistent, so supporting it for aviz properties with invisible set would make it even more inconsistent, not less. For that reason, we've changed the __set behavior such that a non-readonly aviz property will not trigger __set. Further details are in the RFC, but in short, all of the use cases for that behavior now have better alternatives, such as property types, hooks, and aviz itself. So there's really no point to falling back to __set in edge cases.

PHP: rfc:asymmetric-visibility-v2

Baring any new developments, we plan to start the vote early next week.

I find it unfortunate that this RFC received a non-trivial change on a Saturday after the discussion has been idle for more than a month together with the announcement that the vote will begin shortly after the weekend. Folks should be given sufficient time to react to the newest developments. Personally I plan to give this RFC another read, because I already forgot the details after a month of not looking at it, but I'm not sure if I'll manage today.

For now:

Is there any implementation of this RFC? The RFC text only references the [RFC] Implement asymmetric visibility by iluuu1994 · Pull Request #9257 · php/php-src · GitHub PR hasn't been updated since December 2022.

Best regards
Tim Düsterhus

On Sun, Jul 21, 2024, at 2:45 PM, Tim Düsterhus wrote:

Hi

On 7/20/24 03:14, Larry Garfield wrote:

We've made one change since we last discussed it: Specifically, Ilija realized that __set's behavior is already inconsistent, so supporting it for aviz properties with invisible set would make it even more inconsistent, not less. For that reason, we've changed the __set behavior such that a non-readonly aviz property will not trigger __set. Further details are in the RFC, but in short, all of the use cases for that behavior now have better alternatives, such as property types, hooks, and aviz itself. So there's really no point to falling back to __set in edge cases.

PHP: rfc:asymmetric-visibility-v2

Baring any new developments, we plan to start the vote early next week.

I find it unfortunate that this RFC received a non-trivial change on a
Saturday after the discussion has been idle for more than a month
together with the announcement that the vote will begin shortly after
the weekend. Folks should be given sufficient time to react to the
newest developments. Personally I plan to give this RFC another read,
because I already forgot the details after a month of not looking at it,
but I'm not sure if I'll manage today.

For now:

Is there any implementation of this RFC? The RFC text only references
the [RFC] Implement asymmetric visibility by iluuu1994 · Pull Request #9257 · php/php-src · GitHub PR hasn't been updated
since December 2022.

Best regards
Tim Düsterhus

Oof, sorry, I thought Ilija had updated the link already. It is now updated, and the PR is here:

Since the PR wasn't easily available until now, we're going to push the vote start back to this coming Friday.

--Larry Garfield

Hi

On 7/20/24 03:14, Larry Garfield wrote:

Baring any new developments, we plan to start the vote early next week.

I've went through the RFC once more. I have the following remarks:

For that reason, a private(set) property is automatically final and may not be redeclared at all.

I assume that explicitly marking it as final is still allowed (just redundant)?

There is one caveat regarding virtual properties that have no set operation. If there is no set operation defined on a property, then it is nonsensical to specify a visibility for it. That case will trigger a compile error. For example:

How does this interact with inheritance? Consider the following example:

     class P {
         public $answer { get => 42; }
     }

     class C extends P {
         public protected(set) $answer { get => 42; set => 'dummy'; }
     }

This could be considered to be both narrowing the `set` visibility from `public` to `protected` (which is unsound), but also widening it from “never” to `protected` (which would be sound).

as it's possible now for a property to be visible but not writeable. For the time being,

I dislike the “for the time being” phrasing, because changing that would effectively result in a breaking change, because the __set() may be called in situations that were not anticipated. I would have preferred a stronger phrasing that makes it clear that the RFC authors know what they are talking about.

Best regards
Tim Düsterhus

On Mon, Jul 22, 2024, at 7:07 PM, Tim Düsterhus wrote:

Hi

On 7/20/24 03:14, Larry Garfield wrote:

Baring any new developments, we plan to start the vote early next week.

I've went through the RFC once more. I have the following remarks:

For that reason, a private(set) property is automatically final and may not be redeclared at all.

I assume that explicitly marking it as final is still allowed (just
redundant)?

Correct. I have added a comment to that effect.

There is one caveat regarding virtual properties that have no set operation. If there is no set operation defined on a property, then it is nonsensical to specify a visibility for it. That case will trigger a compile error. For example:

How does this interact with inheritance? Consider the following example:

     class P {
         public $answer { get => 42; }
     }

     class C extends P {
         public protected(set) $answer { get => 42; set => 'dummy'; }
     }

This could be considered to be both narrowing the `set` visibility from
`public` to `protected` (which is unsound), but also widening it from
“never” to `protected` (which would be sound).

I checked with Ilija, and confirmed that it's the second. I have updated the RFC accordingly to make that explicit.

as it's possible now for a property to be visible but not writeable. For the time being,

I dislike the “for the time being” phrasing, because changing that would
effectively result in a breaking change, because the __set() may be
called in situations that were not anticipated. I would have preferred a
stronger phrasing that makes it clear that the RFC authors know what
they are talking about.

Best regards
Tim Düsterhus

I wordsmithed this a bit further. We're not trying to be wishy-washy. Rather, there are a couple of knock-on implications that are worth discussing that we consider off topic, but the approach we're taking does not preclude them. We're deliberately taking the conservative approach. Adding a __set fallback in the future would not be a BC break, as it would be changing a hard error condition to a legal condition, which is something nearly all new features do. We don't think it's wise to do that, but if someone wanted to advocate for that in the future we're not precluding it. If none of those further discussions happen, we still consider this behavior complete and acceptable.

--Larry Garfield

On 21.07.2024 11:21, Rob Landers wrote:

On Sat, Jul 20, 2024, at 23:51, Larry Garfield wrote:

On Sat, Jul 20, 2024, at 7:22 AM, Rodrigo Vieira wrote:
> Will the alternative syntax on hook not even be put to a vote?

It was, a year and a half ago when Aviz was first proposed. The preference was split, but leaned toward the prefix-style syntax. So we went with that. I don't think we'll ever get everyone to want the same syntax, but we're using the one that was both somewhat more popular, and (as discussed in the RFC) arguably superior.

As the "comments in yield from" thread has shown, *any* even slight change to PHP's syntax will require work from static analysis tools. That's the nature of the problem space, regardless of the syntax specifics.

--Larry Garfield

Just to play devil’s advocate, it was also before we had property hooks who advertised itself as a way to “wrap and guard access to object properties” but we are simply ignoring their existence here.

Just to compare them, because my initial gut feel was to say "yes please just put this together with hooks"..

As far as I understand these would be the two options?

      class C {
          public protected(set) $answer { get => 42; set => { $this->answer = $value * 2; }
          public private(set) $publicReadOnly;
      }

      class C {
          public $answer { get => 42; protected set => { $this->answer = $value * 2; }
          public $publicReadOnly { private set; }
      }

And now that I see it spelled out more, I do agree that while it appears a bit more verbose, and this "(set)" looks odd at first, having all the visibility upfront is a lot clearer than having to read through the hooks to see what visibility applies.

Best,
Jordi

--
Jordi Boggiano
@seldaek -https://seld.be

On Fri, Jul 26, 2024, at 13:36, Jordi Boggiano wrote:

On 21.07.2024 11:21, Rob Landers wrote:

On Sat, Jul 20, 2024, at 23:51, Larry Garfield wrote:

On Sat, Jul 20, 2024, at 7:22 AM, Rodrigo Vieira wrote:

Will the alternative syntax on hook not even be put to a vote?

It was, a year and a half ago when Aviz was first proposed. The preference was split, but leaned toward the prefix-style syntax. So we went with that. I don’t think we’ll ever get everyone to want the same syntax, but we’re using the one that was both somewhat more popular, and (as discussed in the RFC) arguably superior.

As the “comments in yield from” thread has shown, any even slight change to PHP’s syntax will require work from static analysis tools. That’s the nature of the problem space, regardless of the syntax specifics.

–Larry Garfield

Just to play devil’s advocate, it was also before we had property hooks who advertised itself as a way to “wrap and guard access to object properties” but we are simply ignoring their existence here.

Just to compare them, because my initial gut feel was to say “yes please just put this together with hooks”…

As far as I understand these would be the two options?

     class C {
         public protected(set) $answer { get => 42; set => { $this->answer = $value * 2; }
         public private(set) $publicReadOnly;
     }

     class C {
         public $answer { get => 42; protected set => { $this->answer = $value * 2; }
         public $publicReadOnly { private set; }
     }

And now that I see it spelled out more, I do agree that while it appears a bit more verbose, and this "(set)" looks odd at first, having all the visibility upfront is a lot clearer than having to read through the hooks to see what visibility applies.

On a large property hook that potentially span hundreds of lines, I’d rather only need to scroll up to the “set =>” to see how it is set vs. going all the way back up to the property itself.

On Fri, Jul 26, 2024, at 12:58 PM, Rob Landers wrote:

And now that I see it spelled out more, I do agree that while it appears a bit more verbose, and this "(set)" looks odd at first, having all the visibility upfront is a lot clearer than having to read through the hooks to see what visibility applies.

On a large property hook that potentially span hundreds of lines, I'd
rather only need to scroll up to the "set =>" to see how it is set vs.
going all the way back up to the property itself.

If someone has a property hook that is hundreds of lines long, their code is already crap and there's no hope for them.

--Larry Garfield

On Fri, Jul 26, 2024, at 16:27, Larry Garfield wrote:

On Fri, Jul 26, 2024, at 12:58 PM, Rob Landers wrote:

And now that I see it spelled out more, I do agree that while it appears a bit more verbose, and this “(set)” looks odd at first, having all the visibility upfront is a lot clearer than having to read through the hooks to see what visibility applies.

On a large property hook that potentially span hundreds of lines, I’d

rather only need to scroll up to the “set =>” to see how it is set vs.

going all the way back up to the property itself.

If someone has a property hook that is hundreds of lines long, their code is already crap and there’s no hope for them.

–Larry Garfield

True, but we don’t always get to choose what code we work on.

— Rob

From: Rob Landers <rob@bottled.codes>
Sent: Sunday, July 21, 2024 11:21 AM

On Sat, Jul 20, 2024, at 23:51, Larry Garfield wrote:
> On Sat, Jul 20, 2024, at 7:22 AM, Rodrigo Vieira wrote:
> > Will the alternative syntax on hook not even be put to a vote?

> It was, a year and a half ago when Aviz was first proposed. The preference was split, but leaned toward the prefix-style syntax. So we went with that. I don't think we'll ever get everyone to want the same syntax, but we're using the one that was both somewhat more popular, and (as discussed in the RFC) arguably superior.

> As the "comments in yield from" thread has shown, *any* even slight change to PHP's syntax will require work from static analysis tools. That's the nature of the problem space, regardless of the syntax specifics.

Just to play devil’s advocate, it was also before we had property hooks who advertised itself as a way to “wrap and guard access to object properties” but we are simply ignoring their existence here.

I'm very disappointed that this discussion was not concluded before the vote was started. One of the main arguments for picking this syntax is the research from two years ago, when hooks where not a thing. In my opinion that makes that whole research obsolete in this new context. I've asked to redo the research, but that was not acknowledged

For the 'split visibility' concern, there has been some mentioning of reviving the `var` keyword, allowing you to place all visibility in the hook block.

While I don't have the 'perfect' syntax in mind, I strongly believe that this subject required a bit more investigation and discussion. My only hope now is that the people voting take this into consideration, especially as this is now being rushed into 8.4.

--
Vincent de Lau

On Mon, Aug 5, 2024, at 7:27 AM, Vincent de Lau wrote:

From: Rob Landers <rob@bottled.codes>
Sent: Sunday, July 21, 2024 11:21 AM

On Sat, Jul 20, 2024, at 23:51, Larry Garfield wrote:
> On Sat, Jul 20, 2024, at 7:22 AM, Rodrigo Vieira wrote:
> > Will the alternative syntax on hook not even be put to a vote?

> It was, a year and a half ago when Aviz was first proposed. The preference was split, but leaned toward the prefix-style syntax. So we went with that. I don't think we'll ever get everyone to want the same syntax, but we're using the one that was both somewhat more popular, and (as discussed in the RFC) arguably superior.

> As the "comments in yield from" thread has shown, *any* even slight change to PHP's syntax will require work from static analysis tools. That's the nature of the problem space, regardless of the syntax specifics.

Just to play devil’s advocate, it was also before we had property hooks who advertised itself as a way to “wrap and guard access to object properties” but we are simply ignoring their existence here.

I'm very disappointed that this discussion was not concluded before the
vote was started. One of the main arguments for picking this syntax is
the research from two years ago, when hooks where not a thing. In my
opinion that makes that whole research obsolete in this new context.
I've asked to redo the research, but that was not acknowledged

For the 'split visibility' concern, there has been some mentioning of
reviving the `var` keyword, allowing you to place all visibility in the
hook block.

While I don't have the 'perfect' syntax in mind, I strongly believe
that this subject required a bit more investigation and discussion. My
only hope now is that the people voting take this into consideration,
especially as this is now being rushed into 8.4.

While hooks were not a feature when Aviz was first proposed, it was very clear at the time that they were coming, and the syntax was mostly already figured out, at least in broad strokes. It's not like no one knew we'd be having {} after the property if hooks pass. I would not call the results obsolete. Rather, I think what it shows is that there's no syntax that will satisfy everyone, so trying to find a syntax favored by everyone would just waste time and end in failure anyway.

I would hardly call this rushed; it was open for multiple months, and built on the previous discussion in 2023. Lazy Objects, for instance, was first proposed a month after aviz, and started its vote on the same day. (No shade on Lazy Objects; I'm happy to see that passing.)

--Larry Garfield