Swift - Swift Intermediate Language 语言探索

(一)生成CIL文件

  1.  OC  -  Clang 来查看底层原理

  2.  swift - swiftC 生成SIL文件来查看底层原理。 

常用swiftc命令

  1. 生成可执行文件:swiftc -o main.out main.swift
  2. 生成抽象语法树的命令(AST):swiftc main.swift -dump-ast
  3. 生成中间语言(SIL):swiftc main.swift -emit-sil
  4. LLVM中间表示层(LLVM IR):swiftc main.swift -emit -ir
  5. 生成汇编语言:swiftc main.swift -emit-assembly

其它命令你可以通过swiftc -h获得帮助

1. 打开xcode - 生成一个 swift文件,输入


class Person {
    var age: Int = 18
    var name: String = "zgr"
    
    func helloAction() -> () {
        print("hellow world")
    }
}

var p = Person()
p.age = 20

2. 在终端进入这个swift文件目录下输入下面命令生成cil文件。 

swiftc -emit-sil main.swift

3. 在swift文件同目录下就可以查看生成的 main.sil文件啦,部分内容如下。

import Builtin
import Swift
import SwiftShims

import Foundation

class Person {
  @_hasStorage @_hasInitialValue var age: Int { get set }
  @_hasStorage @_hasInitialValue var name: String { get set }
  func helloAction()
  init()
  @objc deinit
}

@_hasStorage @_hasInitialValue var p: Person { get set }

// p
sil_global hidden @main.p : main.Person : $Person

 4. 在 cil文件下查看会有很多毫无规则的命名法,通过一下命令可以还原命令。 

swiftc -emit-sil main.swift | xcrun swift-demangle

(二)利用脚本自动生成SIL文件。 

 工程根目录 -  TARGETS -- build phases -- 点 + 号,添加一个脚本组件。 

swiftc -emit-sil 项目名/main.swift | xcrun swift-demangle > ./main.sil && open main.sil

猜你喜欢

转载自blog.csdn.net/zhonggaorong/article/details/111186388