[swift-dev] [RFC] UnsafeBytePointer API for In-Memory Layout

Jordan Rose jordan_rose at apple.com
Thu May 12 12:45:48 CDT 2016


> On May 12, 2016, at 10:44, Joe Groff <jgroff at apple.com> wrote:
> 
> 
>> On May 12, 2016, at 9:27 AM, Jordan Rose via swift-dev <swift-dev at swift.org <mailto:swift-dev at swift.org>> wrote:
>> 
>> 
>> - I’m uncomfortable with using the term “undefined behavior” as if it’s universally understood. Up until now we haven't formally had that notion in Swift, just “type safety” and “memory safety” and “invariant-preserving” and the like. Maybe we need it now, but I think it needs to be explicitly defined. (I’d actually talk to Dave about exactly what terms make the most sense for users.)
> 
> We do have undefined behavior, and use that term in the standard library docs where appropriate:
> 
> stdlib/public/core/Optional.swift-  /// `!` (forced unwrap) operator. However, in optimized builds (`-O`), no
> stdlib/public/core/Optional.swift-  /// check is performed to ensure that the current instance actually has a
> stdlib/public/core/Optional.swift-  /// value. Accessing this property in the case of a `nil` value is a serious
> stdlib/public/core/Optional.swift:  /// programming error and could lead to undefined behavior or a runtime
> stdlib/public/core/Optional.swift-  /// error.
> stdlib/public/core/Optional.swift-  ///
> stdlib/public/core/Optional.swift-  /// In debug builds (`-Onone`), the `unsafelyUnwrapped` property has the same
> --
> stdlib/public/core/StringBridge.swift-  /// The caller of this function guarantees that the closure 'body' does not
> stdlib/public/core/StringBridge.swift-  /// escape the object referenced by the opaque pointer passed to it or
> stdlib/public/core/StringBridge.swift-  /// anything transitively reachable form this object. Doing so
> stdlib/public/core/StringBridge.swift:  /// will result in undefined behavior.
> stdlib/public/core/StringBridge.swift-  @_semantics("self_no_escaping_closure")
> stdlib/public/core/StringBridge.swift-  func _unsafeWithNotEscapedSelfPointer<Result>(
> stdlib/public/core/StringBridge.swift-    _ body: @noescape (OpaquePointer) throws -> Result
> --
> stdlib/public/core/Unmanaged.swift-  /// reference's lifetime fixed for the duration of the
> stdlib/public/core/Unmanaged.swift-  /// '_withUnsafeGuaranteedRef' call.
> stdlib/public/core/Unmanaged.swift-  ///
> stdlib/public/core/Unmanaged.swift:  /// Violation of this will incur undefined behavior.
> stdlib/public/core/Unmanaged.swift-  ///
> stdlib/public/core/Unmanaged.swift-  /// A lifetime of a reference 'the instance' is fixed over a point in the
> stdlib/public/core/Unmanaged.swift-  /// programm if:

Those latter two are in stdlib-internal declarations. I think I have the same objection with using the term for 'unsafelyUnwrapped'.

Jordan

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-dev/attachments/20160512/c7058eb5/attachment.html>


More information about the swift-dev mailing list