On Mon, Aug 9, 2021 at 10:50 PM Olle Härstedt <olleharst...@gmail.com> wrote:
>
>
>
> On Mon, 9 Aug 2021, 21:41 the mschop, <mschop...@gmail.com> wrote:
>>
>> Hi all,
>>
>> This is my first time writing to the internals mailing list, so please
>> be patient with me. I would like to get feedback from you on the
>> following idea. The idea might seem crazy at the first glance, but the
>> longer I thought of it, the cooler I found the idea ;-). I would like
>> to share the idea with you and receive feedback. I would currently not
>> know how to implement it in the PHP lang. The only way I would be able
>> to do this right now with my skill set would be to write a transpiler
>> (which is not ideal), which compiles it to e.g. ReactPHP code.
>>
>> One of the main arguments against PHP is that PHP has a completely
>> empty state at the beginning of every request. This implies that on
>> every request all of the assets (e.g. configs) needs to be loaded.
>> Some applications load it from the database, which makes it even
>> worse. This causes slower response times than you can achieve with
>> other programming languages.
>>
>> One way to improve this is by using libraries like ReactPHP for adding
>> asynchronicity to PHP. This would enable one to load assets
>> concurrently, but migrating existing code bases to asynchronous code
>> would be a nightmare, so no one does it. Additionally, asynchronous
>> code is harder to read and write.
>>
>> My suggestion is to add the iasync keyword to PHP. By using the iasync
>> keyword, functions or code blocks could be marked as "eventually
>> async".
>>
>> 'eventually async', because it should be possible to disable the
>> functionality with an ini setting (especially for debugging purposes).
>>
>> The keyword could be used on a method level:
>>
>> public static iasync function doSomething() { ... }
>>
>> Alternatively it could be used for wrapping a code block:
>>
>> iasync {
>>     // contained code
>> }
>>
>> All blocking IO operations in iasync context would then not return the
>> actual value, but instead a promise.
>> Those promises are automatically awaited in the following cases:
>>
>> - The variables value is accessed
>> - The iasync context is left
>> - A non-iasync code block is invoked
>>
>> Example (variable access):
>>
>> iasync {
>>   $fileContent = file_get_contents('path'); // returns a promise
>>   $arr = [$fileContent]; // not awaited, because the actual value is
>> not relevant right now
>>   echo($fileContent); // now the code would block, because the value is 
>> needed
>> }
>>
>> Example (context left):
>>
>> iasync {
>>   $fileContent = file_get_contents('path'); // returns a promise
>> } // leaving context would block, until value available
>> echo $fileContent;
>>
>> #######
>> Promises
>> #######
>>
>> The promises are not like promises of other languages. They are
>> implicit and programmers cannot do anything with it.
>>
>> ################################
>> What is the advantage of this approach?
>> ################################
>>
>> Many applications could profit by iasync because it's so simple to
>> use. Application performance could be greatly improved.
>>
>> Thank you!
>>
>> Best regards
>> mschop
>>
>> --
>> PHP Internals - PHP Runtime Development Mailing List
>> To unsubscribe, visit: https://www.php.net/unsub.ph
>
>
> Hi,
>
> Looks kinda similar to what Amphp does with yield and generators? Did you 
> check that?
>
> Olle

Hi Olle,

I already used amphp.
Using amphp still means that the application needs to be rewritten.
Only amphp or reactphp libraries would be non-blocking. So one would
need to exchange most libraries one currently uses.

mschop

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

Reply via email to