Pro*_*714 1 objective-c compiler-optimization swift
我正在准备关于swift性能的研究,所以这些是我的问题:我们可以在编译客观c项目时进行优化吗?如果swift和objective c有相同的编译器,为什么我们只讨论swift编译器的优化?
Swift 和 ObjC 有不同的管道,但它们都由 LLVM 支持。
\n\nObjective-C 使用 Clang 编译器来编译代码。因此,对于好的旧 ObjC 代码,管道如下所示:
\n\n\n\n您可以看到,Clang 对代码进行的第一个转换是创建 AST\xe2\x80\x99(抽象语法树) - 所有函数、运算符、变量、声明......都是巨大语义树的节点的表示形式.\nLLVM IR 正在从 Clang 传递到 LLVM Core,其中代码被优化(如果适用)并转换为特定于目标的机器代码。结果,我们有一堆目标文件(*.o),它们稍后链接在一起并合并到可执行文件或动态库中。最后阶段的输出通常称为 \xe2\x80\x9ca.out\xe2\x80\x9d、\xe2\x80\x9c.dylib\xe2\x80\x9d 或 \xe2\x80\x9c.so\xe2 \x80\x9d 文件。
\n\n正如您已经看到的,LLVM Core 是代码优化的地方,而中间表示则是这些优化的具体来源。
\n\nSwift 使用 Swift-C 来编译代码。在代码优化方面,一些功能正在改变,几乎每年都会出现新功能。(我在这里写的\xe2\x80\x99m 适用于 Swift 4.2 和 XCode 10)
\n\n让\xe2\x80\x99s 看一下 Swift 的编译管道:
\n\n\n\n您可以看到与 ObjC 有很多相似之处:不仅后端相同,而且前端的工作原理也基本相似。词法分析、标记化(从原始字符串中分离一些词法项)、构建 AST、类型检查。主要区别在于 SIL(Swift 中间语言)的存在 - AST 和 LLVM IR 之间的另一种中间代码表示形式。
\n\nSwift 开发团队以 Clang 作为前端示例,试图利用 Clang\xe2\x80\x99 的所有优点并弥补一些缺陷。其中一个缺陷是无法实现一些高级分析、可靠的诊断和优化,而 ATS 和 LLVM IR 都不是合适的材料。所以 SIL 就是这个问题的解决方案。
\n\n其他参考:\n区别:
\n\nhttps://dmtopolog.com/code-optimization-for-swift-and-objective-c/
\n\n铛:
\n\nhttps://clang.llvm.org/docs/CommandGuide/clang.html#description \n https://clang.llvm.org/docs/CommandGuide/clang.html#code- Generation-options
\n\nLLVM:
\n\n视频:LLVM 简介\n视频:D. Dunbar \xe2\x80\x9cA 用于构建软件的新架构\xe2\x80\x9d
\n\nLLVM优化:
\n\nhttps://developer.apple.com/library/archive/documentation/General/Conceptual/MOSXAppProgrammingGuide/Performance/Performance.html(编译器级优化部分)\n https://pewpewthespells.com/blog/buildsettings.html# gcc_optimization_level(XCode 构建设置参考)
\n\n斯威夫特编译器:
\n\nhttps://modocache.io/reading-and-understanding-the-swift-driver-source-code
\n\n快速优化:
\n\nhttps://swift.org/blog/osize/ \n https://swift.org/blog/whole-module-optimizations/
\n\n安全等级:
\n\n文档\n视频:Joseph Groff 和 Chris Lattner Swift\xe2\x80\x99s 高级 IR
\n| 归档时间: |
|
| 查看次数: |
362 次 |
| 最近记录: |