It seems to me that this applies just the same to type generic parameters. Are 
there any reason that you can't instantiate a generic type at runtime, or is it 
just because the need is not as evident as it would/could be with non-type 
generic parameters?

> Le 30 juil. 2017 à 21:10, John McCall via swift-evolution 
> <[email protected]> a écrit :
> 
>> On Jul 30, 2017, at 11:43 PM, Daryle Walker <[email protected]> wrote:
>> The parameters for a fixed-size array type determine the type's size/stride, 
>> so how could the bounds not be needed during compile-time? The compiler 
>> can't layout objects otherwise. 
> 
> Swift is not C; it is perfectly capable of laying out objects at run time.  
> It already has to do that for generic types and types with resilient members. 
>  That does, of course, have performance consequences, and those performance 
> consequences might be unacceptable to you; but the fact that we can handle it 
> means that we don't ultimately require a semantic concept of a constant 
> expression, except inasmuch as we want to allow users to explicitly request 
> guarantees about static layout.
> 
> Value equality would still affect the type-checker, but I think we could 
> pretty easily just say that all bound expressions are assumed to potentially 
> resolve unequally unless they are literals or references to the same 'let' 
> constant.
> 
> The only hard constraint is that types need to be consistent, but that just 
> means that we need to have a model in which bound expressions are evaluated 
> exactly once at runtime (and of course typically folded at compile time).
> 
> John.
> 
>> Or do you mean that the bounds are integer literals? (That's what I have in 
>> the design document now.)
>> 
>> Sent from my iPhone
>> 
>> On Jul 30, 2017, at 8:51 PM, John McCall <[email protected]> wrote:
>> 
>>>> On Jul 29, 2017, at 7:01 PM, Daryle Walker via swift-evolution 
>>>> <[email protected]> wrote:
>>>> The “constexpr” facility from C++ allows users to define constants and 
>>>> functions that are determined and usable at compile-time, for compile-time 
>>>> constructs but still usable at run-time. The facility is a key step for 
>>>> value-based generic parameters (and fixed-size arrays if you don’t want to 
>>>> be stuck with integer literals for bounds). Can figuring out Swift’s story 
>>>> here be part of Swift 5?
>>> 
>>> Note that there's no particular reason that value-based generic parameters, 
>>> including fixed-size arrays, actually need to be constant expressions in 
>>> Swift.
>>> 
>>> John.
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to