> 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