You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: process.md
+57-21Lines changed: 57 additions & 21 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# Swift Evolution Process
2
2
3
-
Swift is a powerful and intuitive programming language that is designed to make writing and maintaining correct programs easier. Swift is growing and evolving, guided by a community-driven process referred to as the Swift evolution process. This document outlines the Swift evolution process and how a feature grows from a rough idea into something that can improve the Swift development experience for millions of programmers.
3
+
Swift is a powerful and intuitive programming language that is designed to make writing and maintaining correct programs easier. Swift is growing and evolving, guided by a community-driven process referred to as the Swift evolution process, maintained by the [Language Steering Group][language-steering-group]. This document outlines the Swift evolution process and how a feature grows from a rough idea into something that can improve the Swift development experience for millions of programmers.
4
4
5
5
## Scope
6
6
@@ -33,7 +33,7 @@ The [Core Team](https://www.swift.org/community/#core-team) is responsible for t
33
33
34
34
Currently, there is only one evolution workgroup:
35
35
36
-
* The [Language Workgroup](https://www.swift.org/language-workgroup/#evolution-process) has authority over the evolution of the Swift language and its standard library.
36
+
* The [Language Steering Group][language-steering-group] has authority over the evolution of the Swift language and its standard library.
37
37
38
38
The Core Team manages (or delegates) the evolution process for proposals outside these areas. The Core Team also retains the power to override the evolution decisions of workgroups when necessary.
39
39
@@ -75,29 +75,64 @@ Please state explicitly whether you believe that the proposal should be accepted
75
75
76
76
## How to propose a change
77
77
78
-
***Check prior proposals**: many ideas come up frequently, and may either be in active discussion on the forums, or may have been discussed already and have joined the [Commonly Rejected Proposals](commonly_proposed.md) list. Please [search the forums](https://forums.swift.org/search) for context before proposing something new.
79
-
***Consider the goals of the upcoming Swift release**: Each major
80
-
Swift release is focused on a [specific set of goals](README.md)
81
-
described early in the release cycle. When proposing a change to
82
-
Swift, please consider how your proposal fits in with the larger goals
83
-
of the upcoming Swift release. Proposals that are clearly out of scope
84
-
for the upcoming Swift release will not be brought up for review. If you can't resist discussing a proposal that you know is out of scope, please include the tag `[Out of scope]` in the subject.
85
-
***Socialize the idea**: propose a rough sketch of the idea in the ["pitches" section of the Swift forums](https://forums.swift.org/c/evolution/pitches), the problems it solves, what the solution looks like, etc., to gauge interest from the community.
86
-
***Develop the proposal**: expand the rough sketch into a complete proposal, using the [proposal template](proposal-templates/0000-swift-template.md), and continue to refine the proposal on the forums. Prototyping an implementation and its uses along with the proposal is *required* because it helps ensure both technical feasibility of the proposal as well as validating that the proposal solves the problems it is meant to solve.
87
-
***Request a review**: initiate a pull request to the [swift-evolution repository][swift-evolution-repo] to indicate to the Language Workgroup that you would like the proposal to be reviewed. When the proposal is sufficiently detailed and clear, and addresses feedback from earlier discussions of the idea, the pull request will be accepted. The proposal will be assigned a proposal number as well as a Language Workgroup member to manage the review.
88
-
***Address feedback**: in general, and especially [during the review period][proposal-status], be responsive to questions and feedback about the proposal.
78
+
1.**Check prior proposals**
89
79
90
-
## Preparing an implementation
80
+
Many ideas come up frequently, and may either be in active discussion on the forums, or may have been discussed already and have joined the [Commonly Rejected Proposals](commonly_proposed.md) list. Please [search the forums](https://forums.swift.org/search) for context before proposing something new.
91
81
92
-
When you are ready to request a review, a pull request with an implementation is required in addition to your proposal. Proposals that can ship as part of the [Standard Library Preview package][preview-package] should be paired with a pull request against the [swift-evolution-staging repository][swift-evolution-staging]. All other proposals should be paired with an implementation pull request against the [main Swift repository](https://github.com/apple/swift).
82
+
1.**Consider the goals of the upcoming Swift release**
93
83
94
-
The preview package can accept new types, new protocols, and extensions to existing types and protocols that can be implemented without access to standard library internals or other non-public features. For more information about the kinds of changes that can be implemented in the preview package, see [SE-0264](https://github.com/apple/swift-evolution/blob/main/proposals/0264-stdlib-preview-package.md).
84
+
Each major Swift release is focused on a [specific set of goals](README.md)
85
+
described early in the release cycle. When proposing a change to
86
+
Swift, please consider how your proposal fits in with the larger goals
87
+
of the upcoming Swift release. Proposals that are clearly out of scope
88
+
for the upcoming Swift release will not be brought up for review. If you can't resist discussing a proposal that you know is out of scope, please include the tag `[Out of scope]` in the subject.
89
+
90
+
1.**Socialize the idea**
91
+
92
+
Propose a rough sketch of the idea in the ["pitches" section of the Swift forums](https://forums.swift.org/c/evolution/pitches), the problems it solves, what the solution looks like, etc., to gauge interest from the community.
93
+
94
+
1.**Develop the proposal and implementation**
95
+
96
+
1. Expand the rough sketch into a formal proposal using the [proposal template](proposal-templates/0000-swift-template.md).
97
+
1. In the [swift-evolution repository][swift-evolution-repo], open a [draft pull request][draft-pr] that adds your proposal to the [proposals directory](/proposals).
98
+
1. Anounce the pull request on the forums and edit the root post to link out to the pull request.
99
+
1. Refine the formal proposal in the open as you receive further feedback on the forums or the pull request.
100
+
A ripe proposal is expected to address commentary from present and past
101
+
discussions of the idea.
102
+
103
+
Meanwhile, start working on an implementation.
104
+
Prototyping an implementation and its uses *alongside* the formal proposal
105
+
is important because it helps to determine an adequate scope, ensure
106
+
technical feasibility, and validate that the proposal lives up to
107
+
its motivation.
108
+
109
+
A pull request with a working implementation is *required* for the
110
+
proposal to be accepted for review.
111
+
Proposals that can ship as part of the [Standard Library Preview package][preview-package]
112
+
should be paired with a pull request against the [swift-evolution-staging repository][swift-evolution-staging].
113
+
All other proposals should be paired with an implementation pull request
114
+
against the [main Swift repository](https://github.com/apple/swift).
115
+
116
+
The preview package can accept new types, new protocols, and extensions to
117
+
existing types and protocols that can be implemented without access to
118
+
standard library internals or other non-public features.
119
+
For more information about the kinds of changes that can be implemented in
120
+
the preview package, see [SE-0264](https://github.com/apple/swift-evolution/blob/main/proposals/0264-stdlib-preview-package.md).
121
+
122
+
1.**Request a review**
123
+
124
+
Once you have a working implementation and believe the proposal is sufficiently detailed and clear, mark the draft pull request in the [swift-evolution repository][swift-evolution-repo] as ready for review to indicate to the appropriate evolution workgroup that you would like the proposal to be reviewed.
125
+
126
+
> [!IMPORTANT]
127
+
> In general, and especially [during the review period](#review-process), be responsive to questions and feedback about the proposal.
The review process for a particular proposal begins when a member of
99
-
the Language Workgroup accepts a pull request of a new or updated proposal into
100
-
the [swift-evolution repository][swift-evolution-repo]. That Language Workgroup
134
+
the appropriate evolution workgroup accepts a pull request of a new or updated proposal into
135
+
the [swift-evolution repository][swift-evolution-repo]. That
101
136
member becomes the *review manager* for the proposal. The proposal
102
137
is assigned a proposal number (if it is a new proposal), and then enters
103
138
the review queue. If your proposal's accompanying implementation takes the form of a package, the review manager will merge your pull request into a new branch in the [swift-evolution-staging repository][swift-evolution-staging].
@@ -113,9 +148,9 @@ reviews. To avoid delays, it is important that the proposal authors be
113
148
available to answer questions, address feedback, and clarify their
114
149
intent during the review period.
115
150
116
-
After the review has completed, the Language Workgroup will make a decision on
151
+
After the review has completed, the managing evolution workgroup will make a decision on
117
152
the proposal. The review manager is responsible for determining
118
-
consensus among the Language Workgroup members, then reporting their decision
153
+
consensus among the workgroup members, then reporting their decision
119
154
to the proposal authors and forums. The review manager will
120
155
update the proposal's state in the [swift-evolution
121
156
repository][swift-evolution-repo] to reflect that decision.
@@ -173,8 +208,9 @@ A given proposal can be in one of several states:
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 useful operations on sequences that the standard library doesn't support yet. One current missing operation is `count(where:)`, which counts the number of elements in a `Sequence` that pass some test.
14
13
15
-
Swift-evolution thread: [`count(where:)` on Sequence](https://forums.swift.org/t/count-where-on-sequence/11186)
16
-
17
14
## Motivation
18
15
19
16
Counting the number of objects that pass a test has a wide range of uses in many domains. However, Swift currently doesn't give its users a simple way to perform this operation. While the behavior can currently be approximated with a `filter` and a `count`, this approach creates an intermediate array which it immediately discards. This is a bit wasteful.
0 commit comments