> 在 2016年10月19日,12:21,Joe Groff <jgr...@apple.com> 写道:
> 
>> 
>> On Oct 19, 2016, at 9:16 AM, Guoye Zhang via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> 
>>> 
>>> 在 2016年10月19日,11:43,Kevin Nattinger <sw...@nattinger.net> 写道:
>>> 
>>>> 
>>>> On Oct 19, 2016, at 8:13 AM, Guoye Zhang via swift-evolution 
>>>> <swift-evolution@swift.org> wrote:
>>>> 
>>>> 
>>>>> 在 2016年10月19日,07:10,Jeremy Pereira <jeremy.j.pere...@googlemail.com> 写道:
>>>>> 
>>>>> 
>>>>>> On 18 Oct 2016, at 19:17, Guoye Zhang via swift-evolution 
>>>>>> <swift-evolution@swift.org> wrote:
>>>>>> 
>>>>>> Currently, Swift Int family and UInt family have compact representations 
>>>>>> that utilize all available values, which is inherited from C. However, 
>>>>>> it is horribly inefficient to implement optional integers. It takes 
>>>>>> double the space to store [Int?] than to store [Int] because of 
>>>>>> alignment.
>>>>> 
>>>>> Is this a general problem with Swift? Are lots of people complaining that 
>>>>> they are running out of space for their Optional<Int> arrays?
>>>>> 
>>>> It's just that a common data type wasting almost half the space seems 
>>>> inefficient. I guess this is also the reason why they didn't adopt 
>>>> optional integers widely in stdlib.
>>> 
>>> I’ve only needed an array of optionals once, maybe twice. I don’t think 
>>> arrays of optionals are widely used to begin with, and the reason there are 
>>> few optional integers in the stdlib is because the interface is from objc, 
>>> which doesn’t have optionals. I doubt any thought at all was given in 
>>> designing the standard library to the extra space for an optional.
>>> 
>> Swift stdlib is independent from objc. Currently, "Int?" storage has a 
>> tradeoff between less space (n + 1 bytes) and unaligned access, and more 
>> space (n * 2 bytes) and fast access. Neither of them is optimal.
> 
> Something worth considering at a higher level is whether Array ought to align 
> storage at all. Modern Intel and Apple CPUs pay much less of a penalty for 
> unaligned access than older microarchitectures, and the memory savings of 
> packing arrays of Int? and similar types would be significant. (There are C 
> compatibility issues here too, since C's semantic model requires pointers to 
> be well-aligned for their type, and we want Swift.Arrays of C types to be 
> cheaply interoperable with pointer-based C APIs. This could perhaps be dealt 
> with by guaranteeing that C basic types and structs always have sizeof(T) % 
> alignof(T) == 0, and well-aligning the beginning of arrays.)
> 
> -Joe
> 
That would be great, and certainly needs exploring before locking ABI.

- Guoye

>> 
>>>>> 
>>>>>> 
>>>>>> I propose to ban the top value in Int/UInt which is 0xFFFF... in hex. 
>>>>>> Int family would lose its smallest value, and UInt family would lose its 
>>>>>> largest value. Top value is reserved for nil in optionals. An additional 
>>>>>> benefit is that negating an Int would never crash.
>>>>> 
>>>>> Well the “top value” for signed ints would have to be 0x8000... not 
>>>>> 0xffff... which is the representation of -1. The top value for unsigned 
>>>>> ints cannot be banned because unsigned integers are often used as bit 
>>>>> fields either directly or in OptionSets.
>>>>> 
>>>>> Furthermore, how would the semantics of &+ and &- be affected? What about 
>>>>> the performance of those two operators?
>>>>> 
>>>> I was originally going for the symmetry between Int and UInt as in 
>>>> compatible bit patterns. Now that I think of it, UInt is commonly used for 
>>>> bitwise operations, and it doesn't make sense to optimize for "UInt?" 
>>>> which is uncommon. So I agree that 0x80... is better.
>>>> 
>>>> Int performance would surely suffer because of current instruction sets, 
>>>> but Int? would improve.
>>> 
>>> In my experience, ints are used orders of magnitude more often than 
>>> optional int?s. Why optimize for the rare case?
>>> 
>> If we were to have safe arithmetic that produces optionals, or lenient 
>> subscript, it is important to have efficient optional integers. I do agree 
>> that Int slowing down is unacceptable.
>> 
>> - Guoye
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to