苹果新贵 Swift 以前世此生

摘要 : 作为一个70后程序员,克里斯前后发明了 LLVM、Clang 和 Swift,请问你作了什么?

 

上 周出差劳顿,这篇文章几回动笔都未完成,经常躺倒床上就昏睡过去。南方的天气闷热潮湿,让我感到极度的不适应,等到回到北方,天高云清,空气干爽,让人产 生一种「解放区的天是明朗的天」的感受,我甚至以为本身的手机、Pad 和 Mac 都满血复活了……直到有人提醒说它们是由于充电和网速的缘由。好吧,南方酒店的网络还真叫慢啊……前端

如下是正文:ios

………………程序员

2010年的夏天,Chris Lattner 接到了一个不一样寻常的任务:为 OS X 和 iOS 平台开发下一代新的编程语言。那时候乔布斯还在以带病之身掌控着庞大的苹果帝国,他是否参与了这个研发计划,咱们不得而知,不过我想他至少应该知道此事, 由于这个计划是高度机密的,只有极少数人知道,最初的执行者也只有一我的,那就是 Chris Lattner。算法

从2010年的7月起,克里斯(Chris)就开始 了无休止的思考、设计、编程和调试,他用了近一年的时间实现了大部分基础语言结构,以后另外一些语言专家加入进来持续改进。到了2013年,该项目成为了苹 果开发工具组的重中之重,克里斯带领着他的团队逐步完成了一门全新语言的语法设计、编译器、运行时、框架、IDE 和文档等相关工做,并在2014年的 WWDC 大会上首次登台亮相便震惊了世界,这门语言的名字叫作:「Swift」。编程

