Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:92790 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 83331 invoked from network); 26 Apr 2016 14:58:31 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 26 Apr 2016 14:58:31 -0000 Authentication-Results: pb1.pair.com header.from=bobwei9@hotmail.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=bobwei9@hotmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain hotmail.com designates 65.55.111.141 as permitted sender) X-PHP-List-Original-Sender: bobwei9@hotmail.com X-Host-Fingerprint: 65.55.111.141 blu004-omc4s2.hotmail.com Received: from [65.55.111.141] ([65.55.111.141:55061] helo=BLU004-OMC4S2.hotmail.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 39/43-02401-5128F175 for ; Tue, 26 Apr 2016 10:58:31 -0400 Received: from BLU436-SMTP33 ([65.55.111.137]) by BLU004-OMC4S2.hotmail.com over TLS secured channel with Microsoft SMTPSVC(7.5.7601.23008); Tue, 26 Apr 2016 07:58:27 -0700 X-TMN: [XOskOp/6kPeQG44yn+oVBNtSUaLKhGev] X-Originating-Email: [bobwei9@hotmail.com] Message-ID: Content-Type: multipart/alternative; boundary="Apple-Mail=_C8D34230-355F-46A9-A41D-D5A907880C00" MIME-Version: 1.0 (Mac OS X Mail 9.2 \(3112\)) In-Reply-To: Date: Tue, 26 Apr 2016 16:58:22 +0200 CC: Dmitry Stogov , internals , Joe Watkins References: <571F7B91.2030102@zend.com> To: Levi Morrison X-Mailer: Apple Mail (2.3112) X-OriginalArrivalTime: 26 Apr 2016 14:58:25.0155 (UTC) FILETIME=[15652530:01D19FCC] Subject: Re: [PHP-DEV] [RFC] Patch for Union and Intersection Types From: bobwei9@hotmail.com (Bob Weinand) --Apple-Mail=_C8D34230-355F-46A9-A41D-D5A907880C00 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" > Am 26.04.2016 um 16:47 schrieb Levi Morrison = : > On Tue, Apr 26, 2016 at 8:30 AM, Dmitry Stogov > wrote: >>=20 >> On 04/26/2016 05:19 PM, Bob Weinand wrote: >>>>=20 >>>> Am 26.04.2016 um 15:33 schrieb Dmitry Stogov : >>>>=20 >>>> hi Levi, >>>>=20 >>>> It looks like your "work" on "Nullable Types" RFC was intended to = win >>>> time for this patch and block "Nullable Types" again. >>>> Actually, you have been blocking it for more than a year :( >>>>=20 >>>> I'm going to push my own RFC for voting together with "Union = Types". >>>>=20 >>>> https://wiki.php.net/rfc/nullable_return_types >>>>=20 >>>> At least, it has up to date implementation. >>>>=20 >>>> We discussed this internally 2-3 weeks ago, and my politeness = (or/and >>>> stupidity) allowed you to pass your version for common discussion. >>>> Now I can see your real reason :( >>>>=20 >>>> Both "Union Types" and "Nullable Types" may make sense, and both = should >>>> be voted at the same time. >>>> Tomorrow is time to start voting. Right? >>>>=20 >>>> Thanks. Dmitry. >>>>=20 >>>>=20 >>>> ________________________________________ >>>> From: Levi Morrison >>>> Sent: Tuesday, April 26, 2016 02:37 >>>> To: internals >>>> Subject: [PHP-DEV] [RFC] Patch for Union and Intersection Types >>>>=20 >>>> Internals, >>>>=20 >>>> Joe Watkins and Bob Weinand have worked out a [proof-of-concept = patch >>>> for union types][1]. Please go download it and experiment with it. >>>>=20 >>>> A few things to note: >>>>=20 >>>> * This patch includes intersection types. However, a type = expression >>>> must be either a union type or an intersection type; it doesn't >>>> support both such as `Array | (Countable & Traversable)`. >>>> * This patch adds `null`, `true` and `false` for type = declarations. >>>> * This patch includes conversion rules for weak types. >>>> * It does not have short-hand for unions with null (`?Foo` being = `Foo | >>>> Null`) >>>>=20 >>>> These features (or omitted ones) are not necessarily what will be >>>> voted on. Rather this patch allows us to experiment with these >>>> features in code. This experience should be helpful for us to = solidify >>>> how we actually feel about these features. >>>>=20 >>>> I especially would like people to try out the conversion rules for >>>> scalar types as it has been a point of discussion. >>>>=20 >>>> [1]: https://github.com/php/php-src/pull/1887 >>>=20 >>> Hey Dmitry, >>>=20 >>> Please, do not accuse us of blocking the nullables. This wasn't >>> intentional and rather a coincidence that we provided a patch right = now. >>> First we wanted to concentrate our forces on getting a great 7.0 out >>> before starting this RFC (as it didn't make it in time for going = into 7.0 >>> too as we waited for result on scalar types in general first). >>> Then, as you're aware Levi had absolutely no time for a few = months=E2=80=A6 Now, >>> he has time to manage things and we could move ahead quickly and = write the >>> patch up. >>=20 >> I know, we all like to make our best for PHP. >> Sorry, if I was too emotional. >>>=20 >>> I'd like to hold first a formal (and binding) vote on whether "null = |" or >>> "?" should be used (in case both RFCs pass). Rushing things through = right >>> now might just us ending up with semantics the vast majority = dislikes. >>=20 >> I didn't exactly get, what do you propose. One RFC with voting for >> "Nullable" or "Union"? >>=20 >> Thanks. Dmitry. >>=20 >>>=20 >>> Thanks, >>> Bob >=20 > I believe the intention here is to decide whether we do the short-hand > syntax for nullable types or only the long-form. I can understand the > rationale of not having both or at least dis-allowing the syntax to > mix them. For example, I don't think anyone really likes allowing > this: `?Array | Travsersable` as . >=20 > However, if the union types RFC does not pass then it seems odd (to me > at least) to use the expression `Foo | Null` instead of `?Foo`, but I > know Bob would like the long-form in all cases, hence why he would > like a vote. Joe seems to just want nullables to have an outcome so it > is no longer blocking typed properties. >=20 > Is that a correct summary, Bob and Joe? Yeah, I'd like to not allow ?Foo in any case if union types pass. If they fail, ?Foo is fine for me. Bob= --Apple-Mail=_C8D34230-355F-46A9-A41D-D5A907880C00--