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
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--
To unsubscribe, visit: https://www.php.net/unsub.ph
https://www.php.net/unsub.php
Hi,
Looks kinda similar to what Amphp does with yield and generators? Did you
check that?
Olle
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--
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