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, and we don't consider the library to be part of the core Swift language.

With the promised stabilization of the Swift ABI (currently moved to version 5.1 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 late 2019/early 2020, at this stage.

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

Review

  • SE-0318 Package Creation
  • SE-0317 async let bindings
  • SE-0316 Global actors
  • SE-0315 Placeholder types
  • SE-0314 AsyncStream and AsyncThrowingStream
  • SE-0312 Add indexed() and Collection conformances for enumerated() and `zip(_…
  • SE-0311 Task Local Values
  • SE-0304 Structured concurrency — (#85916)
  • SE-0292 Package Registry Service — (Not applicable)
  • SE-0270 Add Collection Operations on Noncontiguous Elements — (SBL)

Accepted

  • SE-0313 Improved control over actor isolation — (#85904)
  • SE-0309 Unlock existentials for all protocols
  • SE-0305 Package Manager Binary Target Improvements — (Not applicable)
  • SE-0303 Package Manager Extensible Build Tools — (Not applicable)
  • SE-0302 Sendable and @Sendable closures
  • SE-0301 Package Editor Commands — (Not applicable)
  • SE-0290 Unavailability Condition
  • SE-0288 Adding isPower(of:) to BinaryInteger(SBL)
  • SE-0283 Tuples Conform to Equatable, Comparable, and Hashable(SBL)
  • SE-0274 Concise magic file names(done)
  • SE-0246 Generic Math(s) Functions — (SBL)
  • SE-0220 count(where:)(done, .2633)
  • SE-0155 Normalize Enum Case Representation — (#81923)
  • SE-0153 Compensate for the inconsistency of @NSCopying's behaviour — (Not applicable)

Implemented for Swift 5.5

  • SE-0310 Effectful Read-only Properties
  • SE-0308 #if for postfix member expressions(done, .2631)
  • SE-0307 Allow interchangeable use of CGFloat and Double types
  • SE-0306 Actors — (#85904)
  • SE-0300 Continuations for interfacing async tasks with synchronous code
  • SE-0299 Extending Static Member Lookup in Generic Contexts
  • SE-0298 Async/Await: Sequences — (#85914)
  • SE-0297 Concurrency Interoperability with Objective-C
  • SE-0296 Async/await(done, .2629)
  • SE-0295 Codable synthesis for enums with associated values
  • SE-0293 Extend Property Wrappers to Function and Closure Parameters — (#85915)
  • SE-0291 Package Collections — (Not applicable)

Implemented for Swift 5.4

  • SE-0294 Declaring executable targets in Package Manifests — (Not applicable)
  • SE-0289 Result builders — (#85014)
  • SE-0287 Extend implicit member syntax to cover chains of member references(done)
  • SE-0284 Allow Multiple Variadic Parameters in Functions, Subscripts, and Initialize…(done)

Implemented for Swift 5.3

  • SE-0286 Forward-scan matching for trailing closures — (#85013)
  • SE-0285 Ease the transition to concise magic file strings(done)
  • SE-0282 Clarify the Swift memory consistency model ⚛︎ — (#84618)
  • SE-0281 @main: Type-Based Program Entry Points — (#84619)
  • SE-0280 Enum cases as protocol witnesses — (Not applicable)
  • SE-0279 Multiple Trailing Closures(done, .2531)
  • SE-0278 Package Manager Localized Resources — (Not applicable)
  • SE-0277 Float16 — (SBL)
  • SE-0276 Multi-Pattern Catch Clauses — (#83855)
  • SE-0272 Package Manager Binary Dependencies — (Not applicable)
  • SE-0271 Package Manager Resources — (Not applicable)
  • SE-0269 Increase availability of implicit self in @escaping closures when refer…(done, .2473)
  • SE-0268 Refine didSet Semantics — (Not applicable)
  • SE-0267 where clauses on contextually generic declarations — (#83755)
  • SE-0266 Synthesized Comparable conformance for enum types — (#79250)
  • SE-0263 Add a String Initializer with Access to Uninitialized Storage — (SBL)

Implemented for Swift 5.2

  • SE-0253 Callable values of user-defined nominal types — (#82278)
  • SE-0249 Key Path Expressions as Functions — (#82280)

Implemented for Swift 5.1

  • SE-0261 Identifiable Protocol(done, .2433)
  • SE-0260 Library Evolution for Stable ABIs(done)
  • SE-0258 Property Wrappers(done, .2629)
  • SE-0255 Implicit returns from single-expression functions(done)
  • SE-0254 Static and class subscripts(done)
  • SE-0252 Key Path Member Lookup — (#82279)
  • SE-0251 SIMD additions
  • SE-0248 String Gaps and Missing APIs — (SBL)
  • SE-0247 Contiguous Strings — (SBL)
  • SE-0245 Add an Array Initializer with Access to Uninitialized Storage — (SBL)
  • SE-0244 Opaque Result Types(done)
  • SE-0242 Synthesize default values for the memberwise initializer(done)
  • SE-0240 Ordered Collection Diffing — (SBL)
  • SE-0068 Expanding Swift Self to class members and value types(done)

Implemented for Swift 5

  • SE-0241 Deprecate String Index Encoded Offsets — (SBL)
  • SE-0239 Add Codable conformance to Range types — (SBL)
  • SE-0238 Package Manager Target Specific Build Settings — (Not applicable)
  • SE-0237 Introduce withContiguous{Mutable}StorageIfAvailable methods — (SBL)
  • SE-0236 Package Manager Platform Deployment Settings — (Not applicable)
  • SE-0235 Add Result to the Standard Library(done, .2353)
  • 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?'(done, .2371)
  • SE-0229 SIMD Vectors — (#81921)
  • SE-0228 Fix ExpressibleByStringInterpolation — (Not applicable)
  • SE-0227 Identity key path — (#81920)
  • SE-0225 Adding isMultiple to BinaryInteger(SBL)
  • SE-0224 Support 'less than' operator in compilation conditions(done, .2371)
  • SE-0221 Character Properties — (SBL)
  • SE-0219 Package Manager Dependency Mirroring — (Not applicable)
  • SE-0218 Introduce compactMapValues to Dictionary — (SBL)
  • SE-0216 Introduce user-defined dynamically "callable" types — (#81924)
  • 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 — (won't implement)
  • SE-0211 Add Unicode Properties to Unicode.Scalar(SBL)
  • SE-0200 Enhancing String Literals Delimiters to Support Raw Text(done, .2393)
  • SE-0192 Handling Future Enum Cases(done, .2393)

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… — (SBL)
  • 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(done)
  • SE-0174 Change RangeReplaceableCollection.filter to return Self(SBL)
  • 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(done)
  • 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 — (won't implement)
  • 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 — (Not applicable)
  • 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(done)
  • 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-0275 Allow more characters (like whitespaces and punctuations) for escaped ident…(done, .2531)
  • SE-0256 Introduce {Mutable}ContiguousCollection protocol — (SBL)
  • SE-0231 Optional Iteration
  • SE-0222 Lazy CompactMap Sequence — (SBL)
  • SE-0217 Introducing the !! "Unwrap or Die" operator to the Swift Standard Library(done, .2353)
  • 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-0042 Flattening the function type of unapplied method references — (Not applicable)
  • 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-0265 Offset-Based Access to Indices, Elements, and Slices — (SBL)
  • SE-0262 Demangle Function — (SBL)
  • SE-0259 Approximate Equality for Floating Point
  • SE-0257 Eliding commas from multiline expression lists — (#82859)
  • SE-0250 Swift Code Style Guidelines and Formatter
  • 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