Swift Evolution Monthly: June '23
WWDC 23 Aftermath, 0 Proposals Accepted in June, Milestone: #400, 2 new Proposals & 10 Pitches linked, OpenAPI Generator.
WWDC23 was full of hardware announcements and even brought us a new platform: visionOS. Xcode 15 and Swift 5.9 are also in beta phase now with a great set of new features. Of course, for readers of this newsletter, there were no big surprises in the "What's New in Swift" session (except for the large focus on C++ interoperability). But if you didn't have the time to check out the other sessions, including those about Swift Macros which were a focus in the last 3 issues, you might want to visit the WWDC Notes project website which has a dedicated section with notes about this year's sessions. At the time of this writing, 75 sessions from 2023 were already covered by 25+ amazing community members, and still counting. 🎉🙏
If you don't know where to start, I've prepared a thread with a ~250-character-long summary twoot for each of my personal Top 25 sessions. It can both help you learn some tidbits of these sessions with minimal time & explore the ones you might want to dive into further by reading the full notes or watching the session:
🐦 Twitter Thread | 🐘 Mastodon Thread
Accepted Proposals
No new proposals were accepted in June. 😱 I guess that's a consequence of 7 proposals being accepted in May to make it into the language before WWDC.
I'm also skipping the old proposal, no one seems to be using the repo anyway. 🤷♂️
But there are two new proposals in Review, so after the packed May issue and a light June issue this time, we might get a decent July issue next month. 🤞
Worth noting that a milestone of 400 proposals has been reached! 💯💯💯💯 🥳
Proposals in Progress
- SE-0385: Custom Reflection Metadata
📝 Proposal | 💬 Review | 🔄 Returned - SE-0387: Swift SDKs for Cross-Compilation
📝 Proposal | 💬 Reviews: 1st, 2nd - SE-0395: Observation
📝 Proposal | 💬 Reviews: 1st, 2nd - SE-0400: Init Accessors
📝 Proposal | 💬 Review - SE-0401: Remove Actor Isolat. Inference caused by Prop. Wrappers
📝 Proposal | 💬 Review
Recently Active Pitches/Discussions
- Allow Protocols to be Nested in Non-Generic Contexts
- `With` functions in the standard library
- Guard-Let-Catch (and If-Let-Catch) to avoid long (nested) do-blocks
- Sequence grouped(by:) and keyed(by:)
- Restore count(where:) from SE-0220
- Add Accumulator/TinyArray to the standard library?
- Non-Reentrant Actors
- Generalize `conformance` macros as `extension` macros
- PermutableCollection protocol
- Properties and subscripts with optional getters
Other Developments Worth Mentioning
A really cool open-source surprise at WWDC was the Swift OpenAPI Generator announcement. Apple dedicated a full session to it and I recommend watching it if you happen to have an app with its own server, or if you plan to add a server to your app in the future. The most amazing thing about this new set of libraries is how flexibly you can make use of them:
You were using a networking library in your app or you wrote your own networking client using URLSession
? No more: Just generate the client code.
You were using Vapor as a server and had to map your routes and parameters to your business logic manually? No more: Just generate the server code.
You were using complex workflows to ensure your non-Swift server and your Swift client are always in sync? No more: Just write a YAML file like any other code.
OpenAPI (not to mix up with OpenAI) is an industry-standard for HTTP API specs and there's a ton of tooling around the API spec that can help streamline API creation, documentation, testing, and usage – Apple's tools are just the latest to join a big family. At the core of OpenAPI is the spec file – I recommend writing one with a GUI like APIGit so you don't have to remember the syntax – this was the only one I found to support typed params and having a useful Free tier.
There's also a process to influence the future direction of the project in a very similar (but more lightweight) manner to Swift Evolution itself, learn more here.
And that's it for June! It's been a busy month but it was fun. 🍏🥽
A drag & drop translator for String Catalog files – it's really easy.
Get it now to machine-translate your app to up to 150 languages!