swift-evolution
This maintains proposals for changes and user-visible enhancements to the Swift Programming Language.
Top Related Projects
The Swift Programming Language
The Package Manager for the Swift Programming Language
A set of Swift libraries for parsing, inspecting, generating, and transforming Swift source code.
Straightforward, type-safe argument parsing for Swift
Event-driven network application framework for high performance protocol servers & clients, non-blocking.
Empowering everyone to build reliable and efficient software.
Quick Overview
The swift-evolution
repository is the home of the Swift programming language's evolution process. It contains proposals, discussions, and decisions related to the ongoing development and improvement of the Swift language. The repository serves as a platform for the Swift community to collaborate on the future of the language.
Pros
- Community-Driven Development: The
swift-evolution
process allows the Swift community to actively participate in shaping the language's direction, ensuring that it evolves to meet the needs of developers. - Transparency: The repository provides a transparent and open platform for discussing and documenting the evolution of the Swift language, fostering collaboration and accountability.
- Iterative Improvement: The iterative nature of the
swift-evolution
process allows for gradual and well-considered changes to the language, ensuring a stable and coherent evolution. - Language Stability: The careful review and approval process for language changes helps maintain the stability and consistency of the Swift programming language.
Cons
- Complexity of the Process: The
swift-evolution
process can be complex, with multiple stages and requirements for proposals, which may be a barrier for some community members. - Potential for Slow Progress: The thorough review and approval process can sometimes lead to a slower pace of language evolution, which may frustrate developers who want to see faster changes.
- Potential for Disagreements: As with any community-driven process, there may be disagreements and debates around the direction of the language, which can slow down the decision-making process.
- Limited Influence for Individual Developers: While the process is open to the community, individual developers may feel that their voice is not as impactful as they would like it to be.
Getting Started
To get started with the swift-evolution
repository, you can follow these steps:
- Visit the swift-evolution repository on GitHub.
- Browse the existing proposals and discussions to familiarize yourself with the ongoing evolution of the Swift language.
- If you have an idea for a language change or improvement, review the proposal process to understand the requirements and guidelines for submitting a new proposal.
- Once you have a proposal in mind, create a new issue or pull request in the repository, following the provided templates and guidelines.
- Participate in the discussion and review process, providing feedback and engaging with the community to help shape the future of Swift.
Competitor Comparisons
The Swift Programming Language
Pros of swift
- Contains the actual Swift compiler and standard library implementation
- Allows direct contributions to the Swift language codebase
- Provides a comprehensive test suite for Swift language features
Cons of swift
- Larger and more complex codebase, potentially harder for newcomers to navigate
- Requires more technical expertise to contribute effectively
- Changes need to go through a more rigorous review process
Code comparison
swift:
public struct String {
@usableFromInline
internal var _guts: _StringGuts
public init() {
self._guts = _StringGuts()
}
}
swift-evolution:
# String Improvements
* Proposal: [SE-0163](0163-string-revision-1.md)
* Authors: [Ben Cohen](https://github.com/airspeedswift), [Dave Abrahams](https://github.com/dabrahams)
* Review Manager: [John McCall](https://github.com/rjmccall)
* Status: **Implemented (Swift 4.0)**
* Implementation: [apple/swift#8719](https://github.com/apple/swift/pull/8719)
The swift repository contains the actual implementation of the String struct, while swift-evolution contains proposals and discussions about language improvements, such as the String revision proposal shown above.
The Package Manager for the Swift Programming Language
Pros of swift-package-manager
- Focused on package management and dependency resolution
- Provides practical tools for Swift developers to manage projects
- Actively maintained with frequent updates and bug fixes
Cons of swift-package-manager
- Narrower scope compared to the broader language evolution discussions
- Less community involvement in decision-making processes
- More technical and implementation-focused, potentially less accessible to non-developers
Code comparison
swift-package-manager:
import PackageDescription
let package = Package(
name: "MyPackage",
dependencies: [
.package(url: "https://github.com/example/example-package.git", from: "1.0.0"),
]
)
swift-evolution:
struct SE0001_AllowTrailingClosures: SwiftEvolutionProposal {
static let id = 1
static let status = .implemented(version: "3.0")
static let title = "Allow (most) keywords as argument labels"
}
The swift-package-manager code demonstrates package configuration, while swift-evolution showcases proposal metadata structures.
A set of Swift libraries for parsing, inspecting, generating, and transforming Swift source code.
Pros of swift-syntax
- Focuses specifically on Swift syntax parsing and manipulation
- Provides a more targeted and specialized toolset for syntax-related tasks
- Offers a comprehensive API for working with Swift source code programmatically
Cons of swift-syntax
- Narrower scope compared to swift-evolution's broader focus on language evolution
- May require more technical expertise to utilize effectively
- Less community involvement in discussions and proposals
Code Comparison
swift-syntax:
import SwiftSyntax
let sourceFile = try SyntaxParser.parse(source: "let x = 5")
let variable = sourceFile.statements.first?.item.as(VariableDeclSyntax.self)
print(variable?.bindings.first?.pattern)
swift-evolution:
// No direct code comparison available as swift-evolution
// is primarily focused on language proposals and discussions
// rather than providing a code-level API
Summary
Swift-syntax is a specialized tool for working with Swift syntax, offering powerful APIs for parsing and manipulating Swift code. Swift-evolution, on the other hand, serves as a platform for discussing and proposing changes to the Swift language itself. While swift-syntax provides more direct code-level functionality, swift-evolution offers a broader perspective on the language's development and future direction.
Straightforward, type-safe argument parsing for Swift
Pros of swift-argument-parser
- Focused on command-line argument parsing, providing a more specialized and user-friendly solution
- Offers a declarative approach to defining command-line interfaces, simplifying implementation
- Includes built-in support for generating help text and error messages
Cons of swift-argument-parser
- Limited scope compared to swift-evolution, which covers broader language changes
- May require additional dependencies for more complex command-line applications
- Less community involvement in the development process
Code Comparison
swift-argument-parser:
struct Example: ParsableCommand {
@Argument(help: "The name to greet")
var name: String
func run() throws {
print("Hello, \(name)!")
}
}
swift-evolution:
struct Example {
let name: String
init(name: String) {
self.name = name
}
func greet() {
print("Hello, \(name)!")
}
}
The swift-argument-parser example demonstrates its declarative approach to defining command-line interfaces, while the swift-evolution example shows a more traditional Swift structure without specific command-line parsing features.
Event-driven network application framework for high performance protocol servers & clients, non-blocking.
Pros of swift-nio
- Focused on high-performance networking and I/O operations
- Provides a robust foundation for building server-side Swift applications
- Actively maintained and regularly updated by Apple
Cons of swift-nio
- More complex and specialized compared to swift-evolution
- Steeper learning curve for developers new to networking concepts
- Limited scope, primarily focused on networking rather than language evolution
Code Comparison
swift-nio example:
let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
let bootstrap = ServerBootstrap(group: group)
.serverChannelOption(ChannelOptions.backlog, value: 256)
.childChannelInitializer { channel in
channel.pipeline.addHandler(EchoHandler())
}
swift-evolution example:
struct MyProposal: Proposal {
static let title = "Add a new feature to Swift"
static let status = .awaitingReview
static let proposal = SE0999()
static let authors = ["John Doe"]
}
Summary
While swift-evolution focuses on the Swift language's development process and proposals, swift-nio is a specialized networking framework. swift-nio offers powerful tools for building high-performance networking applications but has a narrower scope compared to swift-evolution's broader impact on the Swift language itself.
Empowering everyone to build reliable and efficient software.
Pros of Rust
- More mature and established project with a larger community
- Focuses on the entire language implementation, not just proposals
- Offers a more comprehensive view of the language's development
Cons of Rust
- Larger codebase, potentially more challenging for newcomers to navigate
- Less focused on language evolution proposals compared to Swift Evolution
- May require more time to understand the project structure and contribute
Code Comparison
Swift Evolution (proposal example):
public struct SE0001_AllowTrailingClosures {
public static let proposal = Proposal(
number: 1,
status: .implemented(version: "3.0"),
title: "Allow (most) keywords as argument labels",
description: """
Swift should allow the use of all keywords except `inout`, `var`, and `let` as argument labels.
"""
)
}
Rust (language feature implementation):
pub fn allow_keywords_as_identifiers(input: &str) -> bool {
match input {
"inout" | "var" | "let" => false,
_ => true
}
}
The Swift Evolution repository focuses on language proposals, while the Rust repository contains the actual implementation of language features. Swift Evolution's code is more structured around proposal documentation, whereas Rust's code directly implements language functionality.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Swift Evolution
https://www.swift.org/swift-evolution/
This repository tracks the ongoing evolution of the Swift programming language, standard library, and package manager.
Goals and Release Notes
Version | Announced | Released |
---|---|---|
Swift 6.0 | 2024-02-22 | |
Swift 5.10 | 2023-08-23 | 2024-03-05 |
Swift 5.9 | 2023-03-06 | 2023-09-18 |
Swift 5.8 | 2022-11-19 | 2023-03-30 |
Swift 5.7 | 2022-03-29 | 2022-09-12 |
Swift 5.6 | 2021-11-10 | 2022-03-14 |
Swift 5.5 | 2021-03-12 | 2021-09-20 |
Swift 5.4 | 2020-11-11 | 2021-04-26 |
Swift 5.3 | 2020-03-25 | 2020-09-16 |
Swift 5.2 | 2019-09-24 | 2020-03-24 |
Swift 5.1 | 2019-02-18 | 2019-09-20 |
Swift 5.0 | 2018-09-25 | 2019-03-25 |
Swift 4.2 | 2018-02-28 | 2018-09-17 |
Swift 4.1 | 2017-10-17 | 2018-03-29 |
Swift 4.0 | 2017-02-16 | 2017-09-19 |
Swift 3.1 | 2016-12-09 | 2017-03-27 |
Swift 3.0 | 2016-05-06 | 2016-09-13 |
Swift 2.2 | 2016-01-05 | 2016-03-21 |
Top Related Projects
The Swift Programming Language
The Package Manager for the Swift Programming Language
A set of Swift libraries for parsing, inspecting, generating, and transforming Swift source code.
Straightforward, type-safe argument parsing for Swift
Event-driven network application framework for high performance protocol servers & clients, non-blocking.
Empowering everyone to build reliable and efficient software.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot