FCon7折倒计时最后一周:日程已上线70%!查看详情>>> 了解详情
写点什么

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

  • 2014-07-06
  • 本文字数:1347 字

    阅读完需:约 4 分钟

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 )关注我们,并与我们的编辑和其他读者朋友交流。

2014-07-06 05:023108
用户头像

发布了 75 篇内容, 共 61.5 次阅读, 收获喜欢 6 次。

关注

评论

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

设计模式之学习命令模式

乌龟哥哥

5月月更

Druid 连接池源码阅读 08

石小天

【架构训练营】模块一作业

知北游

架构实战营模块 1 作业

Naoki

架构实战营

[模块一作业]

wuli洋

学生管理系统架构设计

Geek_e8bfe4

五、浅谈容器逃逸

穿过生命散发芬芳

5月月更 容器逃逸

架构训练营 模块一作业

小马

「架构实战营」

Java Optional 初始为空

HoneyMoose

5月25日,阿里云开源 PolarDB-X 将迎来重磅升级发布

阿里云数据库开源

开源 开源数据库 国产数据库 PolarDB-X 数据库·

贝叶斯网络

5月月更

LSM-Tree - LevelDb 源码解析

懒时小窝

Lsm LSM树 LSM-Tree level

ffmpeg命令参数类型

Loken

音视频 5月月更

FinClip SaaS 版本重磅上线,打开全行业技术普惠大门

Geek_99967b

SaaS 小程序容器 小程序开发

从Flutter浅谈跨平台移动开发框架

Geek_99967b

flutter 移动开发 小程序开发

学生管理系统架构设计

Justin1024

druid 源码阅读 8——过一下流程图的init

张大彪

正则表达式知识点梳理

真嗣

正则表达式

微信业务架构图和学生管理系统架构设计

Geek_7a789a

JavaWeb MyBatis

Emperor_LawD

mybatis javaWeb 5月月更

亚马逊AWS特约评委揭秘FinClip黑客松获胜秘诀

Geek_99967b

hackathon 小程序开发

架构实战营-模块1作业

Gavin.Yang

Fruity Loops Studio20.9中文版水果软件

茶色酒

FL STUDIO20.9 FL Studio

架构实战营 7 期「模块一」为何架构设计能力难以提升

Steve_bot

极客训练营模块一作业

Geek__猫猫头

架构实战营 - 第 6 期 模块六课后作业

乐邦

「架构实战营」

[ kitex 源码解读 ] 限流

baiyutang

Go 微服务 云原生 5月月更 kitex

《卡片笔记写作法》:用卡片积累思考

郭明

druid 源码阅读(九)Druid removeAbandoned参数

爱晒太阳的大白

5月月更

在FinClip Hackathon中夺冠是一种什么样的体验?

Geek_99967b

hackathon 小程序开发

代码之外:关于校招 Offer 选择的问题

宇宙之一粟

offer 代码之外 5月月更

  • 扫码添加小助手
    领取最新资料包
苹果的Swift:iOS和OSX上的高性能高级语言_移动_Alex Blewitt_InfoQ精选文章