STYLE ONE: Minor language enhancements AKA “Low hanging fruit”
It would help if the core team could add minor language enhancements without going through a formal proposal process with its normal review overhead. I have now been involved in several reviews that involved API changes that were otherwise unremarkable and primarily motivated by modernizing and style:
- Replacing Equal Signs with Colons For Attribute Arguments
- Modernizing Playground Literals
- Disambiguating Line Control Statements from Debugging Identifiers
To this list, you could add:
Each of these proposals could have proceeded with a simple “any objections” sanity check discussion period rather than a more formal full review. As a another example (now unnecessary), consider the `dynamicType` keyword, which would have required a formal proposal to be modernized into Swift’s lowercase keyword standard. The hallmarks of these changes are:
- They have limited impact
- They increase language consistency
- They are uncontroversial, offering simple, straightforward, and correct changes that have already passed review in spirit, if not in letter
- A preponderance of reviews are “+1” rather than in-depth discussions of why the proposal should or should not be adopted.
I would recommend retaining a change document requirement for these proposals. This would be similar to a brief but formal proposal, that lays out the justification, detail design, and any associated background info for the change. Doing so would provide a historic record of the change and any notes from the team, and be in a form that would support the extraction of key details for use in release notes.
I do not know whether these would need to be grouped and numbered with the normal proposals or placed into their own numbering scheme.
STYLE TWO: Fast tracking viability
Once a draft has been discussed on-list and submitted as a pull request, I’d like to see a biweekly (or even once-a-month) Pull Request Review meeting from the core team where a review groups looks over the current pull-request queue and scores them: recommend close, recommend promote, needs work, defer past 3.0. This approach:
- Would offer closure to proposal authors who are otherwise unsure of the viability of their proposals
Naturally happens after a significant on-list discussion/pre-review period has already taken place
- Would allow the team to weed out proposals with significant issues before entering formal review
- Would allow on-list reviews to give precedence to only those proposals that make sense both in the time context of Swift 3.0 and its overall design philosophy.
Swift is an opinionated language. This review style would introduce discernment and feedback slightly earlier in the process without stifling on-list discussion.
A few final thoughts
It is a given that Swift 3 is going to be the last opportunity to make large, code-breaking changes to the language. With that constraint, I’d like to see more time and effort go into improving Swift’s fundamentals. Any time, effort, and review that can be better spent getting collections and indices right rather than worrying about colons and casing is, in my opinion, worth a tradeoff in community control.
The natural tension between engagement and coherence requires a balance that serves the entire Swift community. Open evolution processes are, by nature, chaotic. Maintaining a coherent vision for something as complicated as Swift requires coordination and leadership. That’s why the ultimate responsibility for adopting changes lies with the Swift core team, which establishes the strategic direction of Swift.
I hope by adopting these fast-track review styles that the Swift open source community can better focus on the big updates while making sure that the small details are attended to carefully and thoughtfully without overwhelming the process.