diff --git a/gsoc2025/index.md b/gsoc2025/index.md index 1d67e8d11..2ecea890a 100644 --- a/gsoc2025/index.md +++ b/gsoc2025/index.md @@ -36,6 +36,32 @@ Potential mentors, please feel free to propose project ideas to this page direct You can browse previous year's project ideas here: [2024](https://www.swift.org/gsoc2024/), [2023](https://www.swift.org/gsoc2023/), [2022](https://www.swift.org/gsoc2022/), [2021](https://www.swift.org/gsoc2021/), [2020](https://www.swift.org/gsoc2020/), [2019](https://www.swift.org/gsoc2019/). + +### Re-implement property wrappers with macros + +**Project size**: 350 hours + +**Estimated difficulty**: Intermediate + +**Recommended skills** + +- Proficiency in Swift and C++ + +**Description** + +[Property wrappers](https://github.com/swiftlang/swift-evolution/blob/main/proposals/0258-property-wrappers.md) feature is currently implemented purely within the compiler but with the addition of [Swift Macros](https://github.com/swiftlang/swift-evolution/blob/main/proposals/0389-attached-macros.md) and [init accessors](https://github.com/swiftlang/swift-evolution/blob/main/proposals/0400-init-accessors.md) it's now possible to remove all ad-hoc code from the compiler and implement property wrappers by using existing features. + +This work would remove a lot of property wrapper-specific code throughout the compiler - parsing, semantic analysis, SIL generation etc. which brings great benefits by facilitating code reuse, cleaning up the codebase and potentially fixing implementation corner cases. Macros and init accessors in their current state might not be sufficient to cover all of the property wrapper use scenarios, so the project is most likely going to require improving and expanding the aforementioned features as well. + + +**Expected outcomes/benefits/deliverables** + +The outcome of this project is the complete removal of all property wrappers-specific code from the compiler. This benefits the Swift project in multiple areas - stability, testability and code health. + +**Potential mentors** + +- [Pavel Yaskevich](https://github.com/xedin) + ### Example project name **Project size**: N hours