我正在做一份关于Swift性能的研究,以下是我的问题:在编译Objective-C项目时,我们是否可以进行优化?如果Swift和Objective-C使用同一个编译器,为什么我们只谈论Swift编译器的优化?
我正在做一份关于Swift性能的研究,以下是我的问题:在编译Objective-C项目时,我们是否可以进行优化?如果Swift和Objective-C使用同一个编译器,为什么我们只谈论Swift编译器的优化?
Objective C编译器是Clang。Swift使用“Swift编译器”。虽然它们都利用LLVM生成最终的机器代码,但它们实际上是完全独立的编译器。
Swift 和 ObjC 有不同的流水线,但两者都由 LLVM 支持。
Objective-C 使用 Clang 编译器编译代码。因此,对于传统的 ObjC 代码,其流水线如下:
您可以看到,Clang 对您的代码进行的第一次转换是创建 AST(抽象语法树) - 表示所有函数、运算符、变量、声明等节点的巨大语义树。 LLVM IR 从 Clang 传递到 LLVM Core,在那里进行优化(如果适用)并转换为特定于目标的机器码。因此,我们有一堆对象文件(*.o),稍后将它们链接在一起并合并成可执行文件或动态库。这个最后阶段的输出通常被称为“a.out”、“dylib”或“so”文件。https://dmtopolog.com/code-optimization-for-swift-and-objective-c/
Clang:
https://clang.llvm.org/docs/CommandGuide/clang.html#description https://clang.llvm.org/docs/CommandGuide/clang.html#code-generation-options
LLVM:
视频:LLVM简介 视频:D. Dunbar“构建软件的新架构”
LLVM优化:
https://developer.apple.com/library/archive/documentation/General/Conceptual/MOSXAppProgrammingGuide/Performance/Performance.html(编译器级别的优化部分) https://pewpewthespells.com/blog/buildsettings.html#gcc_optimization_level(XCode构建设置参考)
Swift编译器:
https://modocache.io/reading-and-understanding-the-swift-driver-source-code
Swift 优化:
https://swift.org/blog/osize/ https://swift.org/blog/whole-module-optimizations/
SIL:
文档 视频:Joseph Groff & Chris Lattner Swift的高级IR