美文网首页
iOS-Swift-简介

iOS-Swift-简介

作者: Imkata | 来源:发表于2020-01-02 09:31 被阅读0次
  • 学习环境

下面所讲的是基于Swift5.1
开发工具:Xcode11
操作系统:macOS 10.14 Mojave、macOS Catalina 10.15
Xcode下载地址:https://developer.apple.com/download/more/

  • 课程大纲
大纲.png
  • Swift简介

Swift是Apple在2014年6月WWDC发布的全新编程语言,中文名和LOGO是“雨燕”

Swift之父Chris Lattner pClang编译器作者、LLVM项目的主要发起人 p从Apple离职后,先后跳槽到Tesla、Google p目前在Google Brain从事AI研究

  • Swift版本

历时5年发展,从Swift1.x发展到了Swift5.x版本,经历了多次重大改变,ABI终于稳定

API(Application Programming Interface):应用程序编程接口
源代码和库之间的接口

ABI(Application Binary Interface):应用程序二进制接口
应用程序与操作系统之间的底层接口
涉及的内容有:目标文件格式、数据类型的大小\布局\对齐、函数调用约定等等

随着ABI的稳定,Swift语法基本不会再有太大的变动,此时正是学习Swift的最佳时刻

截止至2019年6月,目前最新版本:Swift5.1

Swift完全开源:https://github.com/apple/swift,主要采用C++编写

  • 编译流程

什么是LLVM?
LLVM是构架编译器(compiler)的框架系统,以C++编写⽽成,⽤于优化以任意程序语⾔编写的程序的编译时间 (compile-time)、链接时间(link-time)、运⾏时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有 脚本。 LLVM计划启动于2000年,最初由美国UIUC⼤学的Chris Lattner博⼠主持开展。2006年Chris Lattner加盟Apple Inc. 并致⼒于LLVM在Apple开发体系中的应⽤。Apple也是LLVM计划的主要资助者。 ⽬前LLVM已经被苹果IOS开发⼯具、Xilinx Vivado、Facebook、Google等各⼤公司采⽤。

编译器分为前端和后端,前端一般做词法分析,后端生成对应平台的二进制代码,LLVM就是作为编译器的后端。

编译器前端和后端.png

如上图,对于OC来说,编译器前端是Clang,对于Swift,编译器前端是swiftc,无论是OC还是Swift,编译器后端都是LLVM。先是由前端进行词法分析,再由后端生成对应平台的代码(iOS上是生成ARM架构的代码)。

编译流程.png

如上图,先是由Swift代码生成AST语法树,又生成Swift特有的中间代码Raw Swift IL,再生成一个更简洁的版本,也是Swift特有的中间代码Canonical Swift IL,接来下转交给后端,生成LLVM IR代码,LLVM IR是LLVM的中间代码,LLVM编译器针对IR代码进行相应的优化,优化完毕之后最终转成汇编代码(Assembly),汇编代码最后再变成二进制代码(Executable)。详情可参考:https://swift.org/compiler-stdlib

  • swiftc在哪?

在终端敲swiftc -help发现有反应,说明的确有swiftc,那么swiftc在哪呢?
swiftc存放在Xcode内部,路径为:
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

我们可以利用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

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

相关文章

  • iOS-Swift-简介

    学习环境 下面所讲的是基于Swift5.1开发工具:Xcode11操作系统:macOS 10.14 Mojave、...

  • iOS-Swift-基础语法简介

    一. Hello World 不用编写main函数,Swift将全局范围内的首句可执行代码作为程序入口。一句代码尾...

  • iOS-Swift-属性

    先看总结:枚举、结构体、类都能定义⽅法、计算属性、下标(包括实例的、类的)计算属性和下标的本质还是方法 枚举、结构...

  • iOS-Swift-枚举

    Swift中的枚举比OC中的枚举更强大。 一. 枚举的基本用法 二. 关联值(Associated Values)...

  • iOS-Swift-函数

    一. 函数的定义 无返回值 有返回值 形参默认是let,也只能是let 注意:Swift中可以使⽤func定义⼀个...

  • iOS-Swift-扩展

    1. 扩展(Extension) Swift中的扩展,有点类似于OC中的分类(Category) 扩展可以为枚举、...

  • iOS-Swift-清理缓存

    前言 swift现在网上资源比较乱,需要找的要找很久,于是自己开始整理自己遇到的功能开始swift化,如果效果不错...

  • iOS-Swift-并列按钮

    前言 今天本来只想写个自适应宽度的一排button的,可是又觉得太简单了,所以玩心大起就加上了控制界面,期间被更改...

  • iOS-Swift-闭包

    一. 闭包表达式(Closure Expression) 在Swift中,可以通过func定义一个函数,也可以通过...

  • iOS-Swift-内存管理

    一. 关于内存管理 跟OC一样,Swift也是采取基于引用计数的ARC内存管理方案ARC的引用计数管理一般是针对堆...

网友评论

      本文标题:iOS-Swift-简介

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