Swift Evolution

Since Apple Swift went open source, we have of course been investigating and staying on top of the evolution of the Swift language, and are engaging with the Swift community. We plan to support future language changes to new versions of the Swift language in a timely fashion.

Without promising exact timelines, we'll continue to try to support all core Swift language changes for the closest upcoming release after they have been finalized, often before and sometimes shortly after they have shipped in Apple Swift. Of course details depend on the timelines for both Apple's releases and ours. We also try to kep the Swift Base Library reasonably in sync, although not all changes there are applicable to Elements, ad we don't consider the library to be part of the ore Swift language.

With the promised stabilization of the Swift ABI (currently moved to version 5.0 or beyond), we will also be looking at support for Swift as a platform rather than a language, allowing the consumption and creation of binaries that work at Apple Swift level on the Cocoa platform, rather than at the Objective-C level. This would be on the roadmap for a 2018/2019, at this stage.

Elements 10 Elements 9.3 and 9.2 introduce support for most relevant Swift 4.x features.
Elements 9.0 and later are fully up to date with Swift 3,

The list below is kept in sync with this overview on swift.org using this little tool. (sorted by ID).

Review

  • SE-0238 Package Manager Target Specific Build Settings — (Not applicable)
  • SE-0237 Introduce withUnsafe{Mutable}BufferPointerIfSupported methods
  • SE-0235 Add Result to the Standard Library — (SBL)

Accepted

  • SE-0236 Package Manager Platform Deployment Settings — (Not applicable)
  • SE-0229 SIMD Vectors
  • SE-0226 Package Manager Target Based Dependency Resolution — (Not applicable)
  • SE-0174 Change filter to return an associated type — (SBL)
  • SE-0155 Normalize Enum Case Representation
  • SE-0153 Compensate for the inconsistency of @NSCopying's behaviour
  • SE-0110 Distinguish between single-tuple and multiple-argument function types(done)
  • SE-0068 Expanding Swift Self to class members and value types(done)
  • SE-0042 Flattening the function type of unapplied method references — (Not applicable)

