On 1 September 2017 14:02:29 BST, Haitao Lv <i...@lvht.net> wrote:
>
>Fiber is a lightweight thread. Please see
>https://en.wikipedia.org/wiki/Fiber_(computer_science)
>And ruby support Fiber. Please see
>https://ruby-doc.org/core-2.4.1/Fiber.html

Ah, thanks, that makes more sense now.

I note that the examples there all implement it not as a keyword, but as a 
library function, which maybe makes more sense: whereas "yield" turns a 
function declaration into a generator declaration, "Fiber\yield", as we might 
call it, is just a function call which can happen anywhere and manipulates some 
global state.

The choice of "await" also feels odd: you're not awaiting the thing on the 
right-hand side of the keyword, you're sending it somewhere and awaiting 
something else.


> You can see the await as a resumable return. The value after it
>will be returned and the function
>will be paused.

Again, this explanation doesn't make sense if you can call foo() without any 
Fiber code. If there isn't an active Fiber to pause, the "await" line can't 
"return" anything; it will presumably throw an error of some sort.

function foo($x) {
     $y = Fiber\yield($x);
     return $x + $y;
}
echo foo(1);

The 1 isn't "returned" to the echo, it's passed off to a global function for 
further processing. This makes much more sense to me than implying that foo() 
is no longer a normal function.


>> Your ->resume() doesn't seem to do anything a normal generator can't,
>except that the yield is nested deeper.
>
>The await is a nested deeper yield!

Yes, I understand that, but that seems to be completely unrelated to the API 
design of having resume() act as start, continue, and final result all rolled 
into one. As I say, I didn't entirely follow the reasoning for allowing return 
in generators, but if Fibers are used for the same purpose, I would expect the 
same concerns to arise.

However, I think the comparison to generators may be more distracting than 
useful, as they seem to be very different solutions to the same or related 
problems.

Regards,

-- 
Rowan Collins
[IMSoP]

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

Reply via email to