Swift学习01:Swift编译流程

张建 lol

编译器架构

Swift编译过程和OC基本类似,仅仅是前端编译器不一样。

  • OC/C 前端编译器是 Clang
  • Swift 先解析成 Swift AST(抽象语法树),通过 swiftc 这个命令行参数,编译成 Swift IL
  • OCSwift 最后均编译成 LLVM IR 中间层表示
  • OCSwift 最终通过 后端编译器 LLVM compiler ,编译成最终的在具体地址上可以执行的二进制,包括x86、arm和other

详细编译流程

  • Swift 先解析成 AST(抽象语法树)
  • 经过一系列工具编程 SwiftSIL(中间语言)
  • 再经过 分析、IR工具 转成 LLVM IR(中间表示层)
  • 最终通过 后端编译器 LLVM compiler 编译成 .o 目标文件

命令行流程

使用终端创建一个简单的 main.swift 文件

1
2
mac@bogon ~ % cd Desktop
mac@bogon Desktop % touch main.swift

此时你可以在桌面看到一个 main.swift 文件

在该文件下写下两个数相加的一个函数

1
2
3
4
5
6
func sum(a:Int,b:Int) -> Int {
return a + b
}

let value = sum(a: 1, b: 2)
print(value)

  • 打开命令行工具

mac@bogon ~ % cd Desktop

  • 生成 AST 抽象语法树

mac@bogon ~ % swiftc main.swift -dump-ast

  • 生成 SIL 中间语言

mac@bogon ~ % swiftc main.swift -emit-sil

  • 生成 LLVM IR 中间表示层

mac@bogon ~ % swiftc main.swift -emit-ir

  • 生成 Assembly Language 汇编语言

mac@bogon ~ % swiftc main.swift -emit-assembly

  • 生成二进制文件

mac@bogon ~ % swiftc -o main.out main.swift

命令行输入:

1
2
3
4
mac@bogon ~ % cd /Users/mac/Desktop/01swift编译流程 
mac@bogon 01swift编译流程 % swiftc -o main.out main.swift
mac@bogon 01swift编译流程 % ./main.out
3
  • Post title:Swift学习01:Swift编译流程
  • Post author:张建
  • Create time:2023-02-21 23:49:55
  • Post link:https://redefine.ohevan.com/2023/02/21/Swift课程/Swift学习01:Swift编译过程/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
On this page
Swift学习01:Swift编译流程