Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:35784 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 4587 invoked by uid 1010); 25 Feb 2008 09:51:40 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 4562 invoked from network); 25 Feb 2008 09:51:40 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 25 Feb 2008 09:51:40 -0000 Authentication-Results: pb1.pair.com smtp.mail=helly@php.net; spf=unknown; sender-id=unknown Authentication-Results: pb1.pair.com header.from=helly@php.net; sender-id=unknown Received-SPF: unknown (pb1.pair.com: domain php.net does not designate 85.214.94.56 as permitted sender) X-PHP-List-Original-Sender: helly@php.net X-Host-Fingerprint: 85.214.94.56 aixcept.net Linux 2.6 Received: from [85.214.94.56] ([85.214.94.56:60902] helo=h1149922.serverkompetenz.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 33/B2-17644-39A82C74 for ; Mon, 25 Feb 2008 04:29:56 -0500 Received: from MBOERGER-ZRH.corp.google.com (25-162.78-83.cust.bluewin.ch [83.78.162.25]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by h1149922.serverkompetenz.net (Postfix) with ESMTP id 7E4F211EF82; Mon, 25 Feb 2008 10:29:52 +0100 (CET) Date: Mon, 25 Feb 2008 10:29:23 +0100 Reply-To: Marcus Boerger X-Priority: 3 (Normal) Message-ID: <407004164.20080225102923@marcus-boerger.de> To: "Andi Gutmans" CC: "Andrei Zmievski" , "Matvey Arye" , "KOYAMA Tetsuji" , In-Reply-To: <698DE66518E7CA45812BD18E807866CE014A9365@us-ex1.zend.net> References: <47B9B1B9.7060601@geminisbs.com> <93D0D6BA-34AD-4A17-B474-91B251628EA5@gravitonic.com> <698DE66518E7CA45812BD18E807866CE014A9365@us-ex1.zend.net> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8bit Subject: Re: [PHP-DEV] [RFC] Anonymous functions From: helly@php.net (Marcus Boerger) Hello Andi, my understanding was that we did not like the anon function syntax sugar and could not agree on a feature set for closures upfront and thus decided to disagree and not do anything. Now that the topic came up again it seems that we actually should work on an agreeable featureset in a form of a RFC. My current opinion is that we should have a local scope created on anon function creation that would even contain $this. Now this is even more so premature so I lea ve it for a RFC. What we need is someone to start that RFC, any volunteers? marcus Saturday, February 23, 2008, 8:36:18 PM, you wrote: > I think we have to be very clear whether we are going to provide just a > sexier notation for anonymous functions or closures (and if the latter > what the semantics are). > Just doing one and not figuring out the long term piece doesn't make > sense because we may end up having two completely distinct features > and/or feature creep over the next year which doesn't make much sense to > me. > I think in last discussion most ppl just preferred a sexier anonymous > function esp. as there weren't very clear/clean proposals for how > closures would work in PHP and what the benefits would be. > So I definitely suggest to have a discussion, maybe RFC based like > Stefan did but really decide once and for all on where we'd like to go > with this. We all know that no features map 1:1 to PHP and there are > always unique behaviors of our language and environment which require a > fresh view at things. > Andi >> -----Original Message----- >> From: Andrei Zmievski [mailto:andrei@gravitonic.com] >> Sent: Friday, February 22, 2008 10:00 AM >> To: Matvey Arye >> Cc: KOYAMA Tetsuji; internals@lists.php.net >> Subject: Re: [PHP-DEV] [RFC] Anonymous functions >> >> Yes, let's re-open, I'd like to get a closure on that issue (pun >> intended). >> >> -Andrei >> >> On Feb 18, 2008, at 8:26 AM, Matvey Arye wrote: >> >> > Hi All, >> > >> > I second this. Can we please re-open the discussion on anonymous >> > functions as well as closures. That would be an awesome feature. >> > create_function is a bit ugly semantically to be sufficient for all >> > anonymous function needs. >> > >> > Thanks, >> > Mat >> > >> > KOYAMA Tetsuji wrote: >> >> Hi lists, >> >> >> >> Is this discussion stopping? >> >> >> >> I want this feature in PHP. Please start to talk. >> >> >> >> On Jan 10, 2008 7:09 PM, Ryusuke SEKIYAMA >> wrote: >> >> >> >>> Hello, lists, >> >>> >> >>> We have discussed about implementing anonymous functions and >> >>> closures in PHP. >> >>> However, I consider that implementing anonymous functions and >> >>> implementing lexical scopes should be discussed separately. >> >>> # Even though I like closure. ;-) >> >>> So I wrote anonymous function patch for PHP 5.3 and 6.0. >> >>> >> >>> >> >>> Patches (inlcude tests): >> >>> for PHP 5.3: http://www.opendogs.org/pub/php-5.3dev-080109- >> >>> anon.patch >> >>> for PHP 6.0: http://www.opendogs.org/pub/php-6.0dev-080109- >> >>> anon.patch >> >>> >> >>> >> >>> Featues: >> >>> - Unlike create_function(), there is no need to take care of >> >>> quotes, backslashes and dollars . >> >>> - Can be used in loop, but be compiled only once. >> >>> - Supports recursive call using __FUNCTION__. >> >>> - Supports inline execution. It works like a block scope. >> >>> - Works with opcode caches. >> >>> Since I couldn't build APC against PHP 5.3, I have tested >> >>> PHP 5.2.5 + anonymous function patch and APC 3.0.16. >> >>> >> >>> >> >>> Example: >> >>> > >>> // callback >> >>> $arr = array(5, 3, 6, 0); >> >>> usort($arr, function($a, $b){ return $a - $b; }); >> >>> print_r($arr); // 0, 3, 5, 6 >> >>> >> >>> // assign to a variable >> >>> $lambda = function(){ >> >>> echo "Hello, World!\n"; >> >>> }; >> >>> $lambda(); // "Hello, World!" >> >>> >> >>> // inline execution >> >>> $result = function($a, $b){ >> >>> return $a + $b; >> >>> }(1, 2); >> >>> var_dump($result); // "int(3)" >> >>> ?> >> >>> >> >>> >> >>> The anonymous function name is composed of '\0', >> >>> "ZEND_ANON<#serial>", >> >>> filename and character position. >> >>> - Leading '\0' blocks to be displayed by get_defined_functions(). >> >>> - "ZEND_ANON<" helps determine wheter the function is anonymous >> >>> or not >> >>> because '<' cannot be used for user-defined function name. >> >>> - Serial number and file informations make the name unique. >> >>> - char anon_key_buf[32] is long enough because >> >>> `snprintf(anon_key_buf, 32, "ZEND_ANON<%llu>", (unsigned long >> >>> long)UINT64_MAX)' >> >>> returns 31. >> >>> >> >>> >> >>> Regards, >> >>> >> >>> >> >>> 2008/1/6, Marcus Boerger : >> >>> >> >>>> Hello Stanislav, >> >>>> >> >>>> tha makesw three then already, how about we ask around again? >> >>>> Ryusuke, can you please start a new '[RFC] Square brackets >> >>>> shortcut' thread >> >>>> to collect opinions and pass along the patch for that? >> >>>> >> >>>> I like the anonymous function patch too. It is clean and simple. >> >>>> Maybe you >> >>>> want to start a second '[RFC] Anonymous functions' thread with >> >>>> that patch. >> >>>> >> >>>> Can you also please add tests for both? >> >>>> >> >>>> marcus >> >>>> >> >>>> Wednesday, January 2, 2008, 7:51:06 PM, you wrote: >> >>>> >> >>>> >> >>>>>> the square bracket array syntax patch for PHP 5.3, >> >>>>>> http://www.opendogs.org/pub/php-5.3dev-080101-sbar.patch >> >>>>>> >> >>>>> I remember we discussed that already and it was rejected then >> >>>>> (even >> >>>>> though myself and Andi liked it) - did the people that objected >> >>>>> then >> >>>>> change their minds? >> >>>>> >> >>>> >> >>>> Best regards, >> >>>> Marcus >> >>>> >> >>>> >> >>>> >> >>> -- >> >>> /** >> >>> * Ryusuke SEKIYAMA >> >>> * rsky0711@gmail.com >> >>> */ >> >>> >> >>> -- >> >>> PHP Internals - PHP Runtime Development Mailing List >> >>> To unsubscribe, visit: http://www.php.net/unsub.php >> >>> >> >>> >> >>> >> >> >> >> - >> >> KOYAMA, Tetsuji >> >> koyama@hoge.org >> >> >> >> >> > >> > -- >> > PHP Internals - PHP Runtime Development Mailing List >> > To unsubscribe, visit: http://www.php.net/unsub.php >> >> -- >> PHP Internals - PHP Runtime Development Mailing List >> To unsubscribe, visit: http://www.php.net/unsub.php Best regards, Marcus