写点什么

Swift 1.0 发布:一门语言的演进历程

2014 年 9 月 10 日

Apple 宣布,适用于iOS 的Swift 1.0 已经达到GM 状态,开发者现在就可以开始提交使用Swift 编写的应用了。Apple 提到,该语言将继续“引入新特性、改进性能并精练语法”,就像该语言自6 月份的WWDC 2014 发布以来所经历的变化那样。

在适用于iOS 的版本达到GM 状态之前,Swift 已经经历了数个Beta 版本,除了修复一些不可避免的Bug,还逐步精练了该语言的语法和语义,同时提高了性能。

Swift 的语法和语义

每次发布 Beta 版本时,Apple 都会更新官方的《 Swift Language Reference 》,以便与语言的新特性保持同步。另一方面,Xcode 的发布说明中详细列出了 Swift 在相邻 Beta 版本之间发生的变化,不过其中夹杂着 Xcode 的所有修改。

这时候 Karol S. Mazur 创建的 GitHub 仓库 SwiftInFlux 就派上用场了,它支持以结构化方式一览 Swift 的所有修改。而且这个仓库特别有意义的地方在于,对于 Swift 的某些修改,它们意味着什么,为什么要加进来,我们可以看到 Swift 的创建者 Chris Lattner 的意见。

除了以简洁的方式列出 Xcode 的每个 Beta 版本对 Swift 所做的修改,该仓库还收集了一些修改请求,它们或者是在 Apple 开发者论坛讨论过的,或者是通过 Radar 报告给 Apple 的。在 1.0 之后版本的进一步开发中,Swift 可能会引入一些重要特性,如抽象方法、访问控制、C++ 支持和返回 nil 的初始化器等,不过 Apple 方面对此没有任何承诺。

Swift 的性能

在 Swift 最初对外宣布时,Apple 鼓吹速度是该语言最值得注意的特性之一,相对于Objective-C 有40% 的性能增加。不过几个开发者进行的一些最初测试显示,结果并非如此,除非使用-Ofast 编译器优化选项(不过该选项会去掉所有的运行时安全检查),否则有些情况下的性能还不如Python。这一发现引发了在线讨论,有些开发者暗示Swift 还处于发展之中,并评论说,Beta 版本存在性能问题并不是稀罕事。

确实,所有的性能问题早在上个月初发布的Xcode 6 beta 5 中都已经修复了。根据开发者 Jesse Squires 的报告,在 Xcode 6 beta 5 中,仍然使用测试最初发布版本时所用的测试算法,Swift 的性能首次在所有算法中都超过了 Objective-C。开启新的 -Ounchecked 优化选项,甚至会得到更好的结果,该选项替代了 -Ofast,这样其真正行为看上去就更为明显了。

Mike Ash 撰文详尽地分析了 Swift 胜过 Objective-C 的原因,他考虑到的因素有:得益于静态分派的更快的方法分派,由语言支持的更多内联函数调用的机会,因为不必在所有方法调用上处理 _cmd 隐式参数而带来的更高效的寄存器使用效率,指针别名分析可以优化多个指针指向同一内存区域的情况。

适用于 OS X 的 Swift

适用于 OS X 的 Swift 尚未达到 GM 状态,不过这是因为它要依赖 Yosemite SDK。Apple 介绍说,当 Yosemite 达到 GM 状态时,适用于 Mac 的 Swift 也将达到 GM 状态。在此期间,开发者可以下载 Xcode 6.1 的 Beta 版本,使用 Swift 构建 Mac 应用。Apple 在宣布 Swift 时提到,到 Yosemite 达到 GM 状态时,Xcode 6.1 还将对 Swift 做些改进。可以预见会存在不兼容问题,不过不管语言定义方面有何修改,“因为今天的应用中嵌入了一个 Swift GM 运行时版本,所以未来可以继续很好地运行”。

查看英文原文: Swift Turns 1.0: The Evolution of a Language

2014 年 9 月 10 日 10:501659
用户头像
臧秀涛 极客邦科技技术会议负责人

发布了 300 篇内容, 共 114.2 次阅读, 收获喜欢 21 次。

关注

评论

发布
暂无评论
发现更多内容

如何用一台 MacBook 创造高额年化收益 | ETH2.0 Staking 教程

陈东泽 EuryChen

区块链 Ethereum

[ARTS打卡] week 02

Mau

ARTS 打卡计划

【架构师训练营-作业-1】食堂就餐卡系统设计

小动物

系统设计 极客大学架构师训练营 作业

极客时间-架构师培训-1期作业

Damon

食堂就餐卡系统设计-uml练习

森林

程序员的晚餐 | 6 月 4 日 最好吃的土豆

清远

【ARTS打卡】Week02

Rex

Flink源码分析之FlinkConsumer是如何保证一个partition对应一个thread的

shengjk1

flink flink 消费 kafka 实时计算 flink源码分析

2020年6月7日 接口、lambda表达式与内部类

瑞克与莫迪

《OKR工作法》读书笔记

大饼土博

读书笔记 管理 OKR

不可不知的 7 个 JDK 命令

武培轩

Java 程序员 jdk 后端 JVM

架构师训练营-命题作业1

水边

极客大学架构师训练营

利其器

宋胖子

IDEA

因为 MongoDB 没入门,我丢了一份实习工作

沉默王二

mongodb

程序员摆地摊?你别痴心妄想了,还不如当「在地青年」呢

非著名程序员

程序员 提升认知 职业规划 认知提升

Java 25周年:波澜壮阔的25年

北风

「Java 25周年」

Flink源码分析之-如何保存 offset

shengjk1

Flink源码分析之Flink startupMode是如何起作用的

shengjk1

flink flink 消费 kafak 实时计算 flink源码 flink源码分析

人人都是产品经理

二鱼先生

产品经理 个人品牌 职场成长 产品思维

Flink源码分析之Flink 自定义source、sink 是如何起作用的

shengjk1

flink flink源码 flink源码分析 flink自定义source flink自定义sink

软件架构第一章总结

itrickzhang

程序员的晚餐 | 6 月 5 日 爆炒鱿鱼

清远

美食

UML练习1 食堂就餐卡系统设计「架构师训练营」

Young

架构师训练营-每周学习总结1

水边

极客大学架构师训练营

Flink源码分析之Flink是如何kafka读取数据的

shengjk1

flink flink 消费 kafka flink源码分析 flink消费kafka源码解析

优秀架构师具备的能力

阿飞

极客大学架构师训练营

架构文档

陈皮

架构 极客大学架构师训练营

教你动手写UDP协议栈

Rice嵌入式开发技术分享

TCP udp 协议栈

repo 导出本地 git tag 给他人

zqb-all

git

ARTS 第 1 周

乌拉里

ARTS 打卡计划

架构师训练营第一周学习总结

王鑫龙

极客大学架构师训练营

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

Swift 1.0发布:一门语言的演进历程-InfoQ