Hacker News 中文摘要

RSS订阅

Swift是更便捷的Rust -- Swift is a more convenient Rust

文章摘要

文章认为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-catchtry语法,本质与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因其性能和安全模型受到推崇,但学习曲线较高。跨平台开发和开源生态是讨论的焦点。