Swift学习总结——认识Swift以及Swift编译器

146 阅读3分钟

1.认识Swift

Swift编程语言本身是开源的‌。苹果公司于2015年12月4日宣布将Swift编程语言开放源代码‌ ,用于开发 iOSOS XwatchOS 应用程序。Swift 结合了 CObjective-C 的优点并且不受 C 兼容性的限制。

当前Swift已经发布到6.x版本。但是在发展的前期,从1.x5.x,经历了多次重大改变,版本之间不兼容,学习和开发体验不友好。不过随着ABI的稳定,Swift的版本也趋于稳定。

知识点: API 和 ABI 区别

  1. API(Application Programming Interface):应用程序编程接口,源代码和库之间的接口。这也是我们在日常应用开发中经常用到的,比如UIKitFoundation等库中提供的工具接口。
  2. ABI(Application Binary InterSace):应用程序二进制接口,应用程序与操作系统之间的底层接口。涉及的内容包括:目标文件格式、数据类型大小\布局\对齐、函数调用约定等等。

2.Swift编译器

  1. 什么是编译器?在iOS底层学习——LLVM编译流程中,对编译器有过详细介绍,编译器就是将一种语言(通常为高级语言)翻译为另一种语言(通常为低级[语言]的程序。

    传统编译器,是将前端和后端捆绑在一起的,但是随着高级语言越来越多,终端类型种类的增加,所使用的的CPU架构等也不尽相同,所以为了适配多种环境,不得不设计不同的编译器。紧密耦合,阻碍了编译逻辑的可重塑性。

  2. LLVM 编译器前端(Frontend)和后端(Backend)进行了分离,前后端完全解耦。将前端和后端针对不同的架构,按照独立的项目进行研发。当编译器决定支持多种语言或多种硬件架构时,LLVM最重要的地方就体现出来了,使用通用的代码表示形式(IR),它是用来在编译器中表示代码的形式。所以LLVM可以为任何编程语言独立编写前端,并且可以为任意硬件架构独立编写后端。

    image.png

  3. Swift的前端编译器是Swift Complier,前端的编译过程不是一蹴而就的,其完整的工作流程在官网中有说明。Swift Compiler

    image.png

  4. 查看本机Swift编译器的版本,在终端中输入swiftc -v

    image.png

    我这台机器的版本是Swift5.10。其所在位置就在Xcode中,参考下图: image.png

    swift-frontend‌Swift编译器的前端部分,主要负责词法分析、语法分析、语义分析和中间代码生成等任务。它是Swift编译器的重要组成部分,用于处理源代码并生成中间表示(IR)或其他形式的输出‌。

  5. 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

    以上是一些指令,以生成汇编代码为例: image.png

    分析汇编语言可以真正掌握汇编语言的本质。

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基础内容进行总结!

image.png