文章摘要
文章认为Swift是更便捷的Rust,两者在所有权模型、函数式特性等方面相似,但Swift通过自动引用计数等机制提供了更友好的开发体验,同时都基于LLVM编译器。作者在同时学习两种语言时发现Swift像是Rust的便捷版本。
文章总结
Swift:更便捷的Rust
(本文最初发表于作者旧博客)
作者在学习Rust的过程中,发现Swift与Rust有着惊人的相似性。两者都具备函数式语言的优秀特性,如带标签的枚举、模式匹配表达式和一等函数,同时拥有强大的泛型类型系统。它们都基于LLVM编译器,能编译为原生代码和WASM,且无需垃圾回收机制即可实现完全的类型安全。
核心差异在于设计理念:
- Rust是自底向上的系统语言,默认采用所有权机制,需要显式处理值的移动和借用,而使用Cow等智能指针需要额外操作。
- Swift是自顶向下的高级语言,默认采用写时复制的值类型,简化了常见操作,仅在需要性能优化时才引入所有权机制。
语法伪装大师:
Swift巧妙地将函数式概念隐藏在类C语法中。例如:
- 模式匹配通过switch语句实现(实际是表达式)
- 可选类型T?替代Option<T>,支持if let解包
- 错误处理采用do-catch和try语法,本质与Rust的Result类型相同
编译器行为对比:
- Rust强制显式处理递归类型(如使用Box)
- Swift通过indirect关键字自动管理递归枚举
语言特性差异: Swift作为Objective-C的替代者,包含更多实用功能: - 类/继承、async-await、Actor模型 - 属性包装器、结果构造器(用于SwiftUI等) - 但这也导致语言复杂度较高
性能与适用场景: - Rust默认更高效,适合系统/嵌入式开发 - Swift默认更便捷,适合UI/服务端开发 - 两者应用领域正在扩大重叠
跨平台进展: Swift已突破苹果生态限制: - 支持Windows(Arc浏览器)、Linux(服务器开发) - 编译为WASM,嵌入式开发(如Playdate掌机) - 基金会库已开源并跨平台
现存问题: - 编译时间较长 - 语言特性膨胀 - 包生态系统不如Rust丰富
结论: Swift正成为跨平台开发的实用选择,它提供了无GC、自动引用计数等特性,并能通过所有权机制优化性能。虽然仍有不足,但已展现出作为"更便捷的Rust"的潜力。
(文末附Swift官方推文,展示其在VSCode中的开发体验提升)
评论总结
评论总结
1. Swift与Rust的比较
支持Swift的观点:认为Swift更易用、学习曲线更低,适合UI和服务器开发,内存管理方式与Rust相似但更简洁。
- 引用:"I find writing Swift is faster for me, and it’s easier to learn for people than Rust." (评论3)
- 引用:"Swift is better for writing UI and servers and some parts of compilers and operating systems." (评论9)
反对Swift的观点:认为Rust的零成本抽象和所有权模型更优,Swift的工具链和跨平台支持不足。
- 引用:"Rust invented the concept of ownership... What Rust adds is a compile-time borrow checker." (评论25)
- 引用:"Swift is a neat language, but it’s a hard sell for server-side software." (评论23)
2. 工具链与开发体验
批评Xcode和SPM:认为Xcode性能差,SPM不如Cargo方便。
- 引用:"Xcode. A really rough ide that has a hard time at scale." (评论8)
- 引用:"Build systems. Cargo is much easier to work with than SPM." (评论8)
跨平台问题:Swift在非Apple平台上的生态和工具支持不足。
- 引用:"How good is the developer experience on a non-Apple platform really?" (评论14)
- 引用:"947.6 MiB ! I wonder why is that..." (评论22)
3. 语言特性与设计
内存管理:Swift的ARC与Rust的所有权模型对比。
- 引用:"Swift uses subtyping, while Rust uses typeclasses." (评论19)
- 引用:"Swift’s bidirectional type inference causes a ton of choking on complex expressions." (评论8)
异步编程:Swift的异步支持被批评为混乱。
- 引用:"async is a mess, it feels like they come up with a new async library every release." (评论10)
4. 社区与生态
- 开源与公司控制:担心Swift受Apple控制,生态不如Rust开放。
- 引用:"I would rather use Rust for the fact it's development is not tied to a big tech company." (评论4)
- 引用:"Given their stance against free and open source software, I wouldn't be too thrilled to pick Swift." (评论23)
5. 其他观点
- 替代语言建议:推荐Go、Kotlin等作为更实用的选择。
- 引用:"If Rust is too low level for you, you can write Go or Kotlin." (评论15)
- 引用:"MoonBit lang is better 'better Rust' than Swift." (评论29)
总结
评论中对Swift的评价两极分化:支持者认为其语法友好、适合特定场景(如Apple生态),而反对者则批评其工具链、跨平台支持和公司依赖性。Rust因其性能和安全模型受到推崇,但学习曲线较高。跨平台开发和开源生态是讨论的焦点。