Implemented for Swift 5

  • SE-0234 Remove Sequence.SubSequence — (Not applicable)
  • SE-0233 Make Numeric Refine a new AdditiveArithmetic Protocol — (SBL)
  • SE-0232 Remove Some Customization Points from the Standard Library's Collection H… — (Not applicable)
  • SE-0230 Flatten nested optionals resulting from 'try?'
  • SE-0228 Fix ExpressibleByStringInterpolation — (Not applicable)
  • SE-0227 Identity key path
  • SE-0225 Adding isMultiple to BinaryInteger(SBL)
  • SE-0224 Support 'less than' operator in compilation conditions
  • SE-0221 Character Properties
  • SE-0220 count(where:)(SBL)
  • SE-0219 Package Manager Dependency Mirroring — (Not applicable)
  • SE-0218 Introduce compactMapValues to Dictionary — (SBL)
  • SE-0216 Introduce user-defined dynamically "callable" types — (#80536)
  • SE-0215 Conform Never to Equatable and Hashable — (won't implement)
  • SE-0214 Renaming the DictionaryLiteral type to KeyValuePairs — (Not applicable)
  • SE-0213 Literal initialization via coercion — (#80537)
  • SE-0211 Add Unicode Properties to Unicode.Scalar(SBL)
  • SE-0200 Enhancing String Literals Delimiters to Support Raw Text
  • SE-0192 Handling Future Enum Cases — (#80120)

Implemented for Swift 4.2

  • SE-0212 Compiler Version Directive — (Not applicable)
  • SE-0210 Add an offset(of:) method to MemoryLayout(SBL)
  • SE-0209 Package Manager Swift Language Version API Update — (Not applicable)
  • SE-0208 Package Manager System Library Targets — (Not applicable)
  • SE-0207 Add an allSatisfy algorithm to Sequence(SBL)
  • SE-0206 Hashable Enhancements — (SBL)
  • SE-0205 withUnsafePointer(to:_:) and withUnsafeBytes(of:_:) for immutable value…
  • SE-0204 Add last(where:) and lastIndex(where:) Methods — (SBL)
  • SE-0202 Random Unification — (SBL)
  • SE-0201 Package Manager Local Dependencies — (Not applicable)
  • SE-0199 Adding toggle to Bool(done, .2283)
  • SE-0197 Adding in-place removeAll(where:) to the Standard Library — (SBL)
  • SE-0196 Compiler Diagnostic Directives(done, .2283)
  • SE-0195 Introduce User-defined "Dynamic Member Lookup" Types — (#79673)
  • SE-0194 Derived Collection of Enum Cases(done, .2333)
  • SE-0193 Cross-module inlining and specialization — (Not applicable)
  • SE-0143 Conditional conformances(done)
  • SE-0079 Allow using optional binding to upgrade self from a weak to strong refere…
  • SE-0054 Abolish ImplicitlyUnwrappedOptional type — (Not applicable)

Implemented for Swift 4.1

  • SE-0198 Playground QuickLook API Revamp # — (Not applicable)
  • SE-0191 Eliminate IndexDistance from Collection(SBL)
  • SE-0190 Target environment platform condition(done, .2233)
  • SE-0189 Restrict Cross-module Struct Initializers(done)
  • SE-0188 Make Standard Library Index Types Hashable — (SBL)
  • SE-0187 Introduce Sequence.compactMap(_:) — (SBL)
  • SE-0186 Remove ownership keyword support in protocols(done, .2305)
  • SE-0185 Synthesizing Equatable and Hashable conformance — (#79250)
  • SE-0184 Unsafe[Mutable][Raw][Buffer]Pointer: add missing methods, adjust existing l… — (SBL)
  • SE-0157 Support recursive constraints on associated types — (#80045)
  • SE-0075 Adding a Build Configuration Import Test(done, .2307)

Implemented for Swift 4

  • SE-0183 Substring performance affordances — (SBL)
  • SE-0182 String Newline Escaping(done, 9.2)
  • SE-0181 Package Manager C/C++ Language Standard Support — (Not applicable)
  • SE-0180 String Index Overhaul — (SBL)
  • SE-0179 Swift run Command — (Not applicable)
  • SE-0178 Add unicodeScalars property to Character(SBL)
  • SE-0176 Enforce Exclusive Access to Memory — (#79251)
  • SE-0175 Package Manager Revised Dependency Resolution — (Not applicable)
  • SE-0173 Add MutableCollection.swapAt(_:_:)(SBL)
  • SE-0172 One-sided Ranges — (#77935)
  • SE-0171 Reduce with inout(SBL)
  • SE-0170 NSNumber bridging and Numeric types
  • SE-0169 Improve Interaction Between private Declarations and Extensions(done, .2305)
  • SE-0168 Multi-Line String Literals(done, 9.2)
  • SE-0167 Swift Encoders — (#78130)
  • SE-0166 Swift Archival & Serialization — (#78130)
  • SE-0164 Remove final support in protocol extensions(done)
  • SE-0163 String Revision: Collection Conformance, C Interop, Transcoding — (SBL)
  • SE-0162 Package Manager Custom Target Layouts — (Not applicable)
  • SE-0161 Smart KeyPaths: Better Key-Value Coding for Swift — (#79252)
  • SE-0160 Limiting @objc inference — (Not applicable)
  • SE-0158 Package Manager Manifest API Redesign — (Not applicable)
  • SE-0156 Class and Subtype existentials
  • SE-0154 Provide Custom Collections for Dictionary Keys and Values
  • SE-0150 Package Manager Support for branches — (Not applicable)
  • SE-0149 Package Manager Support for Top of Tree development — (Not applicable)
  • SE-0148 Generic Subscripts — (#80050)
  • SE-0146 Package Manager Product Definitions — (Not applicable)
  • SE-0142 Permit where clauses to constrain associated types — (#80051)
  • SE-0104 Protocol-oriented integers — (SBL)

Implemented for Swift 3.1

  • SE-0152 Package Manager Tools Version — (Not applicable)
  • SE-0151 Package Manager Swift Language Compatibility Version — (Not applicable)
  • SE-0147 Move UnsafeMutablePointer.initialize(from:) to UnsafeMutableBufferPointer
  • SE-0145 Package Manager Version Pinning — (Not applicable)
  • SE-0141 Availability by Swift version
  • SE-0082 Package Manager Editable Packages — (Not applicable)
  • SE-0080 Failable Numeric Conversion Initializers — (SBL)
  • SE-0045 Add prefix(while:) and drop(while:) to the stdlib — (SBL)

Implemented for Swift 3.0.1

  • SE-0140 Warn when Optional converts to Any, and bridge Optional As Its Payloa…
  • SE-0139 Bridge Numeric Types to NSNumber and Cocoa Structs to NSValue
  • SE-0138 UnsafeRawBufferPointer

Implemented for Swift 3

  • SE-0137 Avoiding Lock-In to Legacy Protocol Designs
  • SE-0136 Memory layout of values
  • SE-0135 Package Manager Support for Differentiating Packages by Swift version — (Not applicable)
  • SE-0134 Rename two UTF8-related properties on String — (SBL)
  • SE-0133 Rename flatten() to joined()(SBL)
  • SE-0131 Add AnyHashable to the standard library — (SBL)
  • SE-0130 Replace repeating Character and UnicodeScalar forms of String.init — (SBL)
  • SE-0129 Package Manager Test Naming Conventions — (Not applicable)
  • SE-0128 Change failable UnicodeScalar initializers to failable — (SBL)
  • SE-0127 Cleaning up stdlib Pointer and Buffer Routines — (Not applicable)
  • SE-0125 Remove NonObjectiveCBase and isUniquelyReferenced — (Not applicable)
  • SE-0124 Int.init(ObjectIdentifier) and UInt.init(ObjectIdentifier) should have … — (SBL)
  • SE-0121 Remove Optional Comparison Operators — (SBL)
  • SE-0120 Revise partition Method Signature — (SBL)
  • SE-0118 Closure Parameter Names and Labels — (#75885)
  • SE-0117 Allow distinguishing between public access and public overridability(done, 9.0)
  • SE-0116 Import Objective-C id as Swift Any type — (Not applicable)
  • SE-0115 Rename Literal Syntax Protocols
  • SE-0114 Updating Buffer "Value" Names to "Header" Names — (SBL)
  • SE-0113 Add integral rounding functions to FloatingPoint — (SBL)
  • SE-0112 Improved NSError Bridging — (#75888)
  • SE-0111 Remove type system significance of function argument labels(done, 9.0)
  • SE-0109 Remove the Boolean protocol
  • SE-0107 UnsafeRawPointer API — (SBL)
  • SE-0106 Add a macOS Alias for the OSX Platform Configuration Test(done, 9.0)
  • SE-0103 Make non-escaping closures the default(done, 9.0)
  • SE-0102 Remove @noreturn attribute and introduce an empty Never type(done, 9.0)
  • SE-0101 Reconfiguring sizeof and related functions into a unified MemoryLayout … — (SBL)
  • SE-0099 Restructuring Condition Clauses(done, 9.0)
  • SE-0096 Converting dynamicType from a property to an operator(done)
  • SE-0095 Replace protocol<P1,P2> syntax with P1 & P2 syntax
  • SE-0094 Add sequence(first:next:) and sequence(state:next:) to the stdlib(done, 8.3.95)
  • SE-0093 Adding a public base property to slices — (SBL)
  • SE-0092 Typealiases in protocols and protocol extensions
  • SE-0091 Improving operator requirements in protocols(done, .2307)
  • SE-0089 Renaming String.init<T>(_: T)(SBL)
  • SE-0088 Modernize libdispatch for Swift 3 naming conventions
  • SE-0086 Drop NS Prefix in Swift Foundation(done, 9.0)
  • SE-0085 Package Manager Command Names — (Not applicable)
  • SE-0081 Move where clause to end of declaration(done, 9.0)
  • SE-0077 Improved operator declarations — (#75872)
  • SE-0076 Add overrides taking an UnsafePointer source to non-destructive copying met… — (SBL)
  • SE-0072 Fully eliminate implicit bridging conversions from Swift — (Not applicable)
  • SE-0071 Allow (most) keywords in member references(done, 8.3.95)
  • SE-0070 Make Optional Requirements Objective-C-only — (Not applicable)
  • SE-0069 Mutability and Foundation Value Types — (SBL)
  • SE-0067 Enhanced Floating Point Protocols — (SBL)
  • SE-0066 Standardize function type argument syntax to require parentheses(done, 9.0)
  • SE-0065 A New Model for Collections and Indices — (#75177)
  • SE-0064 Referencing the Objective-C selector of property getters and setters(done, v10)
  • SE-0063 SwiftPM System Module Search Paths — (Not applicable)
  • SE-0062 Referencing Objective-C key-paths — (#75182)
  • SE-0061 Add Generic Result and Error Handling to autoreleasepool()(done, v10)
  • SE-0060 Enforcing order of defaulted parameters
  • SE-0059 Update API Naming Guidelines and Rewrite Set APIs Accordingly — (Not applicable)
  • SE-0057 Importing Objective-C Lightweight Generics(done)
  • SE-0055 Make unsafe pointer nullability explicit using Optional — (Not applicable)
  • SE-0053 Remove explicit use of let from Function Parameters — (Not applicable)
  • SE-0052 Change IteratorType post-nil guarantee — (SBL)
  • SE-0049 Move @noescape and @autoclosure to be type attributes(done, 9.0)
  • SE-0048 Generic Type Aliases(done, 9.0)
  • SE-0047 Defaulting non-Void functions so they warn on unused results(done, 9.0)
  • SE-0046 Establish consistent label behavior across all parameters including first l…(done, 9.0)
  • SE-0044 Import as member — (#74959)
  • SE-0043 Declare variables in 'case' labels with multiple patterns — (#74958)
  • SE-0040 Replacing Equal Signs with Colons For Attribute Arguments(done, 8.3.95)
  • SE-0039 Modernizing Playground Literals — (Not applicable)
  • SE-0038 Package Manager C Language Target Support — (Not applicable)
  • SE-0037 Clarify interaction between comments & operators(done, 9.0)
  • SE-0036 Requiring Leading Dot Prefixes for Enum Instance Member Implementations(done, 9.0)
  • SE-0035 Limiting inout capture to @noescape contexts — (won't implement)
  • SE-0034 Disambiguating Line Control Statements from Debugging Identifiers(done, 9.0)
  • SE-0033 Import Objective-C Constants as Swift Types — (#74782)
  • SE-0032 Add first(where:) method to Sequence(SBL)
  • SE-0031 Adjusting inout Declarations for Type Decoration(done, 9.0)
  • SE-0029 Remove implicit tuple splat behavior from function applications — (Not applicable)
  • SE-0025 Scoped Access Level(done, 9.0)
  • SE-0023 API Design Guidelines — (Not applicable)
  • SE-0019 Swift Testing — (Not applicable)
  • SE-0017 Change Unmanaged to use UnsafePointer — (Not applicable)
  • SE-0016 Add initializers to Int and UInt to convert from UnsafePointer and UnsafeMu… — (SBL)
  • SE-0008 Add a Lazy flatMap for Sequences of Optionals # — (SBL)
  • SE-0007 Remove C-style for-loops with conditions and incrementers(done, 8.3.95)
  • SE-0006 Apply API Guidelines to the Standard Library — (Not applicable)
  • SE-0005 Better Translation of Objective-C APIs Into Swift(done, 9.0)
  • SE-0004 Remove the ++ and -- operators(done, 8.3.95)
  • SE-0003 Removing var from Function Parameters(done, 9.0)
  • SE-0002 Removing currying func declaration syntax

Implemented for Swift 2.2

  • SE-0028 Modernizing Swift's Debugging Identifiers(done, 8.3.95)
  • SE-0022 Referencing the Objective-C selector of a method
  • SE-0021 Naming Functions with Argument Labels(done, v10)
  • SE-0020 Swift Language Version Build Configuration(done, 8.3)
  • SE-0015 Tuple comparison operators(done, .2305)
  • SE-0014 Constraining AnySequence.init(SBL)
  • SE-0011 Replace typealias keyword with associatedtype for associated type decla…(done, 8.3)
  • SE-0001 Allow (most) keywords as argument labels(done, 8.3)

Deferred

  • SE-0090 Remove .self and freely allow type references in expressions
  • SE-0083 Remove bridging conversion behavior from dynamic casts
  • SE-0078 Implement a rotate algorithm, equivalent to std::rotate() in C++
  • SE-0058 Allow Swift types to provide custom Objective-C representations
  • SE-0030 Property Behaviors
  • SE-0026 Abstract classes and methods
  • SE-0018 Flexible Memberwise Initialization

Rejected

  • SE-0231 Optional Iteration
  • SE-0222 Lazy CompactMap Sequence — (SBL)
  • SE-0217 Introducing the !! "Unwrap or Die" operator to the Swift Standard Library — (#80534)
  • SE-0203 Rename Sequence.elementsEqual — (SBL)
  • SE-0159 Fix Private Access Levels
  • SE-0144 Allow Single Dollar Sign as a Valid Identifier
  • SE-0132 Rationalizing Sequence end-operation names
  • SE-0123 Disallow coercion to optionals in operator arguments
  • SE-0122 Use colons for subscript declarations
  • SE-0119 Remove access modifiers from extensions
  • SE-0108 Remove associated type inference
  • SE-0105 Removing Where Clauses from For-In Loops
  • SE-0098 Lowercase didSet and willSet for more consistent keyword casing
  • SE-0097 Normalizing naming for "negative" attributes
  • SE-0087 Rename lazy to @lazy
  • SE-0084 Allow trailing commas in parameter lists and tuples
  • SE-0074 Implementation of Binary Search functions
  • SE-0073 Marking closures as executing exactly once
  • SE-0056 Allow trailing closures in guard conditions
  • SE-0041 Updating Protocol Naming Conventions for Conversions
  • SE-0027 Expose code unit initializers on String — (SBL)
  • SE-0024 Optional Value Setter ??=(done, 8.3)
  • SE-0013 Remove Partial Application of Non-Final Super Methods (Swift 2.2)
  • SE-0012 Add @noescape to public library API
  • SE-0010 Add StaticString.UnicodeScalarView — (SBL)
  • SE-0009 Require self for accessing instance members

Returned

  • SE-0223 Accessing an Array's Uninitialized Buffer — (SBL)
  • SE-0177 Add clamp(to:) to the stdlib — (SBL)

Withdrawn

  • SE-0126 Refactor Metatypes, repurpose T.self and Mirror
  • SE-0100 Add sequence-based initializers and merge methods to Dictionary — (SBL)
  • SE-0051 Conventionalizing stride semantics
  • SE-0050 Decoupling Floating Point Strides from Generic Implementations