> On Aug 30, 2017, at 8:01 AM, Robert Widmann <devteam.cod...@gmail.com> wrote:
> 
>> 
>> On Aug 29, 2017, at 5:22 PM, David Sweeris via swift-dev 
>> <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:
>> 
>> 
>>> On Aug 29, 2017, at 1:49 PM, Slava Pestov <spes...@apple.com 
>>> <mailto:spes...@apple.com>> wrote:
>>> 
>>> 
>>>> On Aug 29, 2017, at 11:03 AM, David Sweeris via swift-dev 
>>>> <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:
>>>> 
>>>> Hi everyone! I'm trying to implement literal values as generic types.
>>> 
>>> Can you briefly explain what you mean by this?
>>> 
>>> Are you referring to let-polymorphism, like
>>> 
>>> let fn = { $0 }
>>> let f1: (Int) -> Int = fn
>>> let f2: (Float) -> Float = fn
>> 
>> No, I mean so that a vector's or matrix's dimensions can be part of its type 
>> (strawman syntax and protocol name, but this is pretty much what I'll be 
>> trying to support, at least at first):
>> struct Vector<T: ExpressibleByIntegerLiteral, L: IntegerLiteralExpr> {
>>   var elements: [T]
>>   init() {
>>     elements = [T](repeating: 0, count: L)
>>   }
>> }
>> 
>> let vect = Vector<Int, 5>()
>> 
>> And, once that's working, I'm going to add support simple "type functions":
>> func join <T, L1, L2> (_ lhs: Vector<T, L1>, _ rhs: Vector<T, L2>) -> 
>> Vector<T, L1 + L2 > {...}
>> I think restricting the supported "type functions" to expressions that could 
>> be evaluated by the compiler's "constant folding" code would be a reasonable 
>> place to start, until we figure out what we want to do about 
>> "pure"/"constexpr" stuff... even just "+" for numeric and string literals, 
>> and "-" for numeric literals, seems like a reasonable starting goal, and I 
>> think that'd be simple enough to implement (famous last words, right?)... 
>> It's all academic until I get the simple cases working first, though.
> 
> Constant folding occurs too late in the compilation process for you to take 
> advantage of it in the solver.  You’ll need to write your own evaluator and 
> teach CSSimplify to invoke it during the type matching process.  I would 
> start by adding a new kind of Type and TypeRepr that hold SequenceExpr nodes 
> and a CanType that holds an APSInt representing the result of evaluating the 
> expression.

Thanks! I'll keep this in mind when it's time to implement it.

- Dave Sweeris
_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to