7C00.ME/houmu 2014-06-14

杂谈Swift

Swift发布是上周的事情了,也是从上周开始,微博上不少人拿Swift来刷屏。程序员们对于Swift的这种狂热,我不好评价,因为我没做过Apple平台下的开发,无论是桌面还是移动端。对于Swift语言如何,就更不好评价了,因为评价编程语言好坏,似乎还没有一个广泛认同的标准。我只是对Swift有点兴趣,所以看了一些介绍性的文章,不免就会和自己学过的编程语言比较一番。

最近学些的编程语言,按照由近到远的顺序:R、Matlab,开了个头,计划过段时间完成系统性学习;Ruby,学完基本语法,写了一个简单的项目(上学期的一个分类作业),但是没学Rails,所以感觉没学过;Perl,五一期间用来磨时间的,语法已经忘了差不多了,但是感性认识还在,快速拾起来没有问题;Golang,具体动机忘了,语法已忘光,如果以后没需要,应该不会再接触;Scala,毕设要用Spark,学了部分语法,感觉Scala太复杂,语法永远学不完(C++闪现),但今后可能会继续用Spark,所以计划过段时间系统性重学一遍。再往前,就不再说了。另外,Javascript、Python、Bash则是边用边学边提高。

把这些编程语言罗列出来,不(完全)是来炫耀自己会多少编程语言,是因为学过这些编程语言之后,才更能体会到Swift是个“大杂烩”语言。Golang、Scala和Swift是新近诞生的比较有名的编译型语言,他们具有的共性似乎是编程语言发展的趋势。

首先最明显的是“函数式编程”(FP)。FP不知道从哪年开始重新火起来了,FP的支持渐渐成了编程语言的标配,就连发展缓慢的Java也不例外。不过FP在语法上确实可以使代码更简洁。在FP方面,Swift和Scala的语法非常相似。

其次是“类型推断”。Swift和Golang、Scala都是强类型语言,但是在声明变量的时候可以不指定类型,编译器会做类型推断。类型可以帮助编译型语言在编译阶段就发现错误,保证程序运行正确率,但是相对于通常是弱类型的脚本语言而言,变量声明附带的类型信息让代码显得冗长。“类型推断”,在一定程度上很好的兼顾了二者。另外,分号可省、括号可省,似乎也是编译型语言向脚本语言学习的一个方向。但是,像Scala那种省略方法会让初学者陷入绝望。

然后是“字典类型”。C、C++、Java、C#,这些语言本身是没有字典类型的(虽然标准库里面可能有实现)。Python、Ruby这些脚本语言就是在语言层面就实现了字典类型。不过Swift、Golang、Scala却都带有语言层面的字典类型的,而且支持字面量(比如var d = { id : '007'})创建字典实例,这样可以方便开发者。似乎是向脚本语言学习的另一个方向。

本来有整理了几条,写在一张纸上,没找到,暂时就写这些。Swift我暂时不打算学习,原因很简单,跟我当初没学Obj-C一样,没有OS X设备……