> On 28 May 2016, at 20:16, Xiaodi Wu <xiaodi...@gmail.com> wrote:
> 
> I couldn't disagree more. Generic programming is a far more advanced concept 
> than arrays and dictionaries, and learners should be able to use them without 
> contending with angle brackets they don't understand.
> 
> Fundamentally, even for an experienced user of the language, working with 
> Collections and Sequences requires more consideration than working with 
> arrays. It's not just a matter of how these things are spelled. It seems like 
> you want to punish users who don't have the time or inclination to genericize 
> their algorithms by making them write more, in the hopes that if you make 
> working with arrays difficult enough, people will switch to generic 
> containers. That's bonkers.

It’s not about making working with arrays difficult, but if we can make working 
with basic generic collections/sequences just as easy, then it makes sense to 
encourage their use as much as possible. Like in the example below, 
Sequence.of<Foo> is pretty straightforward, and far more flexible and useful 
than just using [Foo], as you can trivially change the type of collection you 
use later.

More complex generics definitely need to be explored separately, but 
Sequence.of<Foo> should be just as simple to use as [Foo], it’s just a little 
longer because of the ability to distinguish between sequence and collection.

> On Sat, May 28, 2016 at 14:38 Haravikk via swift-evolution 
> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
> 
>> On 27 May 2016, at 15:31, plx via swift-evolution <swift-evolution@swift.org 
>> <mailto:swift-evolution@swift.org>> wrote:
>> 
>>   protocol Sequence {
> 
>>     typealias of<E> == S: Self where S.Iterator.Element == E
>>   }
>> 
> 
>>   // sequence-accepting variant
>>   func doSomething<S:Sequence.of<Foo>>(values: S) { … }
> 
> 
> This is a nice alternative; would it actually need to be declared in the 
> angle brackets? Could it be done as:
> 
>       func doSomething(values:Sequence.of<Foo>) { … }
> 
> As long as it would work the same as a generic declaration this could be a 
> good way to do it, either that or a SequenceOf type alias as mentioned.
> 
> 
> Still, I kind of feel like we need to do something with the array type 
> shorthand, but I wonder if perhaps we could just get rid of it altogether, to 
> prevent its use entirely? i.e- all instances of [Foo] can be replaced with 
> Array<Foo>, but we would encourage the use of 
> Sequence.of/SequenceOf/Collection.of/CollectionOf first wherever possible.
> 
> As more types become available that are ArrayLiteralConvertible it seems like 
> we should discourage restriction of a parameter to Array except when a 
> developer explicitly chooses it. This problem will come up with the 
> Dictionary type shorthand as well if Swift gets some kind of Map protocol to 
> abstract it, and we don’t even have a Set-specific syntax so it seems like it 
> may be fairer to remove these shorthands.
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to