Re: [RFC Discuss] Generator Delegation

From: Date: Tue, 03 Mar 2015 11:34:29 +0000
Subject: Re: [RFC Discuss] Generator Delegation
References: 1 2 3 4 5 6 7 8  Groups: php.internals 
Request: Send a blank email to internals+get-84227@lists.php.net to get a copy of this message
Niklas Keller wrote on 03/03/2015 10:55:
    Gr, top-posting...
Sorry, was on mobile. ;-)
    However, since the existence of the word "yield" is the only thing
    that
    marks a coroutine now, how about using a variant of that for the final
    value, e.g. "yield final $foo"?
What's the final value? The last "yield"ed value or a return?
"yield final" would mark the final result of the coroutine, as opposed to the intermediate values passed out with a normal "yield".
Just to give you some real world example: If you're using "return", it would look like that: public function getSession ($sessionId) {
    $result = yield $this->redis->get("session.{$sessionId}")); // We're waiting here until redis responded.
    return json_decode($result);
}
My suggestion is simply to change the keyword: public function getSession ($sessionId) {
    $result = yield $this->redis->get("session.{$sessionId}")); // We're waiting here until redis responded.
    yield final json_decode($result);
} The reasoning being that when you run getSession(42), it *doesn't* return the result of json_decode(), it returns a pointer to the coroutine's state, which you can resume later. Actually, I don't think that example makes sense, because JSON gets sent out at the first yield, and then sent back in, so the caller would look something like this: $foo = getSession(42); $json_data = $foo->current(); $foo->send($json_data); $decoded = $foo->getReturn(); But never mind, I think we both get the idea. I understand the desire for a "final result", but I don't like reusing the word "return", because it's never "returned" as the result of running the function, it's just made available through some specific method/syntax. Regards, -- Rowan Collins [IMSoP]

« previous php.internals (#84227) next »