On the road to Swift 6

The Swift project has achieved a critical milestone of maturity of the core fundamentals, providing stability for users to invest in using Swift in earnest. On Apple's platforms such as macOS and iOS, the arrival of ABI and module stability has enabled the creation of stable binary frameworks. Further, the Swift Package Manager, which has integrated support both in Xcode and other IDEs, provides a cross-platform solution for building and distributing Swift libraries. Put together, these form the critical ingredients to foster the development of a blossoming Swift software ecosystem.

With those fundamentals in place, as a community, we are well-poised to pursue new frontiers for the Swift project. I’d like to highlight a few areas that the Core Team believes provide really exciting opportunities for the community to drive Swift forward.

#1: Accelerate growth of the Swift software ecosystem

A visitor to Swift.org may have noticed the following words:

Together we [the Swift community] are working to build a programming language to empower everyone to turn their ideas into apps on any platform.

Swift is an established language on Apple platforms for app development, and it’s steadily growing in other domains. As a community there are a variety of ways we can accelerate that growth, widening Swift’s availability and impact to everyone.

Here are some concrete goals we can work on together as a community:

  • Expand the number of platforms where Swift is available and supported

  • Improve how software written in Swift is installed and deployed

  • Support cross-platform tooling such as an Language Server Protocol (LSP), code formatting, refactoring, and the Swift Package Manager

  • Cultivate a rich open source library ecosystem

The last point includes both rounding out the Standard Library and encouraging the growth of new libraries that will make it easier and more natural to use Swift in a variety of domains. Some examples of the latter include cultivating the critical ingredients needed for using Swift for developing services as well as libraries like Swift Numerics which are essential for a variety of use cases ranging from scientific computing to machine learning.

#2: Create a fantastic development experience

Another goal of Swift is to provide a fantastic developer experience. Simply put, developers should be both highly productive and experience joy when programming in Swift.

There are major investments currently underway to improve the core developer experience, such as:

  • Faster builds

  • More informative and accurate diagnostics

  • Responsive code completion

  • Reliable and fluid debugging experience

And many others.

These are crucial endeavors, and they represent most engineering work that is happening in the project right now. They will remain an area of focus until these are nothing short of excellent.

#3: Invest in user-empowering language directions

The Core Team also wants to continue to make Swift a more powerful programming language and a better tool for solving problems. This goal channels again some of the welcoming words on Swift.org:

Our goals for Swift are ambitious: we want to make programming simple things easy, and difficult things possible.

Towards this vision, there are three language areas which are particularly important to focus on:

  • Round out capabilities in the language that support building expressive and elegant APIs such as variadic generics and DSL capabilities like function builders

  • Refine Swift’s implementation and capabilities to allow it to be used for low-level systems programming (or in constrained environments) and in important domains like services and machine learning

  • Provide excellent solutions for major language features such as memory ownership and concurrency

Supporting these Investments

These are just some of the potential areas of investment for the project, and I know this wonderful community will dream up and push on others. The areas I mention are ones the Core Team would like to strongly support and shepherd community investment in.

To that end, the Core Team will be looking at ways to support investments in each of these focus areas. We will use the working group model that has worked for the server domain and apply it to more focus areas. For example, later in 2020, we will use that model to provide the basis for community discussion and development on a new concurrency model. The Core Team will be providing more information as we form specific groups, which I expect to start happening soon.

To help support these efforts, I would also like to announce some changes to the Core Team, which are effective immediately. The following members of the community are now part of the Core Team:

  • Saleem Abdulrasool (@compnerd): Saleem is a prolific contributor to the Swift project and the primary instigator behind the port of Swift to Windows. On the Core Team, Saleem will be providing stewardship to the community’s efforts on support to more platforms as well as cross-platform development.

  • Tom Doron (@tomerd) : Tom is one of the most active members of the community focusing on Swift being a great technology for developing services. Beyond his work at Apple on creating SwiftNIO, he has been the primary organizer of the Swift Server Work Group. The server domain is an important direction for Swift, and Tom’s role on the Core Team will be to provide an important bridge between the development on the language and tooling and investments in the server domain.

The composition of the Core Team has not changed much since it was formed, and change is an important part of maintaining the health of a project. In addition to bringing in new people to the Core Team, it is important to balance the size of the Core Team with occasionally having some incumbent members cycle out. To that end, Dave Abrahams has stepped down from the Core Team. It is an understatement to say that Dave’s contributions to Swift have been immense and ground-breaking, and he will remain very active in the Swift project.

Path to Swift 6

Today, the current active release under development is Swift 5.2. We are likely to see a succession of Swift 5.x releases — each which will make progress on the frontiers outlined above — as we build up towards Swift 6. Each of those releases will be a major release in their own right.

What will differentiate Swift 6 from the Swift 5.x releases will be a significant change in the capabilities of the language. At this point, that change is improved concurrency support, and further progress towards the memory ownership model as outlined in John McCall’s ownership manifesto. These are major changes to the language that will take discussion, investigation, and time to implement. Instead of announcing a specific timeline for “Swift 6”, the plan is for the community to be a part of seeing these efforts progress, with focused efforts and goals, and we release Swift 6 when those efforts culminate. It will be an exciting journey, and I am proud to be part of this community that will make it happen.

