> 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

Reply via email to