美文网首页Swift
★学习笔记:《iOS高级:Swift入门精讲①》第一节 Swif

★学习笔记:《iOS高级:Swift入门精讲①》第一节 Swif

作者: 麦穗0615 | 来源:发表于2019-07-15 09:45 被阅读0次

    前言:
    本篇为视频学习笔记

    目录:
    一、编译器流程图/编译器
    二、Swift与OC\C\C++有什么区别
    三、大概了解一下 Swift 编译流程
    四、swiftc (Swift前端编译器)

    一、编译器流程图/编译器


    编译器

    • 1.前端: 词法分析...
    • 2.后端: 生成对应平台的二进制代码/对二进制代码进行相应的优化 (LLVM)

    二、Swift与OC\C\C++有什么区别


    如果之前C\OC代码的话,编译器前端是Clang,对OC代码进行相应的处理。处理完毕后在转交给编译器的后端LLVM,最终生成对应架构的二进制代码。


    Swift编译器前端就不一样了,编译器前端用的是swiftc,先用swiftc对swift代码进行词法分析、生成语法树进行处理,处理完毕后,再转交给编译器后端LLVM,生成对应平台的二进制代码。


    无论是用OC/Swift编译器后端都是用的LLVM,想运行在iOS系统中或是真机设备上,最终生成的都是ARM架构代码。

    三、大概了解一下 Swift 编译流程


    一开始是你自己编写的Swift代码【Swift Code】,然后再根据swiftc前端编译器生成语法树【Swift AST】,接下来有生成Swift特有的中间代码【Raw Swift IL】,再生成一个简洁的版本(Swift特有的中间代码)【Canonical Swift IL】。Swift代码不是一步到位变成二进制代码的,是有一个流程。中间代码生成完毕之后,转交给后端(LLVM),生成一个【LLVM IR】代码,它是LLVM的中间代码。LLVM编译器又会针对IR代码进行相应的优化。优化完毕之后,最终转成汇编代码【Assembly】,汇编代码最终变成二进制代码【Executable】。


    Swift代码 -> 语法树 -> 中间代码 -> 转交给LLVM -> 汇编代码 -> 二进制代码

    详情可以参考:https://swift.org/compiler-stdlib

    四、swiftc (Swift前端编译器)
    打开终端,直接输入swiftc,发现是有反应的,说明现在电脑上已经有这个指令了


    打印一下 swift -help 你会发现很清楚Swift compiler,是一个swift编译器,后面跟了各种选项。

    • swiftc存放在Xcode内部
      • Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin


    在bin文件夹中上下滚动,你会发现Clang和swiftc都在Xcode内部,这说明了OC/Swift的编译器的那些指令都在Xcode内部。


    • 一些操作
      • 生成语法树: swiftc -dump-ast main.swift
      • 生成最简洁的SIL代码:swiftc -emit-sil main.swift (swift 特有的中间代码)
      • 生成LLVM IR代码: swiftc -emit-ir main.swift -o main.ll
      • 生成汇编代码: swiftc -emit-assembly main.swift -o main.s

    ★ 对汇编代码进行分析,可以真正掌握编程语言的本质


    生成语法树: swiftc -dump-ast main.swift

    1.打开Xcode新建名为TestSwift一个命令行项目,会自动为我们生成一个main.swift




    2.选择main.swift,右键show in finder 在终端cd + main.Swift地址



    3.明白自己做什么,导出语法树看看,输入swiftc -dump-ast main.swift

    4.将语法树导出到另一文件(main.ast)中去,不倒入的话会在终端中显示
    swiftc -dump-ast main.swift -o main.ast 
    

    生成最简洁的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

    相关文章

      网友评论

        本文标题:★学习笔记:《iOS高级:Swift入门精讲①》第一节 Swif

        本文链接:https://www.haomeiwen.com/subject/wvxvkctx.html