> Le 24 juil. 2017 à 10:43, Tino Heth <2...@gmx.de> a écrit :
> 
> 
>> The last point is especially worrying to me because things like non-type 
>> generic parameters are *much bigger* than fixed-size arrays.
> 
> Why do you think that's the case?

This is a bit of a naive thing to say since we don't have non-type generic 
parameters, but it seems to me that there's essentially no contention that if 
we had it, we'd only need a shorthand (N x T) syntax to create a tuple of N 
objects of type T to implement a FixedSizeArray<T, N> struct in the standard 
library. It would already respond to the biggest needs: it can be 
layout-compatible with arrays in C structs, the tuple syntax migration is 
manageable (if we even want it), implementing Sequence on it is easy, it has 
well-understood copy semantics, the type declaration is unambiguous.

By contrast, the "non-type generic parameters" point hides that, at the very 
least, the ABI needs to change to support this and the generic syntax will need 
a makeover to support both type and non-type parameters. In addition, they will 
almost certainly motivate a debate on what "constant expression" means in Swift 
and the possibilities of compile-time evaluation. They open up other type 
possibilities that will probably need to be discussed, like `Foo<N>: Foo<N-1>`. 
And of course, that doesn't even mention that Swift still hasn't realized its 
"baseline vision" 
<https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md> of 
generics.

It's also a matter of impact. Fixed-size arrays are useful, to me included, but 
they don't really create new opportunities for things that just couldn't be 
done before. Non-type generic parameters do.

> And even if it's really more challenging than FSAs:
> Would that be enough justification to add a bunch of language changes right 
> now, ignoring more general concepts which offer a good syntax for them 
> without extra cost?

It seems to me that I'm the one advocating for fewer language changes, and the 
majority of sub-features that are being requested here don't feel particularly 
more general to me.

In its current form, this proposal tackles a contentious syntax to declare 
fixed-length arrays and a similarly contentious syntax to initialize them, it 
has multi-dimensional arrays, unpacking of arrays as parameter lists, zero-size 
types with alignment requirements, sized array literals, explicit conversions 
between array types, rules for deterministic initialization, vector types. Out 
of these, I could see parameter unpacking and vectors used for more than 
fixed-size arrays. (I haven't been through the entire discussion, though, so 
you might be able to point out a few more.)

There's also a number of issues that aren't addressed in the document, which I 
feel are obscured by the sheer number of things that it asks to consider: for 
instance, as we mentioned on another thread, Swift anonymous types can't 
conform to protocols, so it's not clear what fixed-size arrays have to be under 
the hood to be iterable.

Of course, if you take all of that, that's possibly bigger than non-type 
generic parameters, but I question whether it all needs to pass at the same 
time, or even if there are things that could be dropped to make this more 
manageable.
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to