Skip to content

Commit 05c616b

Browse files
authored
Merge branch 'main' into access-level-imports-2
2 parents e6422d3 + 106a441 commit 05c616b

34 files changed

+7674
-140
lines changed

process.md

Lines changed: 57 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Swift Evolution Process
22

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.
44

55
## Scope
66

@@ -33,7 +33,7 @@ The [Core Team](https://www.swift.org/community/#core-team) is responsible for t
3333

3434
Currently, there is only one evolution workgroup:
3535

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.
3737

3838
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.
3939

@@ -75,29 +75,64 @@ Please state explicitly whether you believe that the proposal should be accepted
7575

7676
## How to propose a change
7777

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**
8979

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.
9181

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**
9383

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.
128+
129+
[draft-pr]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests
95130

96131
## Review process
97132

98133
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
101136
member becomes the *review manager* for the proposal. The proposal
102137
is assigned a proposal number (if it is a new proposal), and then enters
103138
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
113148
available to answer questions, address feedback, and clarify their
114149
intent during the review period.
115150

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
117152
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
119154
to the proposal authors and forums. The review manager will
120155
update the proposal's state in the [swift-evolution
121156
repository][swift-evolution-repo] to reflect that decision.
@@ -173,8 +208,9 @@ A given proposal can be in one of several states:
173208
[swift-evolution-repo]: https://github.com/apple/swift-evolution "Swift evolution repository"
174209
[swift-evolution-staging]: https://github.com/apple/swift-evolution-staging "Swift evolution staging repository"
175210
[proposal-reviews]: https://forums.swift.org/c/evolution/proposal-reviews "'Proposal reviews' category of the Swift forums"
176-
[proposal-status]: https://apple.github.io/swift-evolution/
211+
[status-page]: https://apple.github.io/swift-evolution/
177212
[preview-package]: https://github.com/apple/swift-standard-library-preview/
213+
[language-steering-group]: https://www.swift.org/language-steering-group
178214

179215
## Review announcement
180216

proposals/0165-dict.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
# Dictionary & Set Enhancements
22

3-
- Proposal: [SE-0165](0165-dict.md)
4-
- Author: [Nate Cook](https://github.com/natecook1000)
5-
- Review Manager: [Ben Cohen](https://github.com/airspeedswift)
6-
- Status: **Implemented (Swift 4)**
7-
- Decision Notes: [Rationale][rationale]
3+
* Proposal: [SE-0165](0165-dict.md)
4+
* Author: [Nate Cook](https://github.com/natecook1000)
5+
* Review Manager: [Ben Cohen](https://github.com/airspeedswift)
6+
* Status: **Implemented (Swift 4)**
7+
* Decision Notes: [Rationale][rationale]
88

99
## Introduction
1010

proposals/0220-count-where.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,14 @@
33
* Proposal: [SE-0220](0220-count-where.md)
44
* Author: [Soroush Khanlou](https://github.com/khanlou)
55
* Review Manager: [Ben Cohen](https://github.com/airspeedswift)
6-
* Status: **Active Review (July 18 – July 28, 2023)**
7-
* Previous status: **Accepted (2018-08-15) then Expired**
6+
* Status: **Accepted**
87
* Implementation: [apple/swift#16099](https://github.com/apple/swift/pull/16099), [apple/swift#22289](https://github.com/apple/swift/pull/22289) (revert PR)
9-
* Previous Decision Notes: [Rationale](https://forums.swift.org/t/accepted-se-0220-count-where/15280), [Additional Commentary](https://forums.swift.org/t/require-parameter-names-when-referencing-to-functions/27048)
8+
* Review: ([first pitch](https://forums.swift.org/t/count-where-on-sequence/11186)) ([first review](https://forums.swift.org/t/se-0220-count-where/15048)) ([first acceptance](https://forums.swift.org/t/accepted-se-0220-count-where/15280)) ([second pitch](https://forums.swift.org/t/pitch-restore-count-where-from-se-0220/65859)) ([second review](https://forums.swift.org/t/refresh-review-se-0220-count-where/66235)) ([second acceptance](https://forums.swift.org/t/accepted-again-se-0220-count-where/66659))
109

1110
## Introduction
1211

1312
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.
1413

15-
Swift-evolution thread: [`count(where:)` on Sequence](https://forums.swift.org/t/count-where-on-sequence/11186)
16-
1714
## Motivation
1815

1916
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

Comments
 (0)