Re: [PHP-DEV] #[Deprecated] Attribute

2021-01-13 Thread Rowan Tommins

On 13/01/2021 12:51, Marco Pivetta wrote:

For me, runtime behavior is:

  [...]
  * a production outage risk



If your production code can cause outages based on E_DEPRECATED notices, 
then that's a bug in your code. I can't think of any justification for a 
production system to abort because of a notification about future changes.


If we have to consider every introduction of a deprecation notice as a 
breaking change, then we're stuck in a Catch-22, because the whole point 
of such notices is to warn of upcoming breaking changes.




As usual, I'm fighting for pushing things into compile-time rather than
runtime



In principle, I do agree with this, but as Benjamin says, it's quite a 
meaty topic in its own right. It's also unlikely to ever eliminate 100% 
of runtime checks, because you can't statically analyse completely 
dynamic code.


Defining #[Deprecated] as "do what all the other deprecations do", and 
later changing that *for all existing deprecations* seems reasonable.



Regards,

--
Rowan Tommins
[IMSoP]

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php



Re: [PHP-DEV] #[Deprecated] Attribute

2021-01-13 Thread Marco Pivetta
Hey Benjamin

On Wed, Jan 13, 2021 at 1:47 PM Benjamin Eberlei 
wrote:

> I get where you are coming from, but side-effect based
> notices/deprecations is just the way PHP works at the moment and as such
> this existing mechanism should be used and extended.
>
> I do have (vague) plans to tackle alternative ways to process
> notices/deprecations in the future, but this is independent from that and
> #[Deprecated] would automatically tie into a change of this kind.
>

If you have vague plans, perhaps introducing `#[Deprecated]` first, then
proposing a separate RFC for the runtime behavior?

For me, runtime behavior is:

 * a big problem with existing tools that started doing this
 * a production outage risk
 * something that attributes shouldn't do anyway, at least not out of the
box (AOP OOTB is quite ugly and unexpected)

As usual, I'm fighting for pushing things into compile-time rather than
runtime, as runtime in PHP is already quite the nightmare of things to keep
in mind.

Marco Pivetta

http://twitter.com/Ocramius

http://ocramius.github.com/


Re: [PHP-DEV] #[Deprecated] Attribute

2021-01-13 Thread Benjamin Eberlei
On Wed, Jan 13, 2021 at 1:34 PM Marco Pivetta  wrote:

> On Sun, Jan 10, 2021 at 2:48 AM G. P. B.  wrote:
>
>> Just to clarify this raises an E_DEPRECATED right?
>> Could it make sense to raise E_USER_DEPRECATED instead?
>>
>
> I hadn't checked this before, but as per George's message, this is
> worrying.
>
> I've been quite loud about it in the past, but static metadata definitions
> should really not lead to runtime side-effects, especially if not pure
> (error handling system tripped here).
>
> I'd be totally for a built-in `#[Deprecated]` attribute if it did **NOT**
> have a runtime behavior, which is an absolute no-go from my PoV.
>
> This stuff is easily introspectible via tools like phpstan, psalm, phan,
> and does not need to lead to more problematic runtime issues.
>

I get where you are coming from, but side-effect based notices/deprecations
is just the way PHP works at the moment and as such this existing mechanism
should be used and extended.

I do have (vague) plans to tackle alternative ways to process
notices/deprecations in the future, but this is independent from that and
#[Deprecated] would automatically tie into a change of this kind.

>
> Marco Pivetta
>
> http://twitter.com/Ocramius
>
> http://ocramius.github.com/
>
>


Re: [PHP-DEV] #[Deprecated] Attribute

2021-01-13 Thread Benjamin Eberlei
On Wed, Jan 13, 2021 at 1:05 PM Brent Roose  wrote:

