> I really don't like 'as' in this context, even if Hack uses it, as it
> doesn't reflect in English terms what the code is doing. As others
> have already said, it reads as if 'T' is being aliased to 'Bar'.

I second that.

I hear the concerns about adding another reserved word "is" though,
so I'd like to suggest simply using a ":" ... as in:

    class A<T : T1> { ... }

Consistent with return type-hints, it should feel like home?

For sure nobody wants to type out "instanceof", and (as pointed out
in the RFC) the instanceof operator checks the type of an object,
which is *not* what this is doing - a type argument is not an "instance
of" anything. The ":" is more neutral in that regard maybe?


On Thu, Apr 21, 2016 at 10:32 AM, Josh Di Fabio <joshdifa...@gmail.com> wrote:
> On Wed, Apr 20, 2016 at 8:17 PM, Dominic Grostate
> <codekest...@googlemail.com> wrote:
>> Thanks for you're input everyone.
>>
>> So far, we have read some ideas for handling upper bounds, or multiple there
>> of.
>> The preferred keywords appear to be either "as" or "instanceof".
>>
>> class Foo<T as Bar> {}
>> class Foo<T instanceof Bar> {}
>>
>> We would like to know for sure then if everyone is largely against the
>> addition of an "is" keyword, in favour of one of the other two.
>>
>
> I really don't like 'as' in this context, even if Hack uses it, as it
> doesn't reflect in English terms what the code is doing. As others
> have already said, it reads as if 'T' is being aliased to 'Bar'.
>
> On Wed, Apr 20, 2016 at 8:17 PM, Dominic Grostate
> <codekest...@googlemail.com> wrote:
>> Thanks for you're input everyone.
>>
>> So far, we have read some ideas for handling upper bounds, or multiple there
>> of.
>> The preferred keywords appear to be either "as" or "instanceof".
>>
>> class Foo<T as Bar> {}
>> class Foo<T instanceof Bar> {}
>>
>> We would like to know for sure then if everyone is largely against the
>> addition of an "is" keyword, in favour of one of the other two.
>>
>> ----------------
>>
>> There is also a desire to include unions and intersections.
>> Presently though, this feature feels tied in with
>> https://wiki.php.net/rfc/union_types meaning if union types are approved,
>> then generics would have to support them as well.  Likewise if this feature
>> becomes approved in generics, it would make sense to support them in regular
>> type hints as well.
>>
>> ----------------
>>
>> The RFC makes a reference to generic closures, which may look something like
>> this:
>>
>> function my_function(callable<Foo, Bar> $func) {
>>
>> }
>>
>> However, an RFC already exists which is very similar to this feature at
>> https://wiki.php.net/rfc/callable-types
>> As it currently standards these RFCs appear incompatible with each other
>> (please correct me if I am wrong).
>>
>> My question about this is would you prefer the generics RFC exclude this
>> part in favour of a separate or later RFC.
>> Initially the proposal included generic arrays "array<string>".  However to
>> ease the implementation it was decided that should be a separate feature.
>> So we'd like to find out if everyone else feels the same way about callable
>> types.
>>
>> ----------------
>>
>> This RFC currently doesn't specify in detail how reflection would work.  We
>> have attempted a few API designs, but due to generic classes being ...
>> generic, it is difficult to find a suitable way to glean information about a
>> class in a backwards compatible manner.  So we will need some help on this
>> one.
>>
>> -----------------
>>
>> Aside from these top issues on our own list, however does everyone feel
>> about the proposal in general?
>> As the RFC is still in draft, we will continue to make changes to it as more
>> popular idea pop up, so please continue.
>>
>> Thanks.
>>
>> PS: I wasn't properly subscribed to the mailing list, so I missed a few
>> important messages that were mailed directly to internals, but hopefully
>> I've managed to fix that now.

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to