> Am 23.11.2017 um 01:50 schrieb David Sweeris via swift-evolution 
> <swift-evolution@swift.org>:
> 
> 
> On Nov 21, 2017, at 22:54, Douglas Gregor via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
>>> On Nov 21, 2017, at 10:48 PM, David Hart <da...@hartbit.com> wrote:
>>> 
>>> 
>>> 
>>>> On 22 Nov 2017, at 07:41, Douglas Gregor via swift-evolution 
>>>> <swift-evolution@swift.org> wrote:
>>>> 
>>>> 
>>>> 
>>>>> On Nov 21, 2017, at 10:37 PM, Chris Lattner <clatt...@nondot.org> wrote:
>>>>> 
>>>>> On Nov 21, 2017, at 9:25 PM, Douglas Gregor <dgre...@apple.com> wrote:
>>>>>>> Or alternatively, one could decide to make the generics system *only 
>>>>>>> and forever* work on nominal types, and make the syntactic sugar just 
>>>>>>> be sugar for named types like Swift.Tuple, Function, and Optional.  
>>>>>>> Either design could work.
>>>>>> 
>>>>>> We don’t have a way to make it work for function types, though, because 
>>>>>> of parameter-passing conventions. Well, assuming we don’t invent 
>>>>>> something that allows:
>>>>>> 
>>>>>>  Function<Double, inout String>
>>>>>> 
>>>>>> to exist in the type system. Tuple labels have a similar problem.
>>>>> 
>>>>> I’m totally aware of that and mentioned it upthread. 
>>>> 
>>>> Eh, sorry I missed it.
>>>> 
>>>>>  There are various encoding tricks that could make this work depending on 
>>>>> how you want to stretch the current generics system…
>>>> 
>>>> I think it’s straightforward and less ugly to make structural types allow 
>>>> extensions and protocol conformances.
>>> 
>>> Can somebody explain to me what is less ugly about that? I would have 
>>> naturally thought that the language would be simpler as a whole if there 
>>> only existed nominal types and all structural types were just sugar over 
>>> them.
>> 
>> See Thorsten’s response with, e.g.,
>> 
>>            Function<Double, InoutParam<String>, Param<Int>>
>> 
>> which handles “inout” by adding wrappers around the parameter types (which 
>> one would have to cope with in any user of Function), but still doesn’t 
>> handle argument labels. To handle argument labels, we would need something 
>> like strings as generic arguments.
> 
> Oh, good! A use case for “literals as generic parameters” other than Vectors 
> and Fixed-Size Arrays!

Do not forget the use case of typed units (e.g. 9.81 m/s^2) which was discussed 
long ago on this list where integers as generic parameters would store the 
exponent of each base unit.

-Thorsten 
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to