根据克里斯我的博客(http://nondot.org/sabre/ )对 Swift 的描述,这门语言几乎是他凭借一己之力完成的。这位著名的70后程序员同时仍是 LLVM 项目的主要发起人与做者之1、Clang 编译器的做者,能够说 Swift 语言和克里斯以前的软件做品有着千丝万缕的联系。swift

一样是70后程序员,差异怎么那么大呢?后端

关于做者

克 里斯能够说是天才少年和好学生的代名词,他在2000年本科毕业以后,继续攻读计算机硕士和博士。但克里斯并非宅男,学习之余他手捧「龙书」游历世界, 成为德智体美劳全面发展的好学生。以后就是一篇又一篇的发表论文,硕士毕业论文即提出了一套完整的运行时编译思想,奠基了 LLVM 的发展基础,读博期间 LLVM 编译框架在他的领导下获得了长足的发展,已经能够基于 GCC 前端编译器的语义分析结果进行编译优化和代码生成,因此克里斯在2005年毕业的时候已是业界知名的编译器专家了。数组

注:不少计算机专业的大学生常常问我在大学里学点什么好,看看克里斯就好了。以目前的科技信息开放程度,若是你在本身感兴趣的领域里用心耕耘,再加上那么一点点天分,毕业时成为某一个专有领域的专家应该不是问题。那时就不是你满世界去找工做了,而是工做满世界来找你!安全

克里斯毕业的时候正是苹果为了编译器焦头烂额的时候,由于苹果以前的软件产品都依赖于整条 GCC 编译链,而开源界的这帮大爷并不买苹果的账,他们不肯意专门为了苹果公司的要求优化和改进 GCC 代码,因此苹果一怒之下将编译器后端直接替换为 LLVM,而且把克里斯招入麾下。克里斯进入了苹果以后如鱼得水,不只大幅度优化和改进 LLVM 以适应 Objective-C 的语法变革和性能要求,同时发起了 CLang 项目,旨在全面替换 GCC。这个目标目前已经实现了,从 OS X10.9和 XCode 5开始,LLVM+GCC 已经被替换成了 LLVM+Clang。服务器

Swift 是克里斯在 LLVM 和 Clang 以后第三个伟大的项目!

关于语言

2007 年以前,Objective-C 一直是苹果自家院落的小众语言,可是 iOS 移动设备的爆发让这门语言的普及率得到了火箭通常的蹿升速度,截止到今天,Objective-C 在编程语言排行榜上排名第三,江湖人称三哥,大哥二哥分别是 C 和 Java 这样的老牌语言。同时,苹果在2012年和2013年分别对 Objective-C 进行了大规模的优化和升级改进,增长了各类现代语言的特性,让编写 App 更加容易,更多的程序员投入到了 App Store 的生态圈里……

在这种状况下,苹果公司为何会发布一门新语言呢?

这个问题没有标准答案,不过咱们能够试着去分析一下,谈谈苹果的心路历程……

Objective-C 是80年代初 Brad Cox 和 Tom Love 发明的,1988年乔布斯的 Next 公司得到了这门编程语言语言的受权,并开发出了Objective-C 的语言库和NEXTSTEP的开发环境。后来 Next 被苹果收购,Objective-C 阴差阳错成了苹果的当家语言。掐指一算,三十年倏忽而过,OC 也成长为爷爷辈儿的编程语言了。

为了伺候好这位「爷爷」,苹果煞费苦心,把 GCC 的编译链先替换成 LLVM +GCC,又替换成 LLVM+Clang,作语法简化、自动引用计数、增长 Blocks 和 GCD 多线程异步处理技术……终于,OC 在30年后从新焕发出勃勃生机,并占据了兵器谱排名第三的位置。可是,苹果却有点烦了,OC 改进了这么多年,怎么看都像是在修修补补,用 Blocks 去实现一个相似 Python 的 lambda 闭包功能,看起来老是那么别扭。好吧,既然已经全盘掌握了 LLVM 和 Clang,为何咱们不去基于如今的编译器设计一门全新的语言呢?一门属于苹果的语言!你看,邻居谷歌家里叫作 Go 的孩子不是玩耍正酣么?

因而 Swift 诞生了……

固然,事实的真相也多是行动缓慢的乔老爷子把克里斯拉到一边说:

「I want to be swift to……」

「 行了,您别说了,不就是想要 swift 吗,我这就给您作一个去」

因而 Swift 诞生了……

语法

Swift 是一门博采众长的现代语言,在设计的过程当中,克里斯参考了Objective-C,Rust,Haskell,Ruby,Python,C#等优秀语言的 特色,最终造成了目前 Swift 的语法特性。我在阅读了官方教程和作了些代码实验以后,自我感受会喜欢上这门语言,在这里简单谈点感想,更深刻的内容须要大家本身去深刻学习。

一、Swift 是面向 Cocoa 和 Cocoa Touch 的编程语言,编译型语言,生产环境的代码都须要 LLVM 编译成本地代码才能执行,可是Swift又具有不少动态语言的语法特性和交互方式。

二、Swift 是一门类型安全的语言,能够帮助开发者清楚的掌控代码片断中的值类型。若是你指望输入的是字符串,类型安全的特性会阻止开发者错误地为其传递一个整数。这一切使得开发者可以更早的发现和修复错误。

三、支持各类高级语言特性,包括闭包、泛型、面向对象、多返回值、类型接口、元组、集合等。

四、Swift 能与 Objective-C 进行混合编程,但代码分属不一样的文件。

五、全面的Unicode支持,你甚至能够用一只🐶做为变量名,实现如下操做:

let 🐶 = "大狗菠萝" 

for n in 🐶{

println( n ) 

}

控制台会输出「大狗菠萝」四个字。

六、编程语句取消了大部分语言使用的「;」分隔符,只有一行写多条语句时才须要分号。

七、不少人简单阅读了 Swift 的数据类型,就认为 Swift 没有相似 Set、List 这样的数据结构,其实Swift 提供了两种 Collection 的数据类型:数组(Array)和字典(Dictionary),两个数据类型的表达式都用中括号标识。其中数组能够存储任意类型的变量,也能够强制声明 存储同一种类型的变量。同时数组提供了相似 Set 功能,你能够修改、追加、替换和删除数据的元素。另外,Swift 还提供了元组(Tuple)的功能支持函数多返回值。

八、Swift 没有提供显式的指针,参数传递根据数据类型的不一样分为值类型和引用类型,值传递进行内存拷贝,引用传递最终传递的是一个指向原有对象的指针。这一点和 Java 的参数传递是相似的。须要注意的一点是,Swift 里的数组和字典虽然都是结构体(struct),但在参数传递过程当中处理方式却不同,默认 Array 是引用传递,Dictionary 是值传递。而在 Java 中,因为数组和 Map 都是对象,因此传递的都是指针。

在 Swift 中,若是你不想传递数组引用,能够用 copy() 方法先复制一份出来,另外,也能够用 unshare() 表示,本变量不传递指针。

九、闭包,Swift 终于提供了一种优雅的闭包解决方案,好比在排序函数 sort 中进行函数传递:

let names = ["D", "B", "R", "C", "A"] 

func backwards(s1: String, s2: String) -> Bool {

return s1 > s2 

var rnames = sort(names, backwards)

事实上更简单的写法是:

var rnames = sort( ["D", "B", "R", "C", "A"] ) { $0 > $1 }

十、可选变量(Optional)的引入主要是为了应对一个变量可能存在也多是 nil 的状况,这种状况在不少高级语言里都存在。好比你想使用String的toInt方法将String转化为 Int 类型,可是你并不知道这个转化是否正常,这时候系统会返回一个可选变量,若是转换成功就返回正常值,转换失败就返回 nil,以下:

let str = "123A" 

let nn = str.toInt()

这是 nn 就是可选变量,想获得 nn 的值,能够经过 if 进行判断并经过追加感叹号获取变量值,以下:

if nn {

println(nn!) 

}

可选变量的引入解决了大部分须要显式处理的异常,这部分工做也扔给编译器去作了。想了解更多可选变量的用法,请阅读苹果的官方文档。

十一、Swift 中的 nil 和 Objective-C 中的 nil 不一样。在 Objective-C 中,nil 是指向不存在对象的指针,而在 Swift 里,nil 不是指针,它表示特定类型的值不存在。全部类型的可选值均可以被设置为nil,不只仅是对象类型。

十二、Swift 没有从语言层面支持异步和多核,不过能够直接在 Swift 中复用 GCD 的 API 实现异步功能。另外没看到 Swift 的异常处理机制,可能有了可选变量,异常的使用会很是少吧。

关于语法相关的内容,先写这么几点吧。

给你们推荐一篇王巍 (@onevcat)写的「行走于 Swift 的世界中」,深刻阅读必有收获。http://onevcat.com/2014/06/walk-in-swift/

基本上,Swift 绝对不是玩具语言,而是一门能够被大众接受的工业级编程语言。相信假以时日,Swift 必将在 App 开发领域大放异彩。

性能

Swift 在 WWDC 上展现出来的性能仍是让人很是吃惊的,在进行复杂对象排序时,OC 的性能是 Python 的2.8倍,Swift 是 Python 的3.9倍;在实现 RC4加密算法的时候,OC 的性能是 Python 的127倍,Swift 是 Python 的220倍。总之 Python 在某一个深坑里膝盖中箭了,OC 也没好到哪去,而 Swift,就是快啊就是快!

对于这一点我并非很理解,首先是 WWDC 上展现的语言层面的基准测试过于简单了,另外,OC 和 Swift 都是被 LLVM 编译成本地代码执行的,理论上针对 Swift 的优化一样能够应用于 OC,可是 Swift 竟然比 OC 快那么一点点,难道 LLVM 单独针对 Swift 作了优化么?我表示不明觉厉。

固然,还有更较真的程序员,他在第一时间针对于循环、递增、数组、字符串拼接等功能进行了测试,发现 Swift 的性能比 OC 仍是差那么一点点的(http://www.splasmata.com/?p=2798 )。

不管这些测试数据是否准确,我以为性能是咱们最不须要担忧的问题,苹果已经全盘掌握了这个语言的方方面面,从底层编译框架到编译器再到语言设计,优化之路才刚刚开始,咱们只要给这门新语言一点耐心就能够了。

所码即所得(Playground)

对于开发者来讲,Playground 是本次 WWDC 最大的亮点。可以在编码的同时实时预览输出结果是每一个开发人员的梦想,这一次苹果为你们提供了这样的福利。

Playground 不只实现了不少脚本语言支持的交互式编程,并且提供控制台输出、实时图形图像、时间线(timeline)变量跟踪等功能,开发者除了能够看到代码的实时运行结果,还能根据时间线阅读某个变量在代码片断中值的变化。这真是太棒了!

最初看到这个功能的时候我甚至觉得每一个 Swift 文件均可以基于 Playground 进行实时编码预览,仔细阅读文档后发现,只能在 XCode 提供的 Playground 文件中实现以上功能。看来 Playground 顾名思义,目前还只是为开发者提供了一个玩耍代码的地方。

固然不只仅是玩耍,咱们能够基于 Playground 作这些事情:

一、学习:经过 Playground 学习 Swift,制做 Swift 教程实现交互式学习,同时还能够培训其余初学者。

二、代码开发:执行算法程序,迅速看到算法结果,跟踪变量;执行绘图程序,即时看到图像结果,及时调整。执行通用代码,查看变量的改变状况。

三、实验性代码:无需建立项目,直接打开一个独立的Playground文件便可编写代码,尝试调用新的 API。

对于 Playground,设计者克里斯是这样描述的:Playground 功能倾注了我我的不少心血和激情,我但愿新的编程语言具有更好交互性,更友好和有趣……咱们但愿经过这门语言从新定义「如何教授计算机科学!」

开始使用 Swift

做 为一门新语言,Swift 定位很是明确,就是吸引更多的开发者加入苹果的软件生态圈,为 iOS 和 OS X 开发出更为丰富的 App,若是你是 App Store 的开发者,推荐尽早学习和掌握这门苹果力推的新语言。对于大部分新事物来讲,越早介入,获利越多。若是你是一名 Web 相关的开发者,与其等待 Swift 增长 Web 开发的相关特性,还不如去学习一下 Go 语言 Web 编程。

如何开始 Swift 呢?

一、下载 Xcode6-Beta 版本。

二、下载苹果官方提供 Swift 编程语言电子书(https://itunes.apple.com/cn/book/swift-programming-language/id881256329?mt=11 ),中文版本:http://yuedu.baidu.com/ebook/6f6c3b1ef01dc281e43af000 。读。

三、下载 WWDC Swift 的 Session 视频和PDF。看。

四、基于 Xcode6建立 Swfit 语言的项目,在项目中建立Playground,在其中调试玩耍。

五、根据官方提供的 GuidedTour.playground 学习 Swift 语法特性。下载地址:https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/GuidedTour.playground.zip

六、熟悉了基本的语法特性、与 OC 的混用、与 Cocoa 和 Cocoa Touch的交互、调试等功能以后,就能够构建你的第一个Swift App 了。

………………

能够说 Swift 是我所见过关注度最高的新语言,一经推出即万众瞩目,媒体和开发者在数天以内对 Swift 进行了长篇累牍的报道和讨论,英文手册迅速被翻译成中文,即便是江湖上的另外一位大佬谷歌 2009 年推出 Go 语言时也没有如此浩大的声势。固然,这和 Go 语言的定位有关,做为一门系统级的服务器端语言,开发者的可选余地太大了,若是谷歌推出 Go 是用来取代 Java 开发 Android App,那可能状况就彻底不同了。

通过 WWDC2014,苹果已经彻底体现出了一个软件公司的创新能力和技术底蕴,不管是操做系统,编程语言,仍是应用开发,苹果都已经准备好了,凝神静气,蓄 势待发。做为开发者,咱们要作的就是:Write the code, Change the world,而后期待下一个收获的季节!

相关文章
相关标签/搜索