Am 14.01.2020 um 20:23 schrieb Mike Schinkel <m...@newclarity.net>:
> 
> On Jan 14, 2020, at 1:10 PM, Larry Garfield <la...@garfieldtech.com> wrote:
>>> I get your concern about recursion, but if that kind of issue is really 
>>> a concern I don't see why we could not artificially limit recursion on 
>>> preload to a configurable amount, with 100 being the default?
>> 
>> It's not recursion itself that's an issue.  It's that the behavior of the 
>> code changes between preload and non-preload contexts in subtle, non-obvious 
>> ways.
>> 
>> I don't mean a recursive function that runs during preload.  I mean if a 
>> function that runs in a normal request is written recursively, it will fail 
>> at high recursion levels only if the file it is in was not preloaded.  So 
>> whether or not foo.php was run through opcache_compile_file() changes when 
>> and how code in that file will fail.  That's the situation we want to avoid 
>> like the plague, IMO.
> 
> With respect, that feels like you are concerned about some real edge cases, 
> and ignoring the probability that most code run during preloading would be 
> written bespoke for preloading.
> 
> ALSO, I think I may have caused confusion by calling it "preloading."  In my 
> mind that meant "run once" vs. "run for each page load" but I think you are 
> (rightly) conflating what I have called "preloading" with the new preloading 
> feature in PHP 7.4?
> 
> What I have been envisioning is a `preload` (or some other) keyword that we 
> could apply to functions, methods, and expressions. When `preload` modified  
> functions/methods/expressions are reached during OpCode generation, rather 
> than generate a call to runtime code PHP would just run the code and then 
> take the return value and generate OpCode for that return value. 
> 
> class Foo {
>   preload function bar() {
>       return < a_really_time_consuming_expression>;
>   }
> }
> $foo = new Foo();
> echo $foo->bar();  // This would not actually execute anything at runtime. 
>                              // It would simply echo the constant value that 
> was
>                              // returned by 
> <a_really_time_consuming_expression>.
> 

So like this old memoize extension? https://pecl.php.net/package/memoize
> 
> I could be wrong but I find it hard to believe the runtime profile would be 
> so different in this context as to create problems of the nature you are 
> fearing.  
> 
> Maybe someone like Dimitry who understand the OpCode generation process could 
> weigh in?
> 
> 
>>> I do completely see your points about the AST and most PHP developers.  
>>> 
>>> The unfortunate problem with PHP is there is no way to use 3rd party 
>>> code to extend PHP w/o being able to reconfigure the server by adding 
>>> extensions. It would be nice if we could come up with a way for 3rd 
>>> party developers writing in C or another language — people who are more 
>>> likely to test their code before distributing it — to extend PHP such 
>>> as by generating OpCode files that a userland developer could load.  
>> 
>> That... sounds a lot like the new FFI extension?  Write code in C or Rust or 
>> anything that can produce a .so file, plug it into PHP, go?
> 
> Unless I am misunderstanding, using an .so requires a sysadmin to add an 
> extension and update php.ini. Which is a non-starter on hosted sites like 
> Pantheon, WPEngine, Kinsta, Pagely, Flywheel, PressLabs and similar.
> 
> What I was instead calling for what a way to extend PHP that a userland 
> developer with no access to php.ini would be able to achieve.
> 
> Interestingly, after my above comment I googled and came across this PHP 
> extension that can load a compiled Web Assembly (.wasm) file.  Something like 
> this in core would be very useful:
> 
> https://github.com/wasmerio/php-ext-wasm
> 
> -Mike
> 
> -- 
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
> 

Reply via email to