on Fri Jul 15 2016, Arnold Schwaighofer <[email protected]> wrote:
> This is probably uncontroversial. > > PR: https://github.com/apple/swift-evolution/pull/434 +1 >> On Jul 13, 2016, at 4:39 PM, Arnold Schwaighofer via swift-evolution >> <[email protected]> wrote: >> >> Int.init(ObjectIdentifier) and UInt.init(ObjectIdentifier) should have a >> 'bitPattern:’ label to make it clear at the use site that we interpret the >> value as a bit pattern. >> >> In Swift we have ObjectIdentifier values which uniquely identify a class >> instance or metatype. They are implemented as a struct which holds the value >> of the reference to the instance or metatype as a raw pointer. >> >> /// A unique identifier for a class instance or metatype. >> public struct ObjectIdentifier : Hashable, Comparable { >> internal let _value: Builtin.RawPointer >> ... >> } >> >> >> We have constructors for Int and Uint that capture this value. These >> constructors don’t have an argument label. >> >> extension UInt { >> /// Create a `UInt` that captures the full value of `objectID`. >> public init(_ objectID: ObjectIdentifier) { >> self.init(Builtin.ptrtoint_Word(objectID._value)) >> } >> } >> >> extension Int { >> /// Create an `Int` that captures the full value of `objectID`. >> public init(_ objectID: ObjectIdentifier) { >> self.init(bitPattern: UInt(objectID)) >> } >> } >> >> This proposals suggest adding a label ‘bitPattern’ to the constructor: >> Int.init(bitPattern: ObjectIdentifier). >> >> extension UInt { >> /// Create a `UInt` that captures the full value of `objectID`. >> public init(bitPattern objectID: ObjectIdentifier) { >> self.init(Builtin.ptrtoint_Word(objectID._value)) >> } >> } >> >> extension Int { >> /// Create an `Int` that captures the full value of `objectID`. >> public init(bitPattern objectID: ObjectIdentifier) { >> self.init(bitPattern: UInt(objectID)) >> } >> } >> >> >> Motivation >> ========== >> >> Adding a label ‘bitPattern’ to the constructors makes it clear that we >> interpret the pointer value as a bit pattern at the use site. It is similar >> to what we do in other APIs, for example in "UInt(bitPattern: >> UnsafePointer<Void>(value)))" >> >> Impact on existing code >> ======================= >> >> Existing code will have to add the bitPattern label. >> >> >> Alternatives >> ============ >> >> Leave as is. >> _______________________________________________ >> swift-evolution mailing list >> [email protected] >> https://lists.swift.org/mailman/listinfo/swift-evolution > > _______________________________________________ > swift-evolution mailing list > [email protected] > https://lists.swift.org/mailman/listinfo/swift-evolution -- Dave _______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
