砥砺前行的服务端 Swift 路在何方



 作者 | Tim Condon 来源 | https://www.timc.dev/

长久以来,我都想写写服务端 Swift 这个主题。我知道到涉及这个主题时,自己会带有强烈的个人意识。对于服务端 Swift,我是非常乐观甚至于盲目,同时我也是利益相关者。我相信比起大多数人来,我在这方面更富经验。我希望这个帖子能引发很多讨论,所以,读者可以将其转发到 twitter、reddit 和 Hacker News。

在从 ServerSide.swift 会议回来后,我考虑写点东西。首先介绍一下,ServerSide.swift 是一个国际会议,其主题是围绕服务端 Swift。这是社区中专注于服务端开发的所有人都可以参加的会议。在这里有非常技术性的讲座,例如 gRPC 和 testing NIO systems。这个会议非常不错,演讲者的阵容非常强大,在整个社区引起很大反响。最近我辞掉了原来的工作,全心投入与服务端 Swift 相关的工作,我对这个选择感到非常满意!

IBM 和 Kitura

然而就在这一个月后,IBM 悄悄宣布他们将退出 Swift。对于社区,尤其是使用 Kitura 并投入其中的每个人,这都是一个巨大的打击。除此之外,IBM 没有正式宣布就退出的行为给许多人留下了不好的印象。

看到 IBM 退出服务端领域的 Swift 真是可惜。竞争永远是好的,人们应该记住 IBM 为使服务器端 Swift 变得可行而付出的巨大努力。在 IBM 宣布退出之后,有很多人以此为标志,说服务端上的 Swift 已死。毕竟,如果 IBM 都放弃了,那其他人为什么要继续呢?

2020 - Server 之年

需要明确的是,我并不是说在服务端使用Swift时,一切都是完美的。由于现有的方案并不成熟,所以出现了很多问题。使用 Linux 开发,崩溃处理,缺乏操作系统支持,调试,SwiftPM 特性 -- 所有这些都会有问题,从而让事情变得更困难。可以这么说,就在不久之前,我甚至还不建议你在服务端使用 Swift。

不过从今年 1 月开始,出现了一些重大变化,让服务端 Swift 重现光明。在 1 月底,Ted Kremenek 在 Swift 论坛上发表了 On the road to Swift 6。与其说这是 Swift 6 路线图,不如说是服务端 Swift 的发展路线图。Swift 6 的每个目标都直接或者间接与服务端有关。诸如新的操作系统支持,LSP 改进,构建时间和依赖管理之类的改进。清单中的内容还在增加,而对我而言,真正的并发模型是服务端 Swift 缺少的最后一块内容。

为了表示重视,Swift 核心团队增加了两名新成员。Tom Doron 主要负责 SwiftNIO 和 Swift 服务端工作组,而 Saleem Abdulrasool 几乎以一人之力将 Swift 迁移到 Windows 上。两人在核心团队中代表着 Apple 生态以外的平台对 Swift 团队的重要性。

几天后,Mishal Shah 在论坛上发布公告,宣布每晚都会有新的 Swift Docker 镜像。尽管这对大多数开发人员并没有影响,但这一举动却很重要。这允许你测试 Swift 和 Foundation 中的更改,而无需编译 Swift 或安装新的工具链。这样,framework 开发人员可以轻松地使用 Swift 的预发布版本测试代码。

核心团队每月还会发布 Linux 版的 Swift,这一工作已经持续了一年多。从 Swift 4.2.2 开始,这一工作为快速修复 Foundation 的问题提供了新渠道,而不必等待 Xcode 的发布。同时,这也让 Linux 比 MacOS 能够更早获取 Swift 版本。

Swift Crypto 依然还有些问题。比如,它不支持 RAS 密钥或 PEM/DER 密钥。在 95% 的服务端场景中,这是有问题的。目前的解决方案是使用 BoringSSL。这当然说明 Swift 的不成熟,不过 Swift Crypto 团队正在解决这个问题。

好消息不断。本月初,论坛上公布了 Swift 的 Google Summer of Code 项目。公开的四个项目中,有两个是直接致力于服务端和 Linux 侧的改进。

最后,Tom Doron 宣布将支持更多的 Linux 版本。这对 Swift 来说是一大步,因为这可以让你在自己使用的系统上更容易运行 Swift。许多公司都会基于不同的操作系统构建基础架构和工具集。如果将 Swift 局限于 Ununtu,那么会丢失许多企业用户。现在,Swift 可以支持 Amazon Linux,这样甚至为 Lambda 之类的事物开辟了新机会。

同时,Amazon 也发布了 Smoke Framework 2.0。像 Amazon 这样的公司能投入到服务端 Swift,这简直太棒了。

不局限于服务端的 Swift

上面的内容都是关于服务端 Swift 的好消息,不过还有一些非服务端的使用场景也开始盛行起来。最明显的是 Swift 版的 Tensorflow。使用 Swift 来做机器学习似乎有点奇怪,而 Google 会选择 Swift 作为主要的 ML 语言则更奇怪。但是,这个选择却有充分的理由。Tryolabs 最近深入探讨了其原因、背景和优势 https://tryolabs.com/blog/2020/04/02/swift-googles-bet-on-differentiable-programming/ 。这可能不适合你,但还是可以从中受益。

首先是改善语言本身。S4TF 团队需要对 Swift 和编译器进行一些重大更改,以添加类似于微分编程和与 Python/C++ 互操作等功能。而这些功能已被合并到 Swift 官方版本中,任何人都可以使用。能看到 Apple 之外为 Swift 团队开发出色的工具,简直是太赞了。

其次,文章分享了很多思想。在 Apple 生态之外有一个使用并促进 Swift 发展的大项目是很重要的。这向外界声明,Swift 不仅仅是 the Apple language ,也不仅仅是编写 iOS 应用程序的语言。

让 Swift 支持 Web 客户端则还需要大量工作。SwiftWasm 项目可以用来编写 Swift,并在支持 WebAssembly 的浏览器中使用它。这意味着在 Web 端可以用 Swift 来代替 Javascript。尽管这才处于初期阶段,需要将大量工作带回 Swift,但却非常有希望,你可以立即尝试一下 SwiftWasm。

展望

服务端Swift的发展很快,而今年会是加速发展。我期待一下我们会看到更多受支持的Linux发行版以及对该语言的进一步改进。尽管我不认为 Swift 6 和 async/await 会在今年发布。Vapor 4 的发布是向前迈出的又一步,涵盖了 SSWG 的许多工作。SSWG 还发布了一些有关构建,部署和调试最佳实践的指南。这些绝对值得一试。

需要记住的是,Swift 还很年轻。它在 2015 年底才开源。Go是一种“新”语言,但它于 2009 年首次发布。Rust 是另一种引起广泛关注的语言,于 2010 年首次发布。Swift 正在追赶这些“前辈”,所以在比较时应考虑到这一点。无论发生什么,对于服务端 Swift 来说 2020 都是非常有趣的一年。未来绝对是美好的!


0