280 Likes

This is fantastic news. I've really enjoyed how the SSWG operates and excited to see how that gets applied here.

11 Likes

No offense, but in what way did that ever work? The SSWG had to reboot once and today only Vapor and Apple itself are left in that "working group" (even before IBM left, it never really adopted the SSWG stuff, i.e. NIO). Is that how you envision the Swift project to work as a whole?

I contributed to the v1 of the SSWG and all that was dropped on the floor when Apple injected NIO w/o prior notice and by declaration and did the reboot. (except of course ElFumar which got prior notice that something is coming along)
Nothing against NIO, which is a great contribution, just wondering whether that particular model is something the Swift project would really want to adopt. Or maybe it is precisely what is wanted :slight_smile:

15 Likes

Congrats @compnerd for finally receiving the formal recognition for your tremendous efforts. A lot of people in the Swift world applaud you.

70 Likes

IBM was highly focused on contributing towards the tooling and deployment environment stories, rather than particular packages - especially as Vapor was taking such a lead in providing the groundwork for it. They had started to adopt SwiftLog & SwiftMetrics, with some preliminary investment in adopting NIO, IIRC.

The SSWG was able to identify and layout specific goals for a defined time, with accountability provided on who would be responsible for "taking point" on achieving those goals within the timeframe. Their charter was more thorough than the first iteration of the SSWG, with the focus on being a "steering group" rather than a particular dev team (which the first iteration felt more like).

4 Likes

Thank you!

36 Likes

Which is pretty much my point (check namespace and commit log of both).

1 Like

Ownership and concurrency sound like great refinements to Swift to me. Really looking forward to Swift 6!

18 Likes

This announcement is extremely exciting, thanks @tkremenek. This direction feels very inspired by what the community wants and needs right now and I think that's fantastic.

Congratulations to @compnerd and @tomerd on joining the Core Team. I couldn't imagine two better people for the job.

32 Likes

Really exiting news. However can we assume that Swift 6 won‘t focus towards pushing generics features to their limits? The generics manifesto still has a plenty features open + generics UI pitched by Joe Groff. Personally as a daily Swift user I‘d be more interested in these features first before conquering other fields.

13 Likes

Thanks for this update! It's exciting to see the progress Swift is making on other platforms (especially on the server and Linux).

@tkremenek I'm wondering if you can elaborate on this goal – could this include something like officially supporting Swift on ARM Linux?

And big congrats to @tomerd and @compnerd. Well deserved!

5 Likes

Yes, the Core Team would like to see how the ports that various members of the community have been working on can be more officially supported. Ideally, a person can go to Swift.org and at least see that Swift is supported on a specific platform, and they have the documentation they need to get going and be productive.

27 Likes

For me Swift 5 has really shown just how well the language and tooling is maturing. Really the only things I feel that Swift is still lacking are async/await and support for non-apple platform such as Windows, Android, and WASM. I’m so excited that the core team is making these points a main focus. Can’t wait for Swift 6!

24 Likes

Thanks @tkremenek, this sets out a fantastic path for the future of Swift. The goals seem very well chosen and @tomerd & @compnerd are great Core Team additions to help achieve those goals. Congrats both!

12 Likes

I suspect that Swift 6 will not push generics features "to their limits", but I do suspect that some work in this area will be prioritized especially where there is a compelling need that will empower users to write better APIs. For example, I mentioned variadic generics in my post.

I also would not interpret what I wrote above as an exhaustive list. I intentionally left some of the bullets open-ended. Specific investments will become more clear over time. I was mostly trying to touch on some key themes that touch on areas where Swift would benefit the most from investment.

28 Likes

Thank you for your honest answer. I haven‘t missed the mention about variadic generics (which likely have its origin from Combine and SwiftUI) and I understand that some of the unimplemented features are massive and would require a lot of time and effort to become reality. I was only wondering if generics won‘t be one of the official focus areas of Swift 6. ;)

1 Like

Great news. Congratulations to both new member of Swift core team.

Talking about machine learning, I hope the Swift core team would like to give a little bit more attention to the Swift for TensorFlow team. They have some ideas that could be considered to be part of Swift language feature regarding machine learning. For example, differentiable programming.

How about Apple's Combine and SwiftUI frameworks? Is it possible to make them work on other platforms as well?

6 Likes

I sent this post out in October that touched on this:

That was on behalf of the Core Team expressing support to pull that feature in the language through the normal evolution process.

8 Likes

That's up to Apple management, not the Swift Core Team, per se.

Excited to see so many goodies coming in the future. The new diagnostic is the blast! Great DSL is a blessing. Any chance Higher Kinded Types making its way to the list? Whenever we force to use AnyView or any other type erasure it feels like it is not what we want to do, but what we forced to do because of no HKT in place. We should give engineers all the tools to keep types expressive so the compiler will have all the data to deliver so much needed optimizations for Combine, SwiftUI and other things alike. It is clear from already made type decisions that this is chosen direction but the absence of HKTs leaves a huge hole in this strategy.

6 Likes