1.认识Swift
Swift编程语言本身是开源的
。苹果公司于2015年12月4日宣布将Swift编程语言开放源代码
,用于开发 iOS
,OS X
和 watchOS
应用程序。Swift
结合了 C
和 Objective-C
的优点并且不受 C
兼容性的限制。
当前Swift
已经发布到6.x
版本。但是在发展的前期,从1.x
到5.x
,经历了多次重大改变,版本之间不兼容,学习和开发体验不友好。不过随着ABI
的稳定,Swift
的版本也趋于稳定。
知识点: API 和 ABI 区别
API(Application Programming Interface)
:应用程序编程接口,源代码和库之间的接口。这也是我们在日常应用开发中经常用到的,比如UIKit
和Foundation
等库中提供的工具接口。ABI(Application Binary InterSace)
:应用程序二进制接口,应用程序与操作系统之间的底层接口。涉及的内容包括:目标文件格式、数据类型大小\布局\对齐、函数调用约定等等。
2.Swift编译器
-
什么是编译器?在iOS底层学习——LLVM编译流程中,对编译器有过详细介绍,编译器就是将
一种语言(通常为高级语言)
翻译为另一种语言(通常为低级[语言]
的程序。传统编译器,是将前端和后端捆绑在一起的,但是随着高级语言越来越多,终端类型种类的增加,所使用的的
CPU
架构等也不尽相同,所以为了适配多种环境,不得不设计不同的编译器。紧密耦合,阻碍了编译逻辑的可重塑性。
-
LLVM
编译器前端(Frontend
)和后端(Backend
)进行了分离,前后端完全解耦。将前端和后端针对不同的架构,按照独立的项目进行研发。当编译器决定支持多种语言或多种硬件架构时,LLVM
最重要的地方就体现出来了,使用通用的代码表示形式(IR
),它是用来在编译器中表示代码的形式。所以LLVM
可以为任何编程语言独立编写前端,并且可以为任意硬件架构独立编写后端。 -
Swift
的前端编译器是Swift Complier
,前端的编译过程不是一蹴而就的,其完整的工作流程在官网中有说明。Swift Compiler -
查看本机
Swift
编译器的版本,在终端中输入swiftc -v
我这台机器的版本是
Swift5.10
。其所在位置就在Xcode
中,参考下图:
swift-frontend
是Swift编译器的前端部分
,主要负责词法分析、语法分析、语义分析和中间代码生成等任务。它是Swift编译器
的重要组成部分,用于处理源代码并生成中间表示(IR
)或其他形式的输出。 -
swiftc
指令学习- 生成语法树:
swiftc -dump-ast main.swift
- 生成最简洁的SIL代码:
swiftc-emit-sil main.swift
- 生成LLVM IR代码:
swiftc -emit-ir main.swift -o main.ll
- 生成汇编代码:
swiftc -emit-assembly main.swift -o main.s
以上是一些指令,以生成汇编代码为例:
分析汇编语言可以真正掌握汇编语言的本质。
- 生成语法树:
3 main函数
在Xcode
中新建一个命令行项目,会自动生成一个main.swift
文件,可知swift
的扩展名是.swift
。
同时代码中没有main
函数,但是依然可以正常执行。在官方解释中提到:Code written at global scope is used as the entry point for the program, so you don't need a main function.
意思是说在main.swift
中的代码是在全局作用域下,这些代码直接作为整个项目的入口,所以这里并不需要main
函数。
后期再深入探索swift的启动逻辑,本阶段只对swift基础内容进行总结!