Re: [Vote] Partial Function Application
| From: | Olle Härstedt | Date: | Thu, 01 Jul 2021 06:54:26 +0000 |
| Subject: | Re: [Vote] Partial Function Application | ||
| References: | 1 2 3 4 5 6 7 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-115246@lists.php.net to get a copy of this message | ||
2021-06-30 19:10 GMT+02:00, Larry Garfield <larry@garfieldtech.com>:
> On Wed, Jun 30, 2021, at 8:59 AM, Olle Härstedt wrote:
>
>> > I've been pondering if a completely different approach with a prefix
>> > symbol would be able to be less complex, and the simple answer is I
>> > have absolutely no idea. But we are running low on symbols...
>>
>> Ah, I found the technical details that Joe gave me (right after I hit
>> send, of course). Quoting Joe:
>>
>> "the engine expects certain things to happen, and is designed and then
>> optimized around those assumptions ... for example, a stream of INIT,
>> SEND, DO_FCALL is not meant to be interrupted, the first fundamental
>> change you have to make is making the engine aware that stream of INIT,
>> SEND, + are not always followed by DO_FCALL "
>>
>> So yes, it sounds like hooking into the function call process is where
>> the complexity comes from. Which suggests that an approach that works
>> using a different syntax that desugars to a closure would avoid that
>> issue, but then we need a syntax that wouldn't be ambiguous, and that's
>> getting harder and harder to find. (Nikita's first-class-callables RFC
>> notes some of the issues with available symbols, and they're
>> essentially the same for partials either way.) And I've been told that
>> creating closures in the AST compiler is Hard(tm)...
>>
>> --Larry Garfield
>>
>>
>> Wrapping stuff in lambdas is otherwise the obvious solution, no? Make
>>
strlen(?) evaluate to fn ($x) =>
>> strlen($x). Does it depend on the
>> level of look-ahead in the compiler why it's so hard? Didn't work much
>> with scripting language internals.
>>
>> Olle
>
> The tricky part is that conversion has to happen entirely at runtime,
> because we need the type information from the function being partialed, and
> at that point creating an actual closure is, apparently, rather hard. It
> cannot be done up at the AST level where it would be conceptually much
> easier.
>
> We've been discussing this for the past several days in chat, and the basic
> conclusion is that the PHP engine does not offer any easy way to do this.
> It's one hard-and-messy approach or another hard-and-messy approach. So far
> no one has figured out a not hard-and-messy way to make it work, regardless
> of performance.
>
> --Larry Garfield
Alright, alright. Guess I have to learn a bit more about the different
passes inside the compiler. :) Thanks.
Olle