> On Aug 16, 2016, at 7:13 PM, Karl via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> 
>> On 16 Aug 2016, at 01:14, David Sweeris via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>>> On Aug 15, 2016, at 13:55, Michael Ilseman via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>>> 
>>> It seems like there’s a potential for confusion here, in that people may 
>>> see “UInt8” and assume there is some kind of typed-ness, even though the 
>>> whole point is that this is untyped. Adjusting the header comments slightly 
>>> might help:
>>> 
>>> 
>>> /// A non-owning view of raw memory as a collection of bytes.
>>> ///
>>> /// Reads and writes on memory via `UnsafeBytes` are untyped operations that
>>> /// do no require binding the memory to a type. These operations are 
>>> expressed 
>>> /// in terms of `UInt8`, though the underlying memory is untyped.
>>> 
>>> …
>>> 
>>> You could go even further towards hinting this fact with a `typealias Byte 
>>> = UInt8`, and use Byte throughout. But, I don’t know if that’s getting too 
>>> excessive.
>> 
>> I don't think that's too excessive at all. I might even go further and say 
>> that we should call it "Untyped" instead of "Byte", to really drive home the 
>> point (many people see "byte" and think "8-bit int", which is merely a side 
>> effect of CPUs generally not having support for types *other* than ints and 
>> floats, rather than a reflection of the true "type" of the data).
>> 
>> - Dave Sweeris
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> ‘Byte’ is sufficient, I think.
> 
> In some sense, it is typed as bytes. It reflects the fact that anything that 
> is representable to the computer must be expressible as a sequence of bits 
> (the same way we have string de/serialisation — which of course is not to say 
> that the byte representation is good for serialisation purposes). 
> “withUnsafeBytes” can be seen as doing a reversible type conversion the same 
> way LosslessStringConvertible does; only in this case the conversion is free.

Yes. Byte clearly refers to a value's in-memory representation. But typealias 
Byte = UInt8 would imply the opposite of what needs to be conveyed. The name 
Byte refers to raw memory being accessed, not the value being returned by the 
collection. The in-memory value's bytes are loaded from memory and 
reinterpreted as UInt8 values. UInt8 is the correct type for the value after it 
is loaded. Calling the collection’s element type Byte sends the wrong message. 
e.g. [Byte] or UnsafePointer<Byte> would be nonsense.

Keep in mind the important use case is code that needs to work with a 
collection of UInt8 values without knowing the type of the values in memory. 
This makes it intuitive and convenient to implement correctly without needing 
to reason about the Swift-specific notions of raw vs. typed pointers and 
binding memory to a type.

The documentation should be fixed to clarify that the in-memory value is not 
the same as the loaded value.

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

Reply via email to