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