TL;DR
上周末看的部分WWDC18的视频,不过当时没来得及做些记录。
我个人的历年习惯通常是先浏览下目录,再挑一部分感兴趣的先看——通常是《What’s new in Cocoa Touch》和《What’s new in LLVM》,后续的再根据主题和实际需要再进一步了解,比如关于如何提升开发效率的。
这里主要记录下WWDC18《What’s new in LLVM》中我个人的一些观后感。
零、背景简介
首先是LLVM相关团队的高级经理Jim Grosbach给大家介绍了下LLVM家族(表示LLVM不只是个编译器),以及LLVM这个开源项目目前的合作伙伴有哪些,并欢迎大家交流共建。
LLVM所支撑的相关工具和产品如下:
1. Clang(音[klæŋ]),从名字上也能感受到这是一个和C语言家族相关的东西,是一款主要面向C/C++/ObjC等语言的编译器前端。一个使用例子是clang -rewrite-objc xx.c
,用来查看生成的C中间代码,了解语言特性的内部实现,比如我之前在12年写过的一篇关于block实现的探究。
2. 静态分析器,同属于Clang项目的源码分析工具。
3. Sanitizers,如AddressSanitizer、MemorySanitizer、ThreadSanitizer和 LeakSanitizer。
4. LLDB,Xcode内置的调试器。
5. GPU Shader Compiler下所使用的代码生成器框架。
6. Swift。
7. 视频里没有提到的但业界实际有在使用的,比如作为Java的编译器后端,将JVM字节码编译成机器码。
做iOS开发比较久的同学应该对Xcode中Compiler选项的过渡变迁有印象,从最早的GCC到现在的LLVM。
一开始的前端和后端都是采用GCC套件,到后来采用LLVM作为后端来处理GCC生成的中间代码,再到如今的Clang前端搭配LLVM后端套件。
类似的还有GDB到LLDB的变迁。
这些变迁的背景主要是由于一开始Apple所采用的GCC是一个面向多种语言的编译器套件,但GCC不太给Apple面子、支持力度不够,同时由于代码耦合度太高、不好做模块化定制,所以Apple招聘了如今的大神Chris Lattner到Apple继续做LLVM项目。
LLVM是Chris Lattner在校期间发起的项目,据说他当时啃烂了龙书。这本书也是我大学印象最深刻的书,当初也硬着头皮啃了好几遍,这也是我现在每年看WWDC都会优先看《What’s new in LLVM》的一个原因。
去年(2017年)Chris Lattner从Apple离职,先后去了特斯拉和Google,这让一部分人担心Swift的发展,也让另一部分人担心LLVM社区的发展。
以下是视频内容概要:
- ARC的更新
- Xcode 10中新的诊断功能
- Clang静态分析器
- 安全性提升
- 新的指令集扩展
一、ARC的更新:结构体支持ARC对象指针
演讲者是Alex Lorenz,Clang的前端工程师。
在之前,ARC环境下的结构体中是不支持对象指针的,因为编译器还不支持自动为结构体成员插入retain/release等内存管理代码。
现在