苹果的 Swift:iOS 和 OSX 上的高性能高级语言

  • Alex Blewitt
  • 丛一

2014 年 7 月 6 日

话题:移动AppleiOS语言 & 开发

WWDC 2014大会上,苹果宣布发布Swift的 beta 版本。这是一种新的程序设计语言,将在今年晚些时候与 iOS 8 和 OSX Yosemite 一起面世。对 JavaScript 开发者来说,Swift 将会是一种看上去比较熟悉的高级程序设计语言,不过它是用LLVM编译生成 OSX 和 iOS 上的高性能可执行代码的。

苹果已经在 LLVM 技术上进行了巨大的投入,这种技术提供了一个抽象的指令集,可以被翻译成适用于特定的计算机体系结构的指令集。Clang 替代 GCC 成为 C 和 Objective-C 程序的默认编译器,这两种语言的程序都由 Clang 转换成 LLVM 指令,再由 LLVM 对其进行优化并转换成目标平台的可执行代码。Swift 这种新的程序设计语言也采用同样的方式生成 LLVM 字节码,并且可以和已有的 Objective-C 应用和库共存。

另外,Swift 中还包含用于测试代码的 REPL 环境。REPL 环境通常用于 Javascript 或 Python 这类解释执行语言,提供读取 - 求值 - 输出循环(Read-Evaluate-Print Loop),可以在命令行中对单个的表达式或语句求值,便于开发人员进行调试。Swift 强大的循环,字符串插值(string interpolation)和打印 / 调试选项,让开发人员可以以交互的方式完成开发和测试,这是 C 和 Java 这类编译式语言通常比较欠缺的。

Swift 是强类型语言,尽管它使用类型推断(type inference)减少由开发人员键入的字符数量。可以显式地提供类型,对于数字类型,可以指定大小,如 UInt8 和 Int32。类型引擎还提供可选值类型(Optional valued types);基于该值是否存在的预期,可以使用? 或! 对可选值解除引用。在 Swift 中,集合支持以字面量形式定义数组(用 [])和字典 / 映射,并且可以包含泛型类型。

函数也是 Swift 中的第一等元素,可以作为变量传递给其他元素。参数可以被显式的命名(这样就可以兼容 Objective-C 的命名参数)或仅作为位置参数。参数可以设定缺省值,在不需要的情况下可以不传入。

Swift 中可以使用 Objective-C 的对象,包括标准库(如 UIKit 或 Cocoa)和用户自定义类型。Swift 中也可以创建原生的类(这些类也可以被 Objective-C 程序使用),并且像其他 Objective-C 对象一样,也是引用计数的。(这些引用由运行时自动管理,使用者不需要直接关心 Swift 中的内存管理。)在 Swift 中,可以创建结构体(struct)值类型,这种类型可以通过值拷贝的方式传递给函数类型,而类则是引用类型。

最后,通过使用元组(tuples),Swift 可以有多个返回类型。这些元组可以被用于语义匹配(使用 case 语句)或变量赋值。

Swift 已经包含在 XCode 6 开发者预览版中,并且将在接下来的几个月内正式发布。目前还没有确定 Swift 语言是否会被整合到上游的 LLVM 中,不过 LLVM 最近已经融合了 ARM 64 位的支持,并且正在致力于对 Safari 的 Javascript JIT 引擎的支持,基于 LLVM 的上游 Clang 运行时很有可能将包含对 Swift 的部分支持。如此一来,对于其他的架构,只要有支持它的 Clang 编译器,就可以为其编写 Swift 程序。

查看英文原文:Apple Releases Swift, a High-performance High-level Language for iOS and OSX


感谢臧秀涛对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

移动AppleiOS语言 & 开发