> On 12 Jan 2017, at 22:37, Slava Pestov via swift-evolution
> <[email protected]> wrote:
>
>>
>> On Jan 12, 2017, at 9:53 AM, Chris Eidhof via swift-evolution
>> <[email protected] <mailto:[email protected]>> wrote:
>>
>> Ok, I've got a draft up as a gist:
>> https://gist.github.com/chriseidhof/6c681677d44903045587bf75fb17eb25
>> <https://gist.github.com/chriseidhof/6c681677d44903045587bf75fb17eb25>
>>
>> Before I submit it, could someone let me know if adding generics to
>> subscripts would influence the ABI? ( still feel pretty clueless in that
>> area).
>
> It won’t change the ABI of existing subscript calls, but if the standard
> library introduces new generic subscripts that replace older non-generic
> subscripts, it will impact ABI.
>
> Slava
Why are subscripts so different, anyway? One would think they are basically
sugared functions, but they don’t support so many things that regular functions
support. Not just syntax stuff, either - they also don’t support
@inline(__always) for some reason…
Where generic subscripts are concerned, there are a couple of different things
to express:
- Generic parameter (I can understand various co-ordinates for the data)
- Generic return type (I can construct your preferred representation of the
data)
- Generic setter type (I can set the data using various compatible types):
protocol MeaningfulToFoo {}
protocol ConstructableFromFoo {}
struct Foo {
subscript<Index>(index: Index) where Index: SignedInteger {
get<T> where T: ConstructableFromFoo { return T(self) }
set<U> where T: MeaningfulToFoo { self.someProperty =
newValue.someData }
}
}
The syntax looks a bit awkward, though, IMO. I’m wondering if it might be
better to have some kind of combined subscript + property behaviours (remember
those?) and allow those to be generic instead. Subscripts and properties are
very similar anyway - they are both bundles of functions to represent getting
and setting data (not just regular-old “get” and “set”, either, but also magic
stuff like “mutableAddressWithPinnedNativeOwner”). The only difference is that
property getters can’t have parameters — which is something I would also like
to see lifted one day (I believe I’ve even seen people asking for “named
subscripts” due to the lack of this =P)
- Karl
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution