Re: [RFC] Patch for Union and Intersection Types
| From: | Bob Weinand | Date: | Tue, 26 Apr 2016 14:58:22 +0000 |
| Subject: | Re: [RFC] Patch for Union and Intersection Types | ||
| References: | 1 2 3 4 5 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-92790@lists.php.net to get a copy of this message | ||
> Am 26.04.2016 um 16:47 schrieb Levi Morrison <morrison.levi@gmail.com>:
> On Tue, Apr 26, 2016 at 8:30 AM, Dmitry Stogov <dmitry@zend.com
> <mailto:dmitry@zend.com>> wrote:
>>
>> On 04/26/2016 05:19 PM, Bob Weinand wrote:
>>>>
>>>> Am 26.04.2016 um 15:33 schrieb Dmitry Stogov <dmitry@zend.com>:
>>>>
>>>> hi Levi,
>>>>
>>>> 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 :(
>>>>
>>>> I'm going to push my own RFC for voting together with "Union Types".
>>>>
>>>> https://wiki.php.net/rfc/nullable_return_types
>>>>
>>>> At least, it has up to date implementation.
>>>>
>>>> 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 :(
>>>>
>>>> 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?
>>>>
>>>> Thanks. Dmitry.
>>>>
>>>>
>>>> ________________________________________
>>>> From: Levi Morrison <morrison.levi@gmail.com>
>>>> Sent: Tuesday, April 26, 2016 02:37
>>>> To: internals
>>>> Subject: [PHP-DEV] [RFC] Patch for Union and Intersection Types
>>>>
>>>> Internals,
>>>>
>>>> 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.
>>>>
>>>> A few things to note:
>>>>
>>>> * 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`)
>>>>
>>>> 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.
>>>>
>>>> I especially would like people to try out the conversion rules for
>>>> scalar types as it has been a point of discussion.
>>>>
>>>> [1]: https://github.com/php/php-src/pull/1887
>>>
>>> Hey Dmitry,
>>>
>>> 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… Now,
>>> he has time to manage things and we could move ahead quickly and write the
>>> patch up.
>>
>> I know, we all like to make our best for PHP.
>> Sorry, if I was too emotional.
>>>
>>> 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.
>>
>> I didn't exactly get, what do you propose. One RFC with voting for
>> "Nullable" or "Union"?
>>
>> Thanks. Dmitry.
>>
>>>
>>> Thanks,
>>> Bob
>
> 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 .
>
> 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.
>
> 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