Re: Re: Closure local return

From: Date: Tue, 04 May 2010 07:08:25 +0000
Subject: Re: Re: Closure local return
References: 1 2 3 4  Groups: php.internals 
Request: Send a blank email to internals+get-48185@lists.php.net to get a copy of this message
On 05/03/2010 06:03 PM, Etienne Kneuss wrote:
On Mon, May 3, 2010 at 5:54 PM, mathieu.suen<mathieu.suen@easyflirt.com> wrote:
     
I think you actually misunderstand the difference in
http://en.wikipedia.org/wiki/Closure_%28computer_science%29#Differences_in_semantics The way I read if the difference is wether it returns from the closure function or the surrounding function *calling* it. Not the *defining* scope. And no, it doesn't make sense in the PHP context IMHO. - Chris
       
"returns from the closure function" To go were? I had maintain a smalltalk compiler. I did not misunderstand the difference. The Common Lisp implementation is the more explicit one. For exemple: (defun eval-l1 (fct) (funcall fct)) (defun bar (x) (eval-l1 #'(lambda () (return-from bar 45)))
                        x)
(bar 23) -> 45 When funcall is apply you do not return from eval-l1. You return from bar. Which is the defining scope of the lanbda.
     
So <?php $a = function() { return; } $a(); echo "end"; ?> would it be an infinite loop? would it print end? what about: <?php function foo($c) {
    bar($c);
    echo "f";
} function bar($c) {
    $c();
    echo "b";
} $c = function() { return; } foo($c); what would it print? "f"? "fb" ? nothing? This is an interesting question. It depend on whether you consider your lanbda as a continuation. The other safe possibility is to generate an error when you evaluate a lambda were the context has escape which is the case in your example. But a would not change the semantic of "return" just chose an other keyword. $c = function() { return-from-def-scope; }
Please, if you want to propose design changes, make a decent proposal first, add some examples, not simply "what if PHP did<vague>".
No big deal, I don't want to make any proposition, I am just asking. I am not using PHP as a language for fun.
Best,
-- Mathieu Suen
     
-- Mathieu Suen

« previous php.internals (#48185) next »