On 21 November 2024 10:48:46 GMT, Daniil Gentili <daniil.gent...@gmail.com>
wrote:
>I speak for myself (and some others, as can be seen by pull requests on some
>FOSS projects, which made pull requests to account for this behaviour), as a
>user of preloading who has encountered this behaviour, understood the reason
>for it and made the required changes to keep using it.
This is still painfully vague. What projects? What "reason for it" did you
understand? When you say projects accounted for it, do you mean they got some
benefit from it, or that they worked around the problems it caused them?
>There is indeed nothing wrong with the listed behaviours IMO, as they make
>sense for how the current logic is working, and aren’t a deal breaker for
>preloading.
This seems to be entirely circular - "the current behaviour makes sense for the
current behaviour".
>In fact preloading in a way behaves as if you included the preload file before
>including the entry point
Note that we are not talking about preloading, as a general concept; we are
talking about the specific function opcache_compile_file. That function's
explicit purpose is to prime the opcache *without* behaving the same way as
including the file.
> functions cannot be declared twice, and already-declared classes are not
> autoloaded again
Finally, we seem to get to the use case you are actually advocating:
precompiling classes but using an autoloader to actually declare them; but
fully pre-declaring functions, because there's no autoloader for them.
That certainly makes sense as a distinction, but I then wonder why you would
use opcache_compile_file for declaring those functions, rather than a normal
include. Since you can't include the file a second time either way, is there
any way to make use of the difference?
> it might be a nice idea to simply ignore the redeclaration of functions (like
> for classes), instead of not preloading them at all.
There is nothing that ignores the redeclaration of classes; they are not
declared when pre-compiling, and can be declared exactly once by passing
include/require the pre-compiled file. Making functions match that behaviour is
what Ilija is proposing.
Rowan Tommins
[IMSoP]