On Wed, Jan 29, 2025 at 4:12 PM Tim Düsterhus <t...@bastelstu.be> wrote:

> Volker and I would like to start discussion on our RFC to allow "Marking
> return values as important (#[\NoDiscard])".
>
> Please find the following resources for your reference:
>
> - RFC: https://wiki.php.net/rfc/marking_return_value_as_important
> - Implementation: https://github.com/php/php-src/pull/17599


Hello everyone,

it's been two weeks, but given the feedback we received, we don't feel the
discussion didn't reach a conclusive resolution yet.

So we wanted to solicit additional opinions. In an attempt to summarize the
discussion, how we see it, there are two main points of contention we'd
like to discuss further.

a) Intentionally discarding the return value

The `(void)flock($fp);` syntax was the main thing discussed on the list.
With `$_ = flock($fp);` as the most suggested alternative.

The issue with using `$_` as it currently stands, is that the unused
variable would be cleaned up by OPcache.
Should we instead have a special case in OPcache ensuring it does not apply
its optimization to a variable if it's named `$_` instead? The semantic
difference would be that $_ would keep returned values (and objects) alive
and in memory, whereas (void) would discard them immediately. Leading to
different times when, for example, destructors would be called.

The consequence of this would be that 3rd party tools like IDEs and Static
and Dynamic Code Analyzers would also have to build that special case in to
not produce "unused variable" warnings.

We're also happy to change the secondary vote to "(void) vs $_" as we feel
there needs to be a way to discard the return value consistently for this
to be a complete and usable feature.

b) Naming of the attribute

Nobody mentioned this on the list, but before opening a vote we'd like to
heard if the attribute name makes sense to you.

We've chosen #[NoDiscard] as it's also used in C and C++. See [1] for the
full list of references. If you feel this doesn't fit with PHP, we welcome
other suggestions.

[1] https://wiki.php.net/rfc/marking_return_value_as_important#precedent

Kind Regards,
Volker

-- 
Volker Dusch
Head of Engineering
Tideways GmbH
Königswinterer Str. 116
53227 Bonn
https://tideways.io/imprint

Sitz der Gesellschaft: Bonn
Geschäftsführer: Benjamin Außenhofer (geb. Eberlei)
Registergericht: Amtsgericht Bonn, HRB 22127

Reply via email to