> Hi Sara
>
> > On 22 Dec 2020, at 19:54, Sara Golemon  wrote:
> >
> > On Tue, Dec 22, 2020 at 12:35 PM Nicolas Grekas <
> > nicolas.grekas+...@gmail.com> wrote:
> >
> >> It would be great to allow adding this attribute on classes. What about
> >> allowing it right now and not bind it to any runtime side-effect? That
> >> would allow static analyzers to do their job. Same for consts and
> >> properties by the way.
> >>
> >> Also, it would be very useful to add named parameters to the attribute,
> >> namely: "package" (the name of the package that declares the
> deprecation)
> >> and "version" (the version of that package that introduced the
> >> deprecation), next to the message.
> >>
> >> This is critical info when building reports of deprecations.
> >>
> >>
> > You could do that now with a polyfill from userspace.  If the annotation
> > need not have an effect, then it's just any other userspace
> implementation.
>
> The difference is that PHP core has the ability to force standarization.
> There's already JetBrains' implementation of #[Deprecated], which Psalm and
> PhpStan also support, but it's not a real standard. Maybe the FIG would one
> day step in to decide these kinds of things, but the reality is that many
> major frameworks don't follow FIG as closely as they used to. I think
> there's value in adding attributes in the core, with the goal only being
> static analysis. It'll allow for consistency and that's a valuable thing.
>

I want to keep #[Deprecated] on other elements than functions / methods out
of this RFC, because they require entirely different implementation
approaches.

We identified in the PR already that this should at some point be
standardized in core, because internal attributes will currently not be
able to support extension through inheritance by userland for
implementation reasons.

My next RFC update will reflect this future scope.

>
> >
> > -Sara
>
>
> Kind regards
> Brent
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: https://www.php.net/unsub.php
>
>


Re: [PHP-DEV] #[Deprecated] Attribute

2021-01-13 Thread Marco Pivetta
On Sun, Jan 10, 2021 at 2:48 AM G. P. B.  wrote:

> Just to clarify this raises an E_DEPRECATED right?
> Could it make sense to raise E_USER_DEPRECATED instead?
>

I hadn't checked this before, but as per George's message, this is worrying.

I've been quite loud about it in the past, but static metadata definitions
should really not lead to runtime side-effects, especially if not pure
(error handling system tripped here).

I'd be totally for a built-in `#[Deprecated]` attribute if it did **NOT**
have a runtime behavior, which is an absolute no-go from my PoV.

This stuff is easily introspectible via tools like phpstan, psalm, phan,
and does not need to lead to more problematic runtime issues.

Marco Pivetta

http://twitter.com/Ocramius

http://ocramius.github.com/


Re: [PHP-DEV] #[Deprecated] Attribute

2021-01-13 Thread Brent Roose
Hi Sara

> On 22 Dec 2020, at 19:54, Sara Golemon  wrote:
> 
> On Tue, Dec 22, 2020 at 12:35 PM Nicolas Grekas <
> nicolas.grekas+...@gmail.com> wrote:
> 
>> It would be great to allow adding this attribute on classes. What about
>> allowing it right now and not bind it to any runtime side-effect? That
>> would allow static analyzers to do their job. Same for consts and
>> properties by the way.
>> 
>> Also, it would be very useful to add named parameters to the attribute,
>> namely: "package" (the name of the package that declares the deprecation)
>> and "version" (the version of that package that introduced the
>> deprecation), next to the message.
>> 
>> This is critical info when building reports of deprecations.
>> 
>> 
> You could do that now with a polyfill from userspace.  If the annotation
> need not have an effect, then it's just any other userspace implementation.

The difference is that PHP core has the ability to force standarization. 
There's already JetBrains' implementation of #[Deprecated], which Psalm and 
PhpStan also support, but it's not a real standard. Maybe the FIG would one day 
step in to decide these kinds of things, but the reality is that many major 
frameworks don't follow FIG as closely as they used to. I think there's value 
in adding attributes in the core, with the goal only being static analysis. 
It'll allow for consistency and that's a valuable thing.

> 
> -Sara


Kind regards
Brent
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php



Re: [PHP-DEV] #[Deprecated] Attribute

2021-01-09 Thread G. P. B.
On Sat, 19 Dec 2020 at 10:19, Benjamin Eberlei  wrote:

> Hi internals,
>
> I have updated the RFC for a #[Deprecated] attribute that wasn't completed
> for PHP 8.0 due to time constraints and I am able to restart the discussion
> now.
>
> https://wiki.php.net/rfc/deprecated_attribute
>
> The following updates have been made:
>
> - focus on only method and function deprecations for now, removed
> class/property/constant deprecations.
> - a section on explaining the runtime effects of deprecations in PHP, and a
> note that this RFC is about completing deprecation support within the
> existing model, while changes to deprecations in general are out of scope /
> a disjunct concern for a different RFC.
>
> Sara proposed a much improved implementation over my initial patch, by
> using the already existing ZEND_ACC_DEPRECATED constant on userland
> functions. The resulting implementation is therefore much simpler and
> really just extending existing function deprecation support from internal
> to userland functions. You can find the PR here:
>
> https://github.com/php/php-src/pull/6521
>
> Let me know what you think.
>
> greetings
> Benjamin
>

