什么是Swift
Swift,一种支持多编程范式,编译式编程语言,由苹果公司推出,用来撰写OS X和iOS应用程序。2014年6月在AppleWWDC所发布。
特点
苹果宣称Swift的特点是:快速、现代、安全、互动,而且明显优于Objective-C语言。Swift以LLVM[1]编译,可以使用现有的Cocoa和Cocoa Touch框架。Xcode Playgrounds功能是Swift为苹果开发工具带来的最大创新,该功能提供强大的互动效果,能让Swift源代码在撰写过程中能实时显示出其运行结果。
Swift语言类型
很多人在看到 Swift 第一眼的感觉是,这丫是个脚本语言啊。因为在很多语法特性上 Swift 确实和一些脚本非常相似。但是首先需要明确的是,至少在 Apple 开发中,Swift 不是以一种脚本语言来运行的,所有的 Swift 代码都将被 LLVM 编译为 native code,以极高的效率运行。
另一方面,Swift 的代码又是可以 Interactive 来“解释”执行的。新的 Xcode 中加入了所谓的 Playground 来对开发者输入的 Swift 代码进行交互式的相应,开发者也可是使用 swift 的命令行工具来交互式地执行 swift 语句。细心的朋友可能注意到了,我在这里把“解释”两个字打上了双引号。这是因为即使在命令行中, Swift 其实也不是被解释执行的,而是在每个指令后进对从开始以来的 swift 代码行了一遍编译,然后执行的。这样的做法下依然可以让人“感到”是在做交互解释执行,这门语言的编译速度和优化水平,可见一斑。
关于编译型语言、解释型语言和脚本语言
编译型语言、解释型语言和脚本语言
个人总结:
- 编译型语言:代码执行前先整体通过编译器编译为机器可以理解的指令,得到可执行文件。编译型语言效率较高。
- 解释型语言(直译型语言):代码在执行时由解释器一条一条翻译为机器指令来执行。解释性语言效率相对较低,但是通过对解释器的优化也有可能在速度上超过编译型语言。
- 脚本语言:为缩短“编写-编译-链接-执行”的过程而创建的计算机编程语言。一般不是通过编译而是通过解释的方式运行。相当于弱化的系统编程语言,语法结构较为简单、学习使用较为方便。
- 关于Java:不同于一般的解释型语言和直译型语言。先将代码编译为字节码(Bytecode,已编译,但是与特定机器能识别的机器码无关,需要解释器转译为机器码的中间代码),然后在不同平台的JVM(Java Virtual Machine)上由翻译器转译为机器可以识别的指令执行。
- 简要差别:其实很多编译型语言也是先编译得到中间代码,然后通过解释器来进行执行,而解释型语言直接由解释器从高级语言进行翻译执行。
编译器与解释器
- 编译器
- 编译器就是将“高级语言”翻译为“机器语言(低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code)(指源代码经编译后,产生的能被 CPU直接识别的二进制代码或汇编代码) → 链接器 (Linker)(链接器的工作就是解析未定义的符号引用,将目标文件中的占位符替换为符号的地址。将一个或多个由编译器或汇编器生成的目标文件外加库链接为一个可执行文件。链接器要完成程序中各目标文件的地址空间的组织,这可能涉及重定位工作。) → 可执行程序 (executables)
- 编译器并不运行程序或原代码,而是一次将其翻译成另一种语言,如机器码。
- 解释器把高级编程语言一行一行直接转译运行。解释器不会一次把整个程序转译出来,只像一位“中间人”,每次运行程序时都要先转成另一种语言再作运行,因此解释器的程序运行速度比较缓慢。它每转译一行程序叙述就立刻运行,然后再转译下一行,再运行,如此不停地进行下去。
- 解释器运行程序的方法有:
- 直接运行高级编程语言(如Shell内置的解释器)
- 转换高级编程语言码到一些有效率的字节码(Bytecode),并运行这些字节码(Perl,Python,MATLAB和Ruby等)
- 以解释器包含的编译器对高级语言编译,并指示处理器运行编译后的程序(例如:JIT)
参考资料
Swift: Wiki
LLVM: Wiki
onevcat: 关于 Swift 的一点初步看法
-
LLVM的起名为Low Level Virtual Machine的首字字母缩写。LLVM起源于2000年伊利诺伊大学厄巴纳-香槟分校维克拉姆·艾夫与克里斯·拉特纳的研究发展而成,他们想要为所有静态及动态语言创造出动态的编译技术。它是一个编译器的基础建设,以C++写成。它是为了任意一种编程语言写成的程序,利用虚拟技术,创造出编译时期,链结时期,运行时期以及“闲置时期”的优化。LLVM提供了完整编译系统的中间层,它会将中间语言(IF, Intermediate form)从编译器取出与优化,优化后的IF接着被转换及链结到目标平台的汇编语言。在2005年,苹果电脑雇用了克里斯·拉特纳及他的团队,为了苹果电脑开发应用程序系统,LLVM为现今Mac OS X及iOS开发工具的一部分。 ↩