Swift is a general-purpose programming language that’s approachable for newcomers and powerful for experts.

It is fast, more, safe, and a joy to write.

    SE-1

    Allow (most) keywords as argument labels

    Introduction

    Argument labels are an important part of the interface of a Swift function, describing what particular arguments to the function do and improvi...

    1. D

    SE-2

    Removing currying `func` declaration syntax

    Introduction

    Curried function declaration syntax func foo(x: Int)(y: Int) is of limited usefulness and creates a lot of language and implementation comple...

    1. J

    SE-3

    Removing `var` from Function Parameters

    Introduction

    There has been some confusion of semantics when a function parameter is marked as inout compared to var. Both give a mutable local copy of ...

    1. A

    SE-4

    Remove the `++` and `--` operators

    Introduction

    The increment/decrement operators in Swift were added very early in the development of Swift, as a carry-over from C. These were added without...

    1. C

    SE-5

    Better Translation of Objective-C APIs Into Swift

    Introduction

    This proposal describes how we can improve Swift's "Clang Importer", which is responsible for mapping C and Objective-C APIs into Swift, to tra...

    1. D

    SE-6

    Apply API Guidelines to the Standard Library

    Introduction

    [Swift API Design Guidelines][api-design-guidelines] being developed as part of Swift 3. It is important that the Standard Library is an exemp...

    1. D

    SE-7

    Remove C-style for-loops with conditions and incrementers

    Introduction

    The C-style for-loop appears to be a mechanical carry-over from C rather than a genuinely Swift-specific construct. It is rarely used and not...

    1. E

    SE-8

    Add a Lazy flatMap for Sequences of Optionals #

    Introduction

    Currently, the Swift standard library has two versions of flatMap. One which flattens a sequence of sequences after a transformation:

    
    
    1. O

    SE-9

    Require self for accessing instance members

    Introduction

    The current version of Swift (2.1) requires using self when accessing instance members in closures. The proposal suggests extending this to a...

    1. D

    SE-10

    Add StaticString.UnicodeScalarView

    Introduction

    There is no way to create a substring of a StaticString that is still typed as StaticString. There should be.

    [Swift Evolution Discussion ...

    1. L

    SE-11

    Replace `typealias` keyword with `associatedtype` for associated type declarations

    Introduction

    The typealias keyword is currently used to declare two kinds of types:

    1. Type Aliases (alternative name for an existing type)
    2. Associated...
    1. L

    SE-13

    Remove Partial Application of Non-Final Super Methods (Swift 2.2)

    Introduction

    Prior to Swift 2.2, calls to superclass methods like super.foo() in Native Swift classes were dispatched statically by recording a reference ...

    1. A

    SE-14

    Constraining `AnySequence.init`

    Introduction

    In order to allow AnySequence delegate calls to the underlying sequence, its initializer should have extra constraints.

    [Swift Evolution Dis...

    1. M

    SE-16

    Add initializers to Int and UInt to convert from UnsafePointer and UnsafeMutablePointer

    Introduction

    Just as users can create Unsafe[Mutable]Pointers from Ints and UInts, they should be able to create Ints and UInts from `Unsafe[Mutable]P...

    1. M

    SE-18

    Flexible Memberwise Initialization

    Introduction

    The Swift compiler is currently able to generate a memberwise initializer for use in some circumstances, however there are currently many limit...

    1. M

    SE-19

    Swift Testing

    Introduction

    Testing is an essential part of modern software development. Tight integration of testing into the Swift Package Manager will help ensure a sta...

    1. M

    SE-20

    Swift Language Version Build Configuration

    Introduction

    This proposal aims to add a new build configuration option to Swift 2.2: #if swift.

    Swift-evolution threads:

    • [Swift 2.2: #if swift languag...
    1. A

    SE-21

    Naming Functions with Argument Labels

    Introduction

    Swift includes support for first-class functions, such that any function (or method) can be placed into a value of function type. However, when...

    1. D

    SE-22

    Referencing the Objective-C selector of a method

    Introduction

    In Swift 2, Objective-C selectors are written as string literals (e.g., "insertSubview:aboveSubview:") in the type context of a Selector. T...

    1. D

    SE-23

    API Design Guidelines

    Introduction

    The design of commonly-used libraries has a large impact on the overall feel of a programming language. Great libraries feel like an extension ...

    1. D

    SE-24

    Optional Value Setter `??=`

    Introduction

    Introduce a new operator an "Optional Value Setter". If the optional is set via this operator then the new value is only set if there isn't an...

    1. J

    SE-25

    Scoped Access Level

    Introduction

    Scoped access level allows hiding implementation details of a class or a class extension at the class/extension level, instead of a file. It is...

    1. The proposal does not have any authors.

    SE-26

    Abstract classes and methods

    Introduction

    When developing framework and reusable code, we need to develop classes that are partially abstract with partial implementation. Protocol and ...

    1. The proposal does not have any authors.

    SE-27

    Expose code unit initializers on String

    Introduction

    Going back and forth from Strings to their byte representations is an important part of solving many problems, including object serialization, ...

    1. Z

    SE-28

    Modernizing Swift's Debugging Identifiers

    Introduction

    This proposal aims to eliminate Swift's use of "screaming snake case" like __FILE__ and `__FUNCTI...

    1. E

    SE-29

    Remove implicit tuple splat behavior from function applications

    Introduction

    Function call expressions (which include several syntactic forms that apply an argument list to something of function type) currently have a du...

    1. C

    SE-30

    Property Behaviors

    Introduction

    There are property implementation patterns that come up repeatedly. Rather than hardcode a fixed set of patterns into the compiler, we should p...

    1. J

    SE-31

    Adjusting `inout` Declarations for Type Decoration

    Introduction

    The inout keyword indicates copy-in/copy-out argument behavior. In its current implementation the keyword prepends argument names. We propose...

    1. J

    SE-32

    Add `first(where:)` method to `Sequence`

    Introduction

    Add a new extension method to Sequence called first(where:) that returns the found element.

    Discussion on swift-evolution started with a p...

    1. L

    SE-33

    Import Objective-C Constants as Swift Types

    Introduction

    Given a list of constants in an Objective-C file, add an attribute that will enable Swift to import them as either an Enum or a Struct, using `...

    1. J

    SE-34

    Disambiguating Line Control Statements from Debugging Identifiers

    Introduction

    In being accepted, Swift Evolution SE-0028 (0028-modernizing-debug-identifiers.md) overloads the use of #line to mean both an identifier that...

    1. E

    SE-35

    Limiting `inout` capture to `@noescape` contexts

    Introduction

    Swift's behavior when closures capture inout parameters and escape their enclosing context is a common source of confusion. We should disallo...

    1. J

    SE-36

    Requiring Leading Dot Prefixes for Enum Instance Member Implementations

    Introduction

    Enumeration cases are essentially static not instance type members. Unlike static members in structures and classes, enumeration cases can be m...

    1. E

    SE-37

    Clarify interaction between comments & operators

    Introduction

    There are several inconsistencies in how comments are treated when determining whether an operator is prefix, postfix, or infix. They are somet...

    1. J

    SE-38

    Package Manager C Language Target Support

    Introduction

    This is a proposal for adding initial package manager support for the C, C++, Objective-C, and Objective-C++ languages (henceforth, simply refe...

    1. D

    SE-39

    Modernizing Playground Literals

    Introduction

    Playground literals tokenize colors, files, and images. They provide drag-and-drop convenience and in-context visualizations that offer easy re...

    1. E

    SE-40

    Replacing Equal Signs with Colons For Attribute Arguments

    Introduction

    Attribute arguments are unlike other Swift language arguments. At the call site, they use = instead of colons to distinguish argument names f...

    1. E

    SE-41

    Updating Protocol Naming Conventions for Conversions

    Introduction

    We propose to expand and improve the naming conventions established by the API Guidelines and the standard library with regard to conversion re...

    1. M

    SE-42

    Flattening the function type of unapplied method references

    Introduction

    An unapplied method reference, such as Type.instanceMethod in the following example, currently produces a curried function value of type ...

    1. J

    SE-43

    Declare variables in 'case' labels with multiple patterns

    Introduction

    In Swift 2, it is possible to match multiple patterns in cases. However cases cannot contain multiple patterns if the case declares variables. ...

    1. A

    SE-44

    Import as member

    Introduction

    Swift imports C declarations, allowing Swift code to natively interact with C libraries and frameworks. But, such imported APIs do not feel nat...

    1. M

    SE-45

    Add prefix(while:) and drop(while:) to the stdlib

    Introduction

    Add 2 new Sequence functions prefix(while:) and drop(while:), with overrides as appropriate on Collection, LazySequenceProtocol, and ...

    1. L

    SE-46

    Establish consistent label behavior across all parameters including first labels

    Introduction

    We propose to normalize the first parameter declaration in methods and functions. In this proposal, first parameter declarations will match the...

    1. J

    SE-47

    Defaulting non-Void functions so they warn on unused results

    Introduction

    In Swift's current incarnation, annotating methods and functions with @warn_unused_result informs the compiler that a non-void return type *sh...

    1. E

    SE-49

    Move @noescape and @autoclosure to be type attributes

    Introduction

    This proposal suggests moving the existing @noescape and @autoclosure attributes from being declaration attributes on a parameter to being ...

    1. C

    SE-50

    Decoupling Floating Point Strides from Generic Implementations

    ...

    1. E

    SE-51

    Conventionalizing `stride` semantics

    ...

    1. E

    SE-52

    Change IteratorType post-nil guarantee

    Introduction

    Currently, the documentation for IteratorType.next() has the precondition that when calling next(), no preceding call to next() should ha...

    1. P

    SE-53

    Remove explicit use of `let` from Function Parameters

    Introduction

    Since function parameters are immutable by default, allowing function parameters to be explicitly labeled as let is a bit of a syntactic red...

    1. N

    SE-54

    Abolish `ImplicitlyUnwrappedOptional` type

    Introduction

    This proposal seeks to remove the ImplicitlyUnwrappedOptional type from the Swift type system and replace it with an IUO attribute on declara...

    1. C

    SE-55

    Make unsafe pointer nullability explicit using Optional

    Introduction

    In Objective-C, pointers (whether to objects or to a non-object type) can be marked as nullable or nonnull, depending on whether the pointe...

    1. J

    SE-57

    Importing Objective-C Lightweight Generics

    Introduction

    Objective-C's lightweight generics feature allows Objective-C classes to be parameterized on the types they work with, similarly to Swift's g...

    1. D

    SE-58

    Allow Swift types to provide custom Objective-C representations

    Introduction

    Provide an ObjectiveCBridgeable protocol that allows a Swift type to control how it is represented in Objective-C by converting into and back...

    1. R

    SE-60

    Enforcing order of defaulted parameters

    Introduction

    Swift generally follows in the Smalltalk/Objective-C tradition of compound method names with significant, order-sensitive argument labels, but ...

    1. J

    SE-61

    Add Generic Result and Error Handling to autoreleasepool()

    Introduction

    The autoreleasepool function in the standard library does not currently support a return value or error handling, making it difficult and err...

    1. T

    SE-62

    Referencing Objective-C key-paths

    Introduction

    In Objective-C and Swift, key-paths used by KVC and KVO are represented as string literals (e.g., "friend.address.streetName"). This proposal...

    1. D

    SE-63

    SwiftPM System Module Search Paths

    Introduction

    Swift is able to import C libraries in the same manner as Swift libraries.

    For this to occur the library must be represented by a clang modu...

    1. M

    SE-64

    Referencing the Objective-C selector of property getters and setters

    Introduction

    Proposal SE-0022 was accepted and implemented to provide a #selector expression to reference Objective-C method sel...

    1. D

    SE-65

    A New Model for Collections and Indices

    ...

    1. D

    SE-66

    Standardize function type argument syntax to require parentheses

    Introduction

    Function types in Swift use parentheses around their parameter list (aligning with the function declaration syntax, as well as the syntax used ...

    1. C

    SE-67

    Enhanced Floating Point Protocols

    Introduction

    The current FloatingPoint protocol is quite limited, and provides only a small subset of the features expected of an IEEE 754 conforming type. ...

    1. S

    SE-68

    Expanding Swift `Self` to class members and value types

    Introduction

    Within a class scope, Self means "the dynamic class of self". This proposal extends that courtesy to value types and to the bodies of class...

    1. E

    SE-69

    Mutability and Foundation Value Types

    Introduction

    One of the core principles of Swift is "mutability when you need it." This is espoused by Apple's official documentation about Swift:

    • [Value...
    1. T

    SE-70

    Make Optional Requirements Objective-C-only

    Introduction

    Swift currently has support for "optional" requirements in Objective-C protocols, to match with the corresponding feature of Objective-C. We do...

    1. D

    SE-72

    Fully eliminate implicit bridging conversions from Swift

    Introduction

    In Swift 1.2, we attempted to remove all implicit bridging conversions from the language. Unfortunately, problems with how the v1.2 compiler imp...

    1. J

    SE-73

    Marking closures as executing exactly once

    Introduction

    This proposal introduces an optional once argument to the @noescape attribute. The @noescape(once) attribute enforces that the closure do...

    1. F

    SE-74

    Implementation of Binary Search functions

    Introduction

    Swift does not offer any way to efficiently search sorted collections. This proposal seeks to add a few different functions that implement the ...

    1. L

    SE-75

    Adding a Build Configuration Import Test

    Introduction

    Expanding the build configuration suite to test for the ability to import certain modules was [first introduced](https://forums.swift.org/t/id...

    1. E

    SE-76

    Add overrides taking an UnsafePointer source to non-destructive copying methods on UnsafeMutablePointer

    Introduction

    UnsafeMutablePointer includes several methods to non-destructively copy elements from memory pointed to by another UnsafeMutablePointer ins...

    1. J

    SE-77

    Improved operator declarations

    Introduction

    Replace syntax of operator declaration, and replace numerical precedence with partial ordering of operators:

    // Before
    infix operator...
    
    1. A

    SE-78

    Implement a rotate algorithm, equivalent to std::rotate() in C++

    Introduction

    This proposal is to add rotation and in-place reversing methods to Swift's standard library collections.

    [Swift-evolution thread](https://foru...

    1. N

    SE-79

    Allow using optional binding to upgrade `self` from a weak to strong reference

    Introduction

    When working with escaping Swift closures, it is a common pattern to have the closure capture self weakly to avoid creating an object referen...

    1. E

    SE-80

    Failable Numeric Conversion Initializers

    Introduction

    Swift numeric types all currently have a family of conversion initializers. In many use cases they leave a lot to be desired. Initializing an...

    1. M

    SE-81

    Move `where` clause to end of declaration

    Introduction

    This proposal suggests moving the where clause to the end of the declaration syntax, but before the body, for readability reasons. It has bee...

    1. D

    SE-82

    Package Manager Editable Packages

    Introduction

    This is a proposal for changing the behavior for iterative development of a group of packages. In particular, we will change the default locati...

    1. D

    SE-83

    Remove bridging conversion behavior from dynamic casts

    Introduction

    Dynamic casts using as?, as!, and is are currently able to dynamically perform Cocoa bridging conversions, such as from String to `NSSt...

    1. J

    SE-84

    Allow trailing commas in parameter lists and tuples

    Introduction

    Swift permits trailing commas after the last element in array or dictionary literal. This proposal extends that to parameters and tuples.

    Orig...

    1. G

    SE-85

    Package Manager Command Names

    Introduction

    This is a proposal for changing the command names used for invoking the Swift package manager. Instead of hanging all functionality off of `swi...

    1. R

    SE-86

    Drop NS Prefix in Swift Foundation

    Introduction

    As part of Swift 3 API Naming and the introduction of Swift Core Libraries, we are dropping the NS prefix from key Foundation types in Sw...

    1. T

    SE-87

    Rename `lazy` to `@lazy`

    Introduction

    Make lazy declaration modifier an attribute by renaming it to @lazy. Example:

    struct ResourceManager {
      @lazy var resource: NSDa...
    
    1. A

    SE-88

    Modernize libdispatch for Swift 3 naming conventions

    Introduction

    The existing libdispatch module imports the C API almost verbatim. To move towards a more natural Swift interface and away from the C API, this...

    1. M

    SE-89

    Renaming `String.init<T>(_: T)`

    Introduction

    Swift's String type ships with a large number of initializers that take one unlabeled argument. One of these initializers, defined as `init<T...

    1. A

    SE-90

    Remove `.self` and freely allow type references in expressions

    Introduction

    Swift's grammar currently requires that type references only appear as part of a constructor call T(x) or member access T.x. To get the met...

    1. J

    SE-91

    Improving operator requirements in protocols

    Introduction

    When a type conforms to a protocol that declares an operator as a requirement, that operator must be implemented as a global function defined o...

    1. T

    SE-92

    Typealiases in protocols and protocol extensions

    Introduction

    This proposal is from the Generics Manifesto and brings the typealias...

    1. D

    SE-94

    Add sequence(first:next:) and sequence(state:next:) to the stdlib

    Introduction

    This proposal introduces sequence(first:next:) and sequence(state:next:), a pair of global functions that return (potentially-infinite) seq...

    1. L

    SE-95

    Replace `protocol<P1,P2>` syntax with `P1 & P2` syntax

    Introduction

    The current protocol&lt;&gt; construct, which defines an existential type consisting of zero or more protocols, should be replaced by an infix &amp; ...

    1. A

    SE-96

    Converting `dynamicType` from a property to an operator

    Introduction

    This proposal establishes dynamicType as a named operator rather than a property.

    Swift-evolution thread: [RFC: didset and willset](https://...

    1. E

    SE-97

    Normalizing naming for "negative" attributes

    Introduction

    This proposal normalizes naming for "negative" attributes by adopting a rule that replaces property names starting with no with adjectives ...

    1. E

    SE-98

    Lowercase `didSet` and `willSet` for more consistent keyword casing

    Introduction

    This proposal adopts consistent conjoined keyword lowercasing.

    Swift-evolution thread: [RFC: didset and willset](https://forums.swift.org/t/rf...

    1. E

    SE-99

    Restructuring Condition Clauses

    Introduction

    Swift condition clauses appear in guard, if, and while statements. This proposal re-architects the condition grammar to enable an arbitra...

    1. E

    SE-100

    Add sequence-based initializers and merge methods to Dictionary

    Introduction

    The Dictionary type should allow initialization from a sequence of (Key, Value) tuples and offer methods that merge a sequence of `(Key, Va...

    1. N

    SE-101

    Reconfiguring `sizeof` and related functions into a unified `MemoryLayout` struct

    Introduction

    This proposal addresses sizeof, sizeofValue, strideof, strideofValue, align, and alignOf. It discards the value-style standalone fu...

    1. E

    SE-102

    Remove `@noreturn` attribute and introduce an empty `Never` type

    Introduction

    We should remove the rarely-used @noreturn function type attribute and instead express functions that don't return in terms of a standard uni...

    1. J

    SE-103

    Make non-escaping closures the default

    Introduction

    The current default of closure arguments to functions (i.e., arguments to functions that themselves have function type such as (T) -&gt; U) is t...

    1. T

    SE-104

    Protocol-oriented integers

    Introduction

    This proposal cleans up Swifts integer APIs and makes them more useful for generic programming.

    The language has evolved in ways that affect i...

    1. D

    SE-105

    Removing Where Clauses from For-In Loops

    Introduction

    This proposal removes where clauses from for-in loops, where they are better expressed (and read) as guard conditions.

    Swift Evolution Dis...

    1. E

    SE-106

    Add a `macOS` Alias for the `OSX` Platform Configuration Test

    Introduction

    Starting in Sierra, Apple's Mac-based OS (OS X) will be renamed "macOS". All user-facing Swift APIs must go through Swift Evolution. While this...

    1. E

    SE-107

    UnsafeRawPointer API

    Introduction

    Swift enforces type safe access to memory and follows strict aliasing rules. However, code that uses unsafe APIs or imported types can circumve...

    1. A

    SE-109

    Remove the `Boolean` protocol

    Introduction

    For legacy and historical reasons Swift has supported a protocol named Boolean for abstracting over different concrete Boolean types. Thi...

    1. A

    SE-110

    Distinguish between single-tuple and multiple-argument function types

    Introduction

    Swift's type system should properly distinguish between functions that take one tuple argument, and functions that take multiple arguments.

    Di...

    1. The proposal does not have any authors.

    SE-111

    Remove type system significance of function argument labels

    Introduction

    Swift's type system should not allow function argument labels to be expressed as part of a function type.

    Discussion: [pre-proposal](https://f...

    1. The proposal does not have any authors.

    SE-112

    Improved NSError Bridging

    Introduction

    Swift's error handling model interoperates directly with Cocoa's NSError conventions. For example, an Objective-C method with an NSError** ...

    1. D

    SE-113

    Add integral rounding functions to FloatingPoint

    Introduction, Motivation

    The standard library lacks equivalents to the floor() and ceil() functions found in the standard libraries of most other langua...

    1. K

    SE-114

    Updating Buffer "Value" Names to "Header" Names

    Introduction

    This proposal updates parameters and generic type parameters from value names to header names for ManagedBuffer, ManagedProtoBuffer, an...

    1. E

    SE-115

    Rename Literal Syntax Protocols

    Introduction

    This proposal renames the *LiteralConvertible protocols to ExpressibleBy*Literal.

    Swift-evolution thread: [Literal Syntax Protocols](htt...

    1. M

    SE-116

    Import Objective-C `id` as Swift `Any` type

    Introduction

    Objective-C interfaces that use id and untyped collections should be imported into Swift as taking the Any type instead of AnyObject.

    Sw...

    1. J

    SE-117

    Allow distinguishing between public access and public overridability

    Introduction

    Since the first release of Swift, marking a class public has provided two capabilities: it allows other modules to instantiate and use the cl...

    1. J

    SE-118

    Closure Parameter Names and Labels

    Introduction

    We propose a revision to the names and argument labels of closure parameters in standard library APIs.

    Swift-evolution thread: [Take 2: Stdlib...

    1. D

    SE-119

    Remove access modifiers from extensions

    Introduction

    One great goal for Swift 3 is to sort out any source breaking language changes. This proposal aims to fix access modifier inconsistency on exte...

    1. A

    SE-120

    Revise `partition` Method Signature

    Introduction

    This proposal revises the signature for the collection partition algorithm. Partitioning is a foundational API for sorting and for searching th...

    1. L

    SE-121

    Remove `Optional` Comparison Operators

    Introduction

    Swift's Comparable protocol requires 4 operators, [&lt;, &lt;=, &gt;, and &gt;=](https:...

    1. J

    SE-122

    Use colons for subscript declarations

    Introduction

    Currently, subscript declarations follow the following model:

    subscript(externalName internalName: ParamType) -&gt; ElementType {
        get { … }
    ...
    
    1. J

    SE-123

    Disallow coercion to optionals in operator arguments

    Introduction

    Swift provides optional types as a means of achieving safety by making the notion of "having" or "not having" a value explicit. This requires ...

    1. M

    SE-124

    `Int.init(ObjectIdentifier)` and `UInt.init(ObjectIdentifier)` should have a `bitPattern:` label

    Introduction

    Int.init(ObjectIdentifier) and UInt.init(ObjectIdentifier) should have a 'bitPattern:’ label to make it clear at the use site that we inter...

    1. A

    SE-125

    Remove `NonObjectiveCBase` and `isUniquelyReferenced`

    Introduction

    Remove NonObjectiveCBase and isUniquelyReferenced&lt;T: NonObjectiveCBase&gt;(_ object: T). isUniquelyReferenced can be replaced by `isUniquely...

    1. A

    SE-126

    Refactor Metatypes, repurpose `T.self` and `Mirror`

    Introduction

    This proposal wants to revise metatypes T.Type, repurpose public T.self notation to return a new Type&lt;T&gt; type instance rather than a me...

    1. A

    SE-127

    Cleaning up stdlib Pointer and Buffer Routines

    Introduction

    This proposal deals with three routines and one class related to pointers and buffers. The goal of this proposal is to update the API to match ...

    1. C

    SE-128

    Change failable UnicodeScalar initializers to failable

    Introduction

    This proposal aims to change some UnicodeScalar initializers (ones that are non-failable) from non-failable to failable. i.e., in case a `Uni...

    1. X

    SE-129

    Package Manager Test Naming Conventions

    Introduction

    The Swift Package Manager uses a convention-based rather than a declarative approach for various aspects of package configuration. This is as ...

    1. A

    SE-130

    Replace repeating `Character` and `UnicodeScalar` forms of String.init

    Introduction

    This proposal suggest replacing String initializers taking Character or UnicodeScalar as a repeating value by a more general initializer that t...

    1. The proposal does not have any authors.

    SE-131

    Add `AnyHashable` to the standard library

    Introduction

    We propose to add a type-erased AnyHashable container to the standard library.

    The implementation of [SE-0116 "Import Objective-C id as Sw...

    1. D

    SE-132

    Rationalizing Sequence end-operation names

    Introduction

    Sequence and Collection offer many special operations which access or manipulate its first or last elements, but they are plagued by inconsis...

    1. B

    SE-133

    Rename `flatten()` to `joined()`

    Introduction

    Swift currently defines two similar functions, joined(separator:) and flatten(). joined(separator:) has a specialized implementation for ...

    1. J

    SE-134

    Rename two UTF8-related properties on String

    Introduction

    This proposal removes nulTerminatedUTF8 and renames nulTerminatedUTF8CString to enhance clarity and reduce mismatch between user expectatio...

    1. X

    SE-135

    Package Manager Support for Differentiating Packages by Swift version

    Introduction

    As new, source-incompatible versions of Swift come into use, there is a growing need for packages to be authored in a way that makes them usabl...

    1. A

    SE-136

    Memory layout of values

    Introduction

    This proposal is to introduce, as a bugfix, a replacement for sizeofValue(_:) and related functions.

    Swift-evolution thread: [MemoryLayout f...

    1. X

    SE-137

    Avoiding Lock-In to Legacy Protocol Designs

    Introduction

    We propose to deprecate or move protocols that shouldn't be a part of the standard library's public API going forward.

    Swift-evolution threads...

    1. D

    SE-139

    Bridge Numeric Types to `NSNumber` and Cocoa Structs to `NSValue`

    Introduction

    A handful of Swift numeric types are bridged to NSNumber when passed into Objective-C object contexts. We should extend this bridging behavio...

    1. J

    SE-140

    Warn when `Optional` converts to `Any`, and bridge `Optional` As Its Payload Or `NSNull`

    Introduction

    Optionals can be used as values of Any type. After SE-0116, this means you can pass an Optional to an Objective-C me...

    1. J

    SE-141

    Availability by Swift version

    Introduction

    Swift's existing @available(...) attribute indicates the lifecycle of a given declaration, either unconditionally or relative to a particular...

    1. G

    SE-142

    Permit where clauses to constrain associated types

    Introduction

    This proposal seeks to introduce a where clause to associated type declarations and improvements to protocol constraints to bring associated ...

    1. D

    SE-143

    Conditional conformances

    Introduction

    Conditional conformances express the notion that a generic type will conform to a particular protocol only when its type arguments meet certain...

    1. D

    SE-144

    Allow Single Dollar Sign as a Valid Identifier

    Introduction

    The mainline Swift compiler emits an error message when the $ character (U+0024) is used as an identifier by itself, which is a source breaki...

    1. A

    SE-145

    Package Manager Version Pinning

    Introduction

    This is a proposal for adding package manager features to "pin" or "lock" package dependencies to particular versions.

    Motivation

    As used ...

    1. D

    SE-146

    Package Manager Product Definitions

    Introduction

    This proposal introduces the concept of products to the Swift Package Manager, and proposes enhancements to the Package.swift syntax to let...

    1. A

    SE-147

    Move UnsafeMutablePointer.initialize(from:) to UnsafeMutableBufferPointer

    Introduction

    The version of UnsafeMutablePointer.initialize(from:) that takes a Collection should be deprecated in favor of a new method on `UnsafeMutab...

    1. B

    SE-148

    Generic Subscripts

    Introduction

    Make it possible to have generic subscripts. Example:

    extension Collection {
      subscript&lt;Indices: Sequence&gt;(indices: Indices) -&gt; [Ite...
    
    1. C

    SE-149

    Package Manager Support for Top of Tree development

    Introduction

    This proposal adds enhancements to swift package edit to support development of packages without strict versioning ("top of tree" development...

    1. B

    SE-150

    Package Manager Support for branches

    Introduction

    This proposal adds enhancements to the package manifest to support development of packages without strict versioning. This is one of two featur...

    1. B

    SE-151

    Package Manager Swift Language Compatibility Version

    Introduction

    This proposal adds support for the Swift compiler's new "language compatibility version" feature to the package manager.

    Motivation

    The Sw...

    1. D

    SE-152

    Package Manager Tools Version

    Introduction

    This proposal introduces a "Swift tools version" which is declared for each Swift package. The tools version declares the minimum version of th...

    1. R

    SE-153

    Compensate for the inconsistency of `@NSCopying`'s behaviour

    Introduction

    First of all, in Swift, the Objective-C copy property attribute translates to @NSCopying.

    Like Objective-C, in Swift, avoiding accessing i...

    1. T

    SE-154

    Provide Custom Collections for Dictionary Keys and Values

    Introduction

    This proposal addresses significant unexpected performance gaps when using dictionaries. It introduces type-specific collections for a `Diction...

    1. N

    SE-155

    Normalize Enum Case Representation

    Introduction

    In Swift 3, associated values of an enum case are represented by a tuple. This implementation causes inconsistencies in case declaration, const...

    1. The proposal does not have any authors.

    SE-156

    Class and Subtype existentials

    Introduction

    This proposal brings more expressive power to the type system by allowing Swift to represent existentials of classes and subtypes which conform...

    1. D

    SE-157

    Support recursive constraints on associated types

    Introduction

    This proposal lifts restrictions on associated types in protocols. Their constraints will be allowed to reference any protocol, including proto...

    1. D

    SE-158

    Package Manager Manifest API Redesign

    Introduction

    This is a proposal for redesigning the Package.swift manifest APIs provided by Swift Package Manager.
    This proposal only redesigns the exis...

    1. A

    SE-160

    Limiting `@objc` inference

    Introduction

    One can explicitly write @objc on any Swift declaration that can be expressed in Objective-C. As a convenience, Swift also infers @objc i...

    1. D

    SE-161

    Smart KeyPaths: Better Key-Value Coding for Swift

    Introduction

    We propose a family of concrete Key Path types that represent uninvoked references to properties that can be composed to form paths through ma...

    1. D

    SE-162

    Package Manager Custom Target Layouts

    Introduction

    This proposal enhances the Package.swift manifest APIs to support custom target layouts, and removes a convention which allowed omission of t...

    1. A

    SE-164

    Remove final support in protocol extensions

    Introduction

    This proposal disallows the final keyword when declaring functions in protocol extensions.

    *Discussion took place on the Swift Evolution mai...

    1. B

    SE-165

    Dictionary & Set Enhancements

    Introduction

    This proposal comprises a variety of commonly (and less commonly) suggested improvements to the standard library's Dictionary type, from merg...

    1. N

    SE-166

    Swift Archival & Serialization

    Introduction

    Foundation's current archival and serialization APIs (NSCoding, NSJSONSerialization, NSPropertyListSerialization, etc.), while fitting fo...

    1. I

    SE-167

    Swift Encoders

    Introduction

    As part of the proposal for a Swift archival and serialization API (SE-0166), we are also proposing new...

    1. I

    SE-168

    Multi-Line String Literals

    Introduction

    This proposal introduces multi-line string literals to Swift source code. This has been discussed a few times on swift-evolution most recently ...

    1. J

    SE-169

    Improve Interaction Between `private` Declarations and Extensions

    Introduction

    In Swift 3, a declaration marked private may be accessed by anything nested in the scope of the private declaration. For example, a private p...

    1. D

    SE-170

    NSNumber bridging and Numeric types

    Introduction

    NSNumber has been a strange duck in the Swift world especially when it has come to bridging and interacting with other protocols. An attempt ...

    1. P

    SE-171

    Reduce with `inout`

    Introduction

    A new variant of reduce should be added to the standard library. Instead of taking a combine function that is of type `(A, Iterator.Element...

    1. C

    SE-172

    One-sided Ranges

    Introduction

    This proposal introduces the concept of a "one-sided" range, created via prefix/postfix versions of the existing range operators.

    It also int...

    1. B

    SE-173

    Add `MutableCollection.swapAt(_:_:)`

    Introduction

    As part of the introduction of the Law of Exclusivity, the current swap(_:_:) function must be addressed, as this most common uses of swap ...

    1. B

    SE-174

    Change `RangeReplaceableCollection.filter` to return `Self`

    Introduction

    This proposal implements the filter operation on RangeReplaceableCollection to return the same type as the filtered collection.

    Motivat...

    1. B

    SE-175

    Package Manager Revised Dependency Resolution

    Introduction

    This proposal makes the package manager's dependency resolution behavior clearer and more intuitive. It removes the pinning commands (`swift pac...

    1. R

    SE-176

    Enforce Exclusive Access to Memory

    Introduction

    In Swift 3, it is possible to modify a variable while it's being used or modified by another part of the program. This can lead to unexpected ...

    1. J

    SE-177

    Add clamp(to:) to the stdlib

    Introduction

    This proposal aims to add functionality to the standard library for clamping a value to a provided Range. The proposed function would allow t...

    1. N

    SE-178

    Add `unicodeScalars` property to `Character`

    Introduction

    This proposal adds a unicodeScalars view to Character, similar to that on String.

    Motivation

    The Character element type of `String...

    1. B

    SE-179

    Swift `run` Command

    Introduction

    The proposal introduces a new swift run command to build and run an executable defined in the current package.

    Motivation

    It is common t...

    1. D

    SE-180

    String Index Overhaul

    Introduction

    Today String shares an Index type with its CharacterView but not with its UTF8View, UTF16View, or UnicodeScalarView. This proposal...

    1. D

    SE-181

    Package Manager C/C++ Language Standard Support

    Introduction

    This proposal adds support for declaring the language standard for C and C++ targets in a SwiftPM package.

    Motivation

    The C++ language sta...

    1. A

    SE-182

    String Newline Escaping

    Introduction

    This proposal is a refinement of SE-0168 which introduces the ability to escape newlines in single and mu...

    1. J

    SE-183

    Substring performance affordances

    Introduction

    This proposal modifies a small number of methods in the standard library that are commonly used with the Substring type:

    • Modify the `init...
    1. B

    SE-185

    Synthesizing `Equatable` and `Hashable` conformance

    Introduction

    Developers have to write large amounts of boilerplate code to support equatability and hashability of complex types. This proposal offers a way...

    1. T

    SE-186

    Remove ownership keyword support in protocols

    Introduction

    This proposal removes support for the keywords weak and unowned for property declarations in a protocol.

    Swift-evolution thread: [Ownershi...

    1. G

    SE-187

    Introduce Sequence.compactMap(_:)

    Introduction

    We propose to deprecate the controversial version of a Sequence.flatMap method and provide the same functionality under a different, and pote...

    1. M

    SE-188

    Make Standard Library Index Types Hashable

    Introduction

    Key-path expressions can now include subscripts to reference individual positions in collections and other subscriptable types, but only when t...

    1. N

    SE-189

    Restrict Cross-module Struct Initializers

    Introduction

    Adding a property to a public struct in Swift ought to not be a source-breaking change. However, a client in another target can currently exten...

    1. J

    SE-190

    Target environment platform condition

    Introduction

    This proposal introduces a platform condition to differentiate device and simulator builds. This condition subsumes a common pattern of conditi...

    1. E

    SE-191

    Eliminate `IndexDistance` from `Collection`

    Introduction

    Eliminate the associated type IndexDistance from Collection, and modify all uses to the concrete type Int instead.

    Motivation

    `Colle...

    1. B

    SE-192

    Handling Future Enum Cases

    Introduction

    Currently, adding a new case to an enum is a source-breaking change, something that's at odds with Apple's established process for evolving API...

    1. J

    SE-193

    Cross-module inlining and specialization

    Introduction

    We propose introducing a pair of new attributes, @inlinable and @usableFromInline. The @inlinable attribute exports the body of a functio...

    1. S

    SE-194

    Derived Collection of Enum Cases

    Introduction

    > *It is a truth universally acknowledged, that a programmer in possession of an enum with many cases, must eventually be in want of dynamic ...

    1. J

    SE-195

    Introduce User-defined "Dynamic Member Lookup" Types

    Introduction

    This proposal introduces a new @dynamicMemberLookup attribute. Types that use it provide "dot" syntax for arbitrary names which are resolved...

    1. C

    SE-196

    Compiler Diagnostic Directives

    Introduction

    This proposal introduces #warning and #error directives that will cause the Swift compiler to emit a custom warning or an error during comp...

    1. H

    SE-197

    Adding in-place `removeAll(where:)` to the Standard Library

    Introduction

    It is common to want to remove all occurrences of a certain element from a collection. This proposal is to add a removeAll algorithm to the s...

    1. B

    SE-198

    Playground QuickLook API Revamp #

    Introduction

    The standard library currently includes API which allows a type to customize its description in Xcode playgrounds and Swift Playgrounds. Thi...

    1. C

    SE-199

    Adding `toggle` to `Bool`

    Introduction

    I propose adding a mutating func toggle to Bool. It toggles the Bool.

    • Swift-evolution thread: [Discussion thread topic for that propos...
    1. C

    SE-200

    Enhancing String Literals Delimiters to Support Raw Text

    Introduction

    Like many computer languages, Swift uses an escape character (\) to create a special interpretation of subsequent characters within a string ...

    1. J

    SE-201

    Package Manager Local Dependencies

    Introduction

    This proposal adds a new API in PackageDescription to support declaring dependency on a package using its path on disk instead of the git URL...

    1. A

    SE-202

    Random Unification

    Introduction

    This proposal's main focus is to create a unified random API, and a secure random API for all platforms.

    *This idea has been floating around s...

    1. A

    SE-203

    Rename Sequence.elementsEqual

    Introduction

    The behavior of Sequence.elementsEqual is confusing to users given its name. Having surveyed alternative solutions to this problem, it is pro...

    1. X

    SE-204

    Add `last(where:)` and `lastIndex(where:)` Methods

    Introduction

    The standard library should include methods for finding the last element in a sequence, and the index of the last element in a collection, that...

    1. N

    SE-205

    `withUnsafePointer(to:_:)` and `withUnsafeBytes(of:_:)` for immutable values

    Introduction

    We propose to extend the toplevel withUnsafePointer(to:_:) and withUnsafeBytes(of:_:) functions to work with read-only values.

    Swift-evolu...

    1. J

    SE-207

    Add an `allSatisfy` algorithm to `Sequence`

    Introduction

    It is common to want to confirm that every element of a sequence equals a value, or matches certain criteria. Many implementations of this can ...

    1. B

    SE-208

    Package Manager System Library Targets

    Introduction

    This proposal introduces a new type of target "system library target", which moves the current system-module packages feature from package to t...

    1. A

    SE-209

    Package Manager Swift Language Version API Update

    Introduction

    This proposal changes the current Package.swift manifest API for declaring for Swift language versions from freeform Integer array to a new `...

    1. A

    SE-210

    Add an `offset(of:)` method to `MemoryLayout`

    Introduction

    This proposal introduces the ability for Swift code to query the in-memory layout of stored properties in aggregates using key paths. Like the ...

    1. J

    SE-211

    Add Unicode Properties to `Unicode.Scalar`

    Introduction

    We propose adding a number of properties to the Unicode.Scalar type to support both common and advanced text processing use cases, filling in...

    1. T

    SE-212

    Compiler Version Directive

    Introduction

    This proposal introduces a compiler directive that is syntactically equivalent to the #if swift version check but checks against the versio...

    1. D

    SE-213

    Literal initialization via coercion

    Introduction

    T(literal) should construct T using the appropriate literal protocol if possible.

    Swift-evolution thread: [Literal initialization via coerci...

    1. P

    SE-215

    Conform `Never` to `Equatable` and `Hashable`

    Introduction

    Extend Never so it conforms to Equatable and Hashable.

    Swift-evolution thread: [Conform Never to Equatable and Hashable](https://forums.s...

    1. M

    SE-217

    Introducing the `!!` "Unwrap or Die" operator to the Swift Standard Library

    Introduction

    This proposal introduces an annotating forced-unwrapping operator to the Swift standard library. It augments the ?, ??, and ! family, add...

    1. The proposal does not have any authors.

    SE-218

    Introduce `compactMapValues` to Dictionary

    Introduction

    This proposal adds a combined filter/map operation to Dictionary, as a companion to the mapValues and filter methods introduced by [SE-0165...

    1. D

    SE-219

    Package Manager Dependency Mirroring

    Introduction

    A dependency mirror refers to an alternate source location which exactly replicates the contents of the original source. This is a proposal for...

    1. A

    SE-220

    `count(where:)`

    Introduction

    While Swift's Sequence models brings a lot of niceties that we didn't have access to in Objective-C, like map and filter, there are other...

    1. S

    SE-222

    Lazy CompactMap Sequence

    Introduction

    Chaining multiple .map()s and .filter()s on a lazy collection leads to suboptimal codegen, as well as large, painful type names. To improve...

    1. T

    SE-223

    Accessing an Array's Uninitialized Buffer

    Introduction

    This proposal suggests a new initializer and method for Array and ContiguousArray that provide access to an array's uninitialized storage b...

    1. N

    SE-225

    Adding `isMultiple` to `BinaryInteger`

    Introduction

    This proposal adds var isEven: Bool, var isOdd: Bool, and func isMultiple(of other: Self) -&gt; Bool to the BinaryInteger protocol. `isEve...

    1. R

    SE-226

    Package Manager Target Based Dependency Resolution

    Introduction

    This is a proposal for enhancing the package resolution process to resolve the minimal set of dependencies that are used in a package graph.

    #...

    1. A

    SE-227

    Identity key path

    Introduction

    Add the ability to reference the identity key path, which refers to the entire input value it is applied to.

    Swift-evolution thread: [Some sma...

    1. J

    SE-228

    Fix `ExpressibleByStringInterpolation`

    Introduction

    String interpolation is a simple and powerful feature for expressing complex, runtime-created strings, but the current version of the `Expressi...

    1. B

    SE-229

    SIMD Vectors

    Introduction

    This proposal would expose a common subset of operations on the SIMD types supported by most processors in the standard library. It is based on...

    1. S

    SE-230

    Flatten nested optionals resulting from 'try?'

    Introduction

    Swift's try? statement currently makes it easy to introduce a nested optional. Nested optionals are difficult for users to reason about, and...

    1. B

    SE-231

    Optional Iteration

    Introduction

    Optionals are a key feature of Swift and a powerful tool that seamlessly interacts with code. In particular, they serve a great means in expres...

    1. A

    SE-232

    Remove Some Customization Points from the Standard Library's `Collection` Hierarchy

    Introduction

    This proposal removes four customization points from protocols in the standard library:

    • map, filter, and forEach from Sequence
    • `fi...
    1. B

    SE-233

    Make `Numeric` Refine a new `AdditiveArithmetic` Protocol

    Introduction

    This proposal introduces a weakening of the existing Numeric protocol named AdditiveArithmetic , which defines additive arithmetic opera...

    1. R

    SE-234

    Remove `Sequence.SubSequence`

    Introduction

    This proposal recommends eliminating the associated type from Sequence, moving it up to start at Collection. Current customization points o...

    1. B

    SE-235

    Add Result to the Standard Library

    Introduction

    Swift's current error-handling, using throws, try, and catch, offers automatic and synchronous handling of errors through explicit syntax...

    1. J

    SE-236

    Package Manager Platform Deployment Settings

    Introduction

    This is a proposal for adding support for specifying a per-platform minimum required deployment target in the Package.swift manifest file.

    #...

    1. A

    SE-237

    Introduce `withContiguous{Mutable}StorageIfAvailable` methods

    Introduction

    This proposal introduces two new methods, on Sequence and MutableCollection. These methods will allow generic code to make use of the `with...

    1. B

    SE-238

    Package Manager Target Specific Build Settings

    Introduction

    This is a proposal for adding support for declaring some commonly used target-specific build settings in the Package.swift manifest file. As ...

    1. A

    SE-239

    Add Codable conformance to Range types

    Introduction

    SE-0167 introduced Codable conformance for some types in the standard library, but not the Range family of types....

    1. D

    SE-240

    Ordered Collection Diffing

    Introduction

    This proposal describes additions to the standard library that provide an interchange format for diffs as well as diffing/patching functionalit...

    1. S

    SE-241

    Deprecate String Index Encoded Offsets

    Introduction

    [SE-0180][] introduced a computed variable and initializer surrounding the concept of an encodedOffset for serialization purposes. Unfortunat...

    1. M

    SE-242

    Synthesize default values for the memberwise initializer

    Introduction

    This proposal aims to solve a simple outstanding problem with the way the Swift compiler currently synthesizes the memberwise initializer for s...

    1. A

    SE-243

    Integer-convertible character literals

    Introduction

    Swift’s String type is designed for Unicode correctness and abstracts away the underlying binary representation of the string to model it as ...

    1. D

    SE-244

    Opaque Result Types

    Introduction

    This proposal is the first part of a group of changes we're considering in a [design document for improving the UI of the generics model](https...

    1. D

    SE-245

    Add an Array Initializer with Access to Uninitialized Storage

    Introduction

    This proposal suggests a new initializer for Array and ContiguousArray that provides access to an array's uninitialized storage buffer.

    Sw...

    1. N

    SE-246

    Generic Math(s) Functions

    Introduction

    This proposal introduces two new protocols to the standard library: ElementaryFunctions and Real. These protocols combine to provide "basic...

    1. S

    SE-247

    Contiguous Strings

    Introduction

    One of the most common API requests from performance-minded users of string is a way to get direct access to the raw underlying code units. Now...

    1. M

    SE-248

    String Gaps and Missing APIs

    Introduction

    String and related types are missing trivial and obvious functionality, much of which currently exists internally but has not been made API. We...

    1. M

    SE-249

    Key Path Expressions as Functions

    Introduction

    This proposal introduces the ability to use the key path expression \Root.value wherever functions of (Root) -&gt; Value are allowed.

    Swift-e...

    1. S

    SE-250

    Swift Code Style Guidelines and Formatter

    Introduction

    We propose that the Swift project adopt a set of code style guidelines and provide a formatting tool that lets users easily diagnose and update...

    1. T

    SE-251

    SIMD additions

    Introduction

    Early adopters of SIMD types and protocols have encountered a few missing things as they've started to write more code that uses them. In addit...

    1. S

    SE-252

    Key Path Member Lookup

    Introduction

    This proposal attempts to enable stronger-typed version of the dynamic member lookup by extending functionality of an existing `@dynamicMemberL...

    1. D

    SE-253

    Callable values of user-defined nominal types

    Introduction

    This proposal introduces "statically" callable values to Swift. Callable values are values...

    1. R

    SE-254

    Static and class subscripts

    Introduction

    We propose allowing static subscript and, in classes, class subscript declarations. These could be used through either TypeName[index] or...

    1. B

    SE-255

    Implicit returns from single-expression functions

    Introduction

    Swift provides a pleasant shorthand for short closures: if a closure contains just a single expression, that expression is implicitly returned-...

    1. N

    SE-256

    Introduce `{Mutable}ContiguousCollection` protocol

    Introduction

    This proposal introduces two new protocols: ContiguousCollection, which refines Collection, and MutableContiguousCollection, which refine...

    1. B

    SE-257

    Eliding commas from multiline expression lists

    ...

    1. N

    SE-258

    Property Wrappers

    Introduction

    There are property implementation patterns that come up repeatedly. Rather than hardcode a fixed set of patterns into the compiler (as we have ...

    1. D

    SE-259

    Approximate Equality for Floating Point

    Introduction

    The internet is full advice about what not to do when comparing floating-point values:

    • "Never compare floats for equality."
    • "Always use an...
    1. S

    SE-260

    Library Evolution for Stable ABIs

    Introduction

    One of Swift's goals is to be a good language for libraries with binary compatibility concerns, such as those shipped as part of Apple's OSs. T...

    1. J

    SE-261

    Identifiable Protocol

    Introduction

    This proposal introduces an Identifiable protocol, a general concept that is broadly useful— for diff algorithms, user interface libraries, a...

    1. M

    SE-262

    Demangle Function

    Introduction

    Introduce a new standard library function, demangle, that takes a mangled Swift symbol, like $sSS7cStringSSSPys4Int8VG_tcfC, and output the...

    1. A

    SE-263

    Add a String Initializer with Access to Uninitialized Storage

    Introduction

    This proposal suggests a new initializer for String that provides access to a String's uninitialized storage buffer.

    Motivation

    String...

    1. D

    SE-264

    Standard Library Preview Package

    Introduction

    We propose changing the Swift Evolution process to publish accepted proposals as individual SwiftPM packages, as well as a SwiftPreview packa...

    1. B

    SE-265

    Offset-Based Access to Indices, Elements, and Slices

    Introduction

    This proposal introduces OffsetBound, which can represent a position in a collection specified as an offset from either the beginning or end ...

    1. M

    SE-266

    Synthesized `Comparable` conformance for `enum` types

    Introduction

    SE-185 introduced synthesized, opt-in `...

    1. D

    SE-267

    `where` clauses on contextually generic declarations

    Introduction

    This proposal aims to lift the restriction on attaching where clauses to member declarations that can reference only outer generic parameters...

    1. A

    SE-268

    Refine `didSet` Semantics

    Introduction

    Introduce two changes to didSet semantics -

    1. If a didSet observer does not reference the oldValue in its body, then the call to fetch...
    1. S

    SE-269

    Increase availability of implicit `self` in `@escaping` closures when reference cycles are unlikely to occur

    Introduction

    Modify the rule that all uses of self in escaping closures must be explicit by allowing for implicit uses of self in situations where the u...

    1. F

    SE-270

    Add Collection Operations on Noncontiguous Elements

    Introduction

    We can use a Range&lt;Index&gt; to refer to a group of consecutive positions in a collection, but the standard library doesn't currently provide a ...

    1. N

    SE-271

    Package Manager Resources

    Introduction

    Packages should be able to contain images, data files, and other resources needed at runtime. This proposal describes SwiftPM support for spec...

    1. A

    SE-272

    Package Manager Binary Dependencies

    Introduction

    SwiftPM currently supports source-only packages for several languages, and with a very proscriptive build model which considerably limits exact...

    1. B

    SE-273

    Package Manager Conditional Target Dependencies

    Introduction

    This proposal introduces the ability for Swift package authors to conditionalize target dependencies on platform and configuration with a simil...

    1. D

    SE-274

    Concise magic file names

    Introduction

    Today, #file evaluates to a string literal containing the full path to the current source file. We propose to instead have it evaluate to a h...

    1. B

    SE-275

    Allow more characters (like whitespaces and punctuations) for escaped identifiers

    Introduction

    Swift has a beautiful concise yet expressive syntax. As part of that, escaped identifiers are adopted to allow usage of reserved keywords. This ...

    1. A

    SE-276

    Multi-Pattern Catch Clauses

    Introduction

    Currently, each catch clause in a do-catch statement may only contain a single pattern and where clause. This is inconsistent with the behavior...

    1. O

    SE-277

    Float16

    Introduction

    Introduce the Float16 type conforming to the BinaryFloatingPoint and SIMDScalar protocols, binding the IEEE 754 binary16 format (aka *f...

    1. S

    SE-278

    Package Manager Localized Resources

    Introduction

    This proposal builds on top of the Package Manager Resources proposal to allow defining localized versions...

    1. D

    SE-280

    Enum cases as protocol witnesses

    Introduction

    The aim of this proposal is to lift an existing restriction, which is that enum cases cannot participate in protocol witness matching.

    Swift-e...

    1. S

    SE-281

    `@main`: Type-Based Program Entry Points

    Introduction

    A Swift language feature for designating a type as the entry point for beginning program execution. Instead of writing top-level code, users ca...

    1. N

    SE-282

    Clarify the Swift memory consistency model ⚛︎

    Introduction

    This proposal adopts a C/C++-style weak concurrency memory model in Swift, describing how Swift code interoperates with concurrency primitives ...

    1. K

    SE-283

    Tuples Conform to `Equatable`, `Comparable`, and `Hashable`

    Introduction

    Introduce Equatable, Comparable, and Hashable conformance for all tuples whose elements are themselves Equatable, Comparable, and `Ha...

    1. A

    SE-284

    Allow Multiple Variadic Parameters in Functions, Subscripts, and Initializers

    Introduction

    Currently, variadic parameters in Swift are subject to two main restrictions:

    • Only one variadic parameter is allowed per parameter list
    • If...
    1. O

    SE-285

    Ease the transition to concise magic file strings

    Introduction

    In [SE-0274][], the core team accepted a proposal to change the behavior of #file. This proposal modifies that plan to transition into new be...

    1. B

    SE-287

    Extend implicit member syntax to cover chains of member references

    Introduction

    When the type of an expression is implied by the context, Swift allows developers to use what is formally referred to as an "implicit member ex...

    1. F

    SE-288

    Adding `isPower(of:)` to `BinaryInteger`

    Introduction

    Checking some mathematical properties of integers (e.g. parity, divisibility, etc.) is widely used in scientific and engineering applications. ...

    1. D

    SE-289

    Result builders

    Introduction

    This proposal describes result builders, a new feature which allows certain functions (specially-annotated, often via context) to implicitly ...

    1. J

    SE-290

    Unavailability Condition

    Introduction

    Swift historically supported the #available condition to check if a specific symbol is available for usage, but not the opposite. In this...

    1. B

    SE-291

    Package Collections

    Introduction

    This is a proposal for adding support for Package Collections to SwiftPM. A package collection is a curated list of packages and associated...

    1. B

    SE-292

    Package Registry Service

    Introduction

    Swift Package Manager downloads dependencies using Git. Our proposal defines a standard web service interface that it can also use to download ...

    1. The proposal does not have any authors.

    SE-294

    Declaring executable targets in Package Manifests

    Introduction

    This proposal lets Swift Package authors declare targets as executable in the package manifest. This replaces the current approach of inferring...

    1. A

    SE-295

    Codable synthesis for enums with associated values

    Introduction

    Codable was introduced in SE-0166 with s...

    1. D

    SE-296

    Async/await

    Introduction

    Modern Swift development involves a lot of asynchronous (or "async") programming using closures and completion handlers, but these APIs are har...

    1. J

    SE-297

    Concurrency Interoperability with Objective-C

    Introduction

    Swift's concurrency feature involves asynchronous functions and actors. While Objective-C does not have corresponding language features, asynch...

    1. D

    SE-298

    Async/Await: Sequences

    Introduction

    Swift's async/await feature provides an intuitive, built-in...

    1. T

    SE-299

    Extending Static Member Lookup in Generic Contexts

    Introduction

    Using static member declarations to provide semantic names for commonly used values which can then be accessed via leading dot syntax is an imp...

    1. P

    SE-300

    Continuations for interfacing async tasks with synchronous code

    Introduction

    Asynchronous Swift code needs to be able to work with existing synchronous code that uses techniques such as completion callbacks and delegate ...

    1. J

    SE-301

    Package Editor Commands

    Introduction

    Because Swift package manifests are written in Swift using the PackageDescription API, it is difficult to automate common tasks like adding a n...

    1. O

    SE-302

    `Sendable` and `@Sendable` closures

    Introduction

    A key goal of the Swift Concurrency effort is to “provide a mechanism for isolating state in concurrent programs to eliminate data races.” Suc...

    1. C

    SE-303

    Package Manager Extensible Build Tools

    Introduction

    This is a proposal for extensible build tools support in Swift Package Manager. The initial set of functionality is intentionally basic, and fo...

    1. A

    SE-304

    Structured concurrency

    Introduction

    async/await is a language mechanism for writing natural, efficient asynchronous code. Asynchronous functions (introd...

    1. J

    SE-305

    Package Manager Binary Target Improvements

    Introduction

    This proposal extends SwiftPM binary targets to also support other kinds of prebuilt artifacts, such as command line tools. It does not in and ...

    1. A

    SE-307

    Allow interchangeable use of `CGFloat` and `Double` types

    Introduction

    I propose to extend the language and allow Double and CGFloat types to be used interchangeably by means of transparently converting one type in...

    1. P

    SE-308

    `#if` for postfix member expressions

    Introduction

    Swift has conditional compilation block #if ... #endif which allows code to be conditionally compiled depending on the value of one or more c...

    1. R

    SE-309

    Unlock existentials for all protocols

    Introduction

    Swift allows one to use a protocol as a type when its requirements meet a rather unintuitive list of criteria, among which is the absence of ...

    1. A

    SE-311

    Task Local Values

    Introduction

    With Swift embracing asynchronous functions and actors, asynchronous code will be everywhere.

    Therefore, the need for debugging, tracing and ...

    1. K

    SE-312

    Add `indexed()` and `Collection` conformances for `enumerated()` and `zip(_:_:)`

    Introduction

    This proposal aims to fix the lack of Collection conformance of the sequences returned by zip(_:_:) and enumerated(), preventing them from...

    1. T

    SE-313

    Improved control over actor isolation

    Introduction

    The [Swift actors proposal][actors] introduces the notion of actor-isolated declarations, which are declarations that can safely access an ac...

    1. D

    SE-314

    `AsyncStream` and `AsyncThrowingStream`

    Introduction

    The continuation types added in SE-0300 act as adaptors fo...

    1. P

    SE-315

    Type placeholders (formerly, "Placeholder types")

    Introduction

    When Swift's type inference is unable to work out the type of a particular expression, it requires the programmer to provide the necessary type...

    1. F

    SE-316

    Global actors

    Introduction

    Actors are a new kind of reference type that protect their instance data from concurrent access. Swift actors achieve this wi...

    1. J

    SE-319

    Conform Never to Identifiable

    Introduction

    This proposal conforms Never to Identifiable to make it usable as a "bottom type" for generic constraints that require Identifiable.

    ...

    1. K

    SE-320

    Allow coding of non `String` / `Int` keyed `Dictionary` into a `KeyedContainer`

    Introduction

    The current conformance of Swift's Dictionary to the Codable protocols has a somewhat-surprising limitation in that dictionaries whose key ...

    1. M

    SE-321

    Package Registry Service - Publish Endpoint

    Introduction

    The [package registry service][SE-0292] defines endpoints for fetching packages.

    This proposal extends the existing [package registry specific...

    1. The proposal does not have any authors.

    SE-322

    Temporary uninitialized buffers

    Introduction

    This proposal introduces new Standard Library functions for manipulating temporary buffers that are preferentially allocated on the stack inste...

    1. J

    SE-323

    Asynchronous Main Semantics

    Introduction

    Program setup generally occurs in the main function where developers expect to perform operations before other parts of the program are run. Ob...

    1. E

    SE-324

    Relax diagnostics for pointer arguments to C functions

    Introduction

    C has special rules for pointer aliasing, for example allowing char * to alias other pointer types, and allowing pointers to signed and unsig...

    1. A

    SE-325

    Additional Package Plugin APIs

    Introduction

    SE-0303 introduced the ability to define...

    1. A

    SE-326

    Enable multi-statement closure parameter/result type inference

    Introduction

    I propose to improve inference behavior of multi-statement closures by enabling parameter and result type inference from the closure body. This...

    1. P

    SE-327

    On Actors and Initialization

    Introduction

    Actors are a relatively new nominal type in Swift that provides data-race safety for its mutable state. The protection is achieved by _isolatin...

    1. K

    SE-329

    Clock, Instant, and Duration

    Introduction

    The concepts of time can be broken down into three distinct parts:

    1. An item to provide a concept of now plus a way to wake up after a given ...
    1. P

    SE-330

    Conditionals in Collections

    Introduction

    This is a lightning proposal to extend the existing Swift language slightly to allow #if conditional inclusion of elements in array and dicti...

    1. J

    SE-331

    Remove Sendable conformance from unsafe pointer types

    Introduction

    SE-0302 introduced the Sendable protocol, including Sendable requirements for various l...

    1. A

    SE-332

    Package Manager Command Plugins

    Introduction

    SE-0303 introduced the ability to define...

    1. A

    SE-333

    Expand usability of `withMemoryRebound`

    Introduction

    The function withMemoryRebound(to:capacity:_ body:) executes a closure while temporarily binding a range of memory to a different type than t...

    1. G

    SE-334

    Pointer API Usability Improvements

    Introduction

    This proposal introduces some quality-of-life improvements for UnsafePointer and its Mutable and Raw variants.

    1. Add an API to obtain a...
    1. G

    SE-335

    Introduce existential `any`

    Introduction

    Existential types in Swift have an extremely lightweight spelling: a plain protocol name in type context means an existential type. Over the ye...

    1. H

    SE-336

    Distributed Actor Isolation

    Introduction

    With the recent introduction of actors to the language, Swift ga...

    1. K

    SE-337

    Incremental migration to concurrency checking

    Introduction

    Swift 5.5 introduced mechanisms to eliminate data races from the language, including the Sendable protocol ([SE-0302](https://github.com/appl...

    1. D

    SE-338

    Clarify the Execution of Non-Actor-Isolated Async Functions

    Introduction

    SE-0306, which introduced actors to Swift, states that async f...

    1. J

    SE-339

    Module Aliasing For Disambiguation

    Introduction

    Swift does not allow multiple modules in a program to share the same name, and attempts to do so will fail to build. These name collisions can ...

    1. E

    SE-340

    Unavailable From Async Attribute

    Introduction

    The Swift concurrency model allows tasks to resume on different threads from the one they were suspended on. For this reason, API that relies o...

    1. E

    SE-341

    Opaque Parameter Declarations

    Introduction

    Swift's syntax for generics is designed for generality, allowing one to express complicated sets of constraints amongst the different inputs an...

    1. D

    SE-343

    Concurrency in Top-level Code

    Introduction

    Bringing concurrency to top-level code is an expected continuation of the concurrency work in Swift. This pitch looks to iron out the details o...

    1. E

    SE-344

    Distributed Actor Runtime

    Introduction

    With the recent introduction of actors to the language, Swift ga...

    1. K

    SE-345

    `if let` shorthand for shadowing an existing optional variable

    Introduction

    Optional binding using if let foo = foo { ... }, to create an unwrapped variable that shadows an existing optional variable, is an extremely ...

    1. C

    SE-347

    Type inference from default expressions

    Introduction

    It's currently impossible to use a default value expression with a generic parameter type to default the argument and its type:

    func ...
    
    1. P

    SE-348

    `buildPartialBlock` for result builders

    ...

    1. R

    SE-349

    Unaligned Loads and Stores from Raw Memory

    Introduction

    Swift does not currently provide a clear way to load data from an arbitrary source of bytes, such as a binary file, in which data may be stored...

    1. G

    SE-350

    Regex Type and Overview

    Introduction

    Swift strings provide an obsessively Unicode-forward model of programming with strings. String processing with Collection's algorithms is woe...

    1. M

    SE-351

    Regex builder DSL

    Introduction

    [Declarative string processing] aims to offer powerful pattern matching capabilities with expressivity, clarity, type safety, and ease of use. ...

    1. R

    SE-352

    Implicitly Opened Existentials

    Introduction

    Existential types in Swift allow one to store a value whose specific type is unknown and may change at runtime. The dynamic type of that stored...

    1. D

    SE-353

    Constrained Existential Types

    Introduction

    Existential types complement the Swift type system’s facilities for abstraction. Like generics, they enable a function to take and return multi...

    1. R

    SE-354

    Regex Literals

    Introduction

    We propose the introduction of regex literals to Swift source code, providing compile-time checks and typed-capture inference. Regex literals h...

    1. H

    SE-355

    Regex Syntax and Run-time Construction

    Introduction

    A regex declares a string processing algorithm using syntax familiar across a variety of languages and tools throughout programming history. We...

    1. H

    SE-356

    Swift Snippets

    Introduction

    This proposal describes a convention for writing a new form of sample code called snippets. Snippets are short, single-file examples that can...

    1. A

    SE-357

    Regex-powered string processing algorithms

    Introduction

    The Swift standard library's string processing algorithms are underpowered compared to other popular programming and scripting languages. Some ...

    1. T

    SE-358

    Primary Associated Types in the Standard Library

    Introduction

    [SE-0346] introduced the concept of primary associated types to the language. This document proposes to adopt this feature in the Swift Standar...

    1. K

    SE-359

    Build-Time Constant Values

    Introduction

    A Swift language feature for requiring certain values to be knowable at compile-time. This is achieved through an attribute, @const, constrai...

    1. A

    SE-360

    Opaque result types with limited availability

    Introduction

    Since their introduction in SE-0244, opaque result ...

    1. P

    SE-361

    Extensions on bound generic types

    Introduction

    Specifying the type arguments to a generic type in Swift is almost always written in angle brackets, such as Array&lt;String&gt;. Extensions are a ...

    1. H

    SE-362

    Piecemeal adoption of upcoming language improvements

    Introduction

    Swift 6 is accumulating a number of improvements to the language that have enough source-compatibility impact that they could not be enabled by...

    1. D

    SE-363

    Unicode for String Processing

    Introduction

    This proposal describes Regex's rich Unicode support during regex matching, along with the character classes and options that define and modi...

    1. N

    SE-364

    Warning for Retroactive Conformances of External Types

    Introduction

    Many Swift libraries vend currency protocols, like Equatable, Hashable, Codable, among others, that unlock worlds of common functionality for t...

    1. H

    SE-365

    Allow implicit `self` for `weak self` captures, after `self` is unwrapped

    Introduction

    As of SE-0269, implicit self is permit...

    1. C

    SE-366

    `consume` operator to end the lifetime of a variable binding

    Introduction

    In this document, we propose adding a new operator, marked by the context-sensitive keyword consume, to the language. consume ends the life...

    1. M

    SE-367

    Conditional compilation for attributes

    Introduction

    Over time, Swift has introduced a number of new attributes to communicate additional information in source code. Existing code can then be upda...

    1. D

    SE-368

    StaticBigInt

    Introduction

    Integer literals in Swift source code can express an arbitrarily large value. However, types outside of the standard library which conform to `...

    1. B

    SE-369

    Add CustomDebugStringConvertible conformance to AnyKeyPath

    Introduction

    This proposal is to add conformance to the protocol CustomDebugStringConvertible to AnyKeyPath.

    Motivation

    Currently, passing a keypa...

    1. B

    SE-370

    Pointer Family Initialization Improvements and Better Buffer Slices

    Introduction

    The types in the UnsafeMutablePointer family typically require manual management of memory allocations, including the management of their ini...

    1. G

    SE-371

    Isolated synchronous deinit

    Introduction

    This feature allows deinit's of actors and global-actor isolated types (GAITs) to access non-sendable isolated state, lifting restrictions im...

    1. M

    SE-372

    Document Sorting as Stable

    Introduction

    Swift's sorting algorithm was changed to be stable before Swift 5, but we've never updated the documentation to provide that guarantee. Let's c...

    1. N

    SE-374

    Add sleep(for:) to Clock

    Introduction

    The Clock protocol introduced in Swift 5.7 provides a way to suspend until a future instant, but does not provide a way to sleep for a durat...

    1. B

    SE-376

    Function Back Deployment

    Introduction

    This proposal introduces a @backDeployed attribute to allow ABI-stable libraries to make their own public APIs available on older OSes. When ...

    1. A

    SE-377

    `borrowing` and `consuming` parameter ownership modifiers

    Introduction

    We propose new borrowing and consuming parameter modifiers to allow developers to explicitly choose the ownership convention that a functio...

    1. M

    SE-378

    Package Registry Authentication

    Introduction

    A package registry may require authentication for some or all of its API in order to identify user performing the action and authorize the req...

    1. Y

    SE-379

    Swift Opt-In Reflection Metadata

    Introduction

    This proposal seeks to increase the safety, efficiency, and secrecy of Swift Reflection Metadata by improving the existing mechanism and provid...

    1. M

    SE-380

    `if` and `switch` expressions

    Introduction

    This proposal introduces the ability to use if and switch statements as expressions, for the purpose of:

    • Returning values from functions,...
    1. B

    SE-381

    DiscardingTaskGroups

    Introduction

    We propose to introduce a new type of structured concurrency task group: Discarding[Throwing]TaskGroup. This type of group is similar to `T...

    1. C

    SE-382

    Expression Macros

    Introduction

    Expression macros provide a way to extend Swift with new kinds of expressions, which can perform arbitrary syntactic transformations on their a...

    1. D

    SE-383

    Deprecate @UIApplicationMain and @NSApplicationMain

    Introduction

    @UIApplicationMain and @NSApplicationMain used to be the standard way for iOS and macOS apps respectively to declare a synthesized platform...

    1. R

    SE-384

    Importing Forward Declared Objective-C Interfaces and Protocols

    Introduction

    This proposal seeks to improve the usability of existing Objective-C libraries from Swift by reducing the negative impact forward declarations ...

    1. N

    SE-385

    Custom Reflection Metadata

    Introduction

    In Swift, declarations are annotated with attributes to opt into both built-in language features (e.g. @available) and library functionality ...

    1. P

    SE-386

    New access modifier: `package`

    Introduction

    This proposal introduces package as a new access modifier. Currently, to access a symbol in another module, that symbol needs to be declared...

    1. E

    SE-387

    Swift SDKs for Cross-Compilation

    Introduction

    Cross-compilation is a common development use case. When cross-compiling, we need to refer to these concepts:

    • a toolchain is a set of to...
    1. M

    SE-388

    Convenience Async[Throwing]Stream.makeStream methods

    Introduction

    We propose introducing helper methods for creating AsyncStream and AsyncThrowingStream instances which make the stream's continuation easie...

    1. F

    SE-389

    Attached Macros

    Introduction

    Attached macros provide a way to extend Swift by creating and extending declarations based on arbitrary syntactic transformations on their argu...

    1. D

    SE-390

    Noncopyable structs and enums

    Introduction

    This proposal introduces the concept of noncopyable types (also known as "move-only" types). An instance of a noncopyable type always has u...

    1. J

    SE-391

    Package Registry Publish

    Introduction

    A package registry makes packages available to consumers. Starting with Swift 5.7, SwiftPM supports dependency resolution and package download ...

    1. Y

    SE-392

    Custom Actor Executors

    Introduction

    As Swift Concurrency continues to mature it is becoming increasingly important to offer adopters tighter control over where exactly asynchronou...

    1. K

    SE-393

    Value and Type Parameter Packs

    Introduction

    Many modern Swift libraries include ad-hoc variadic APIs with an arbitrary upper bound, typically achieved with overloads that each have a diff...

    1. H

    SE-394

    Package Manager Support for Custom Macros

    Introduction

    Macros provide a way to extend Swift by performing arbitrary syntactic transformations on input source code to produce new code. One example fo...

    1. B

    SE-395

    Observation

    Introduction

    Making responsive apps often requires the ability to update the presentation when underlying data changes. The observer pattern allows a subj...

    1. P

    SE-396

    Conform `Never` to `Codable`

    Introduction

    Extend Never so that it conforms to the Encodable and Decodable protocols, together known as Codable.

    Motivation

    Swift can synthes...

    1. N

    SE-398

    Allow Generic Types to Abstract Over Packs

    Introduction

    Previously SE-0393 introduced type parameter packs and several related concepts, allowing generic function declarati...

    1. S

    SE-400

    Init Accessors

    Introduction

    Init accessors generalize the out-of-line initialization feature of property wrappers to allow any computed property on types to opt into defin...

    1. H

    SE-402

    Generalize `conformance` macros as `extension` macros

    Introduction

    This proposal generalizes the conformance macro role as an extension macro role that can add a member list to an extension in addition to a...

    1. H

    SE-403

    Package Manager Mixed Language Target Support

    Introduction

    This is a proposal for adding package manager support for targets containing both Swift and [C based language sources][SE-0038] (henceforth, re...

    1. N

    SE-404

    Allow Protocols to be Nested in Non-Generic Contexts

    Introduction

    Allows protocols to be nested in non-generic struct/class/enum/actors, and functions.

    Motivation

    Nesting nominal types inside other nomi...

    1. K

    SE-405

    String Initializers with Encoding Validation

    Introduction

    We propose adding new String failable initializers that validate encoded input, and return nil when the input contains any invalid elements...

    1. G

    SE-406

    Backpressure support for AsyncStream

    Introduction

    SE-0314 introduced new Async[Throwing]Stream types which...

    1. F

    SE-408

    Pack Iteration

    Introduction

    Building upon the Value and Type Parameter Packs proposal SE-0393, t...

    1. S

    SE-409

    Access-level modifiers on import declarations

    Introduction

    Declaring the visibility of a dependency with an access-level modifier on import declarations enables enforcing which declarations can referenc...

    1. A

    SE-410

    Low-Level Atomic Operations ⚛︎

    Introduction

    This proposal adds a limited set of low-level atomic operations to the Standard Library, including native spellings for C++-style memory orderi...

    1. K

    SE-411

    Isolated default value expressions

    Introduction

    Default value expressions are permitted for default arguments and default stored property values. There are several issues with the current act...

    1. H

    SE-412

    Strict concurrency for global variables

    Introduction

    This proposal defines options for the usage of global variables free of data races. Within this proposal, global variables encompass any storag...

    1. J

    SE-413

    Typed throws

    Introduction

    Swift's error handling model allows functions and closures marked throws to note that they can exit by throwing an error. The error values th...

    1. J

    SE-414

    Region based Isolation

    Introduction

    Swift Concurrency assigns values to isolation domains determined by actor and task boundaries. Code running in distinct isolation domains can...

    1. M

    SE-415

    Function Body Macros

    Introduction

    Macros augment Swift programs with additional code, which can include new declarations, expressions, and statements. One of the key ways in whi...

    1. D

    SE-416

    Subtyping for keypath literals as functions

    Introduction

    Today, keypath literals can only be narrowly converted to a function which exactly matches the argument and return type. This proposal allows k...

    1. F

    SE-417

    Task Executor Preference

    Introduction

    Swift Concurrency uses tasks and actors to model concurrency and primarily relies on actor isolation to determine where a specific piece of cod...

    1. K

    SE-418

    Inferring `Sendable` for methods and key path literals

    Introduction

    This proposal is focused on a few corner cases in the language surrounding functions as values and key path literals when using concurrency. We...

    1. A

    SE-419

    Swift Backtrace API

    Introduction

    This year we are improving the usability of Swift for command line and server-side development by adding first-class support for backtraces to ...

    1. A

    SE-420

    Inheritance of actor isolation

    Introduction

    Under Swift's [actors design][SE-0306], every function in Swift has an actor isolation: it is either isolated to some specific actor or non-iso...

    1. J

    SE-421

    Generalize effect polymorphism for `AsyncSequence` and `AsyncIteratorProtocol`

    Introduction

    This proposal generalizes AsyncSequence in two ways:

    1. Proper throws polymorphism is accomplished with adoption of typed throws.
    2. A new ...
    1. D

    SE-423

    Dynamic actor isolation enforcement from non-strict-concurrency contexts

    Introduction

    Many Swift programs need to interoperate with frameworks written in C/C++/Objective-C whose implementations cannot participate in static data r...

    1. H

    SE-426

    BitwiseCopyable

    Introduction

    We propose a new, limited protocol BitwiseCopyable that can be conformed to by types that are "bitwise-copyable"[^1]--that ...

    1. K

    SE-428

    Resolve DistributedActor protocols

    Introduction

    Swift's distributed actors offer developers a flexible bring-your-own-runtime approach to building distributed systems using the actor paradigm...

    1. K

    SE-429

    Partial consumption of noncopyable values

    Introduction

    We propose allowing noncopyable fields in deinit-less aggregates to be consumed individually, so long as they are defined in the current module...

    1. M

    SE-430

    `sending` parameter and result values

    Introduction

    This proposal extends region isolation to enable the application of an explicit sending annotation to function parameters and results. A func...

    1. M

    SE-431

    `@isolated(any)` Function Types

    Introduction

    The actor isolation of a function is an important part of how it's used. Swift can reason precisely about the isolation of a specific function...

    1. J

    SE-432

    Borrowing and consuming pattern matching for noncopyable types

    Introduction

    Pattern matching over noncopyable types, particularly noncopyable enums, can be generalized to allow for pattern matches that borrow their subj...

    1. J

    SE-433

    Synchronous Mutual Exclusion Lock 🔒

    Introduction

    This proposal introduces a mutual exclusion lock, or a mutex, to the standard library. Mutex will be a new synchronization primitive in the s...

    1. A

    SE-434

    Usability of global-actor-isolated types

    Introduction

    This proposal encompasses a collection of changes to concurrency rules concerning global-actor-isolated types to improve their usability.

    ...

    1. S

    SE-435

    Swift Language Version Per Target

    Introduction

    The current Swift Package Manager manifest API for specifying Swift language version(s) applies to an entire package which is limiting when ado...

    1. P

    SE-436

    Objective-C implementations in Swift

    Introduction

    We propose an alternative to @objc classes where Objective-C header @interface declarations are implemented by Swift extensions marked wi...

    1. B

    SE-437

    Noncopyable Standard Library Primitives

    ...

    1. K

    SE-438

    Metatype Keypaths

    Introduction

    Key path expressions access properties dynamically. They are declared with a concrete root type and one or more key path components that define...

    1. A