Just to clarify this raises an E_DEPRECATED right?
Could it make sense to raise E_USER_DEPRECATED instead?

Best regards,

George P. Banyard


Re: [PHP-DEV] #[Deprecated] Attribute

2020-12-22 Thread Bruce Weirdan
On Tue, Dec 22, 2020 at 8:55 PM Sara Golemon  wrote:

>
> You could do that now with a polyfill from userspace.  If the annotation
> need not have an effect, then it's just any other userspace implementation.
>

It's possible now, while the attribute is not provided by PHP. But once it
gets introduced and *if* it forbids usage on some elements it wouldn't be
possible to fix this from userspace.

-- 
  Best regards,
  Bruce Weirdan mailto:
weir...@gmail.com


Re: [PHP-DEV] #[Deprecated] Attribute

2020-12-22 Thread Sara Golemon
On Tue, Dec 22, 2020 at 12:35 PM Nicolas Grekas <
nicolas.grekas+...@gmail.com> wrote:

> It would be great to allow adding this attribute on classes. What about
> allowing it right now and not bind it to any runtime side-effect? That
> would allow static analyzers to do their job. Same for consts and
> properties by the way.
>
> Also, it would be very useful to add named parameters to the attribute,
> namely: "package" (the name of the package that declares the deprecation)
> and "version" (the version of that package that introduced the
> deprecation), next to the message.
>
> This is critical info when building reports of deprecations.
>
>
You could do that now with a polyfill from userspace.  If the annotation
need not have an effect, then it's just any other userspace implementation.

-Sara


Re: [PHP-DEV] #[Deprecated] Attribute

2020-12-22 Thread Nicolas Grekas
Hi Benjamin,

I have updated the RFC for a #[Deprecated] attribute that wasn't completed
> for PHP 8.0 due to time constraints and I am able to restart the discussion
> now.
>
> https://wiki.php.net/rfc/deprecated_attribute
>
> The following updates have been made:
>
> - focus on only method and function deprecations for now, removed
> class/property/constant deprecations.
> - a section on explaining the runtime effects of deprecations in PHP, and a
> note that this RFC is about completing deprecation support within the
> existing model, while changes to deprecations in general are out of scope /
> a disjunct concern for a different RFC.
>
> Sara proposed a much improved implementation over my initial patch, by
> using the already existing ZEND_ACC_DEPRECATED constant on userland
> functions. The resulting implementation is therefore much simpler and
> really just extending existing function deprecation support from internal
> to userland functions. You can find the PR here:
>
> https://github.com/php/php-src/pull/6521
>

Thanks for the RFC.

It would be great to allow adding this attribute on classes. What about
allowing it right now and not bind it to any runtime side-effect? That
would allow static analyzers to do their job. Same for consts and
properties by the way.

Also, it would be very useful to add named parameters to the attribute,
namely: "package" (the name of the package that declares the deprecation)
and "version" (the version of that package that introduced the
deprecation), next to the message.

This is critical info when building reports of deprecations.

Thanks for considering,
Nicolas


[PHP-DEV] #[Deprecated] Attribute

2020-12-19 Thread Benjamin Eberlei
Hi internals,

I have updated the RFC for a #[Deprecated] attribute that wasn't completed
for PHP 8.0 due to time constraints and I am able to restart the discussion
now.

https://wiki.php.net/rfc/deprecated_attribute

The following updates have been made:

- focus on only method and function deprecations for now, removed
class/property/constant deprecations.
- a section on explaining the runtime effects of deprecations in PHP, and a
note that this RFC is about completing deprecation support within the
existing model, while changes to deprecations in general are out of scope /
a disjunct concern for a different RFC.

Sara proposed a much improved implementation over my initial patch, by
using the already existing ZEND_ACC_DEPRECATED constant on userland
functions. The resulting implementation is therefore much simpler and
really just extending existing function deprecation support from internal
to userland functions. You can find the PR here:

https://github.com/php/php-src/pull/6521

Let me know what you think.

greetings
Benjamin