Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
THE SAFETY OF UNSAFE SWIFT @RAYFIX ⚡ try! Swift Japan 2017 1
Slide 2
Slide 2 text
UB UNDEFINED BEHAVIOR 2
Slide 3
Slide 3 text
UNDEFINED SCHEDULE = 3
Slide 4
Slide 4 text
SWIFT SAFETY 4
Slide 5
Slide 5 text
WORKING WITH C PERFORMANCE LOW LEVEL 5
Slide 6
Slide 6 text
SWIFT POINTERS UnsafeMutableRawBufferPointer Mutable Raw Buffer 6
Slide 7
Slide 7 text
7
Slide 8
Slide 8 text
O(1) CONSTANT TIME LOOKUP DICTIONARIES AND SETS8
Slide 9
Slide 9 text
O(N) LINEAR TIME LOOKUP BAD HASH O(1) 9
Slide 10
Slide 10 text
struct Angle: Hashable { var radians: Double … var hashValue: Int { return radians.hashValue } } ANGLE 10
Slide 11
Slide 11 text
struct Point: Hashable { var x, y: Double var hashValue: Int { return x.hashValue ^ y.hashValue } } ^ COMPOSITION 11
Slide 12
Slide 12 text
struct Point: Hashable { var x, y: Double var hashValue: Int { return "\(x),\(y)".hashValue } } FAKE IT Heap Allocations are Expensive! 12
Slide 13
Slide 13 text
protocol HashAlgorithm { init() // 1 mutating func consume(bytes:) // 2 var finalValue: Int // 3 } ROBUST COMPOSITION13
Slide 14
Slide 14 text
struct FVN1AHash: HashAlgorithm { private var hash: UInt64 = 0xcbf29ce484222325 private let prime: UInt64 = 0x100000001b3 mutating func consume(bytes: S) where S.Iterator.Element == UInt8 { for byte in bytes { hash = (hash ^ UInt64(byte)) &* prime } } var finalValue: Int { return Int(truncatingBitPattern: hash) } } HASH ALGO AUTHORS14
Slide 15
Slide 15 text
var hashValue: Int { var hash = FVN1AHash() hash.consume(x) hash.consume(y) return hash.finalValue } SAFE EASY CLIENT CODE15
Slide 16
Slide 16 text
UNSAFE CODE SAFELY HIDDEN AWAY extension HashAlgorithm { mutating func consume(_ value: I) { var temp = value withUnsafeBytes(of: &temp) { rawBufferPointer in consume(bytes: rawBufferPointer) } } } 16
Slide 17
Slide 17 text
Safe, Swifty API for Users Safe Customization Points for Library Developers Well Tested Unsafe Code UNSAFE CODE SAFELY HIDDEN AWAY 17
Slide 18
Slide 18 text
18