首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift编译器与Objective编译器

Swift编译器与Objective编译器
EN

Stack Overflow用户
提问于 2015-07-07 17:42:05
回答 2查看 1.1K关注 0票数 4

我正在准备一项关于Swift性能的研究,以下是我的问题:我们能在编译Objective项目的同时进行优化吗?如果Swift和Objective有相同的编译器,为什么我们只讨论Swift编译器的优化?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-07 18:16:22

目标C编译器是Clang。Swift使用"Swift编译器“。虽然它们都利用LLVM来生成最终的机器代码,但实际上它们是完全独立的编译器。

票数 11
EN

Stack Overflow用户

发布于 2020-02-07 15:14:39

Swift和ObjC有不同的管道,但它们都得到了LLVM的支持。

Objective使用Clang编译器编译代码。因此,对于好的旧ObjC代码,管道如下所示:

您可以看到,Clang对代码的第一个转换是创建AST‘(抽象语法树)--表示所有函数、运算符、变量、声明。是巨大语义树的节点。LLVM IR正在从Clang传递到LLVM Core,其中的代码被优化(如果适用),并转换为特定于目标的机器代码。因此,我们有一堆对象文件(*.o),它们稍后被链接在一起,并合并到一个可执行文件或动态库中。最后阶段的输出通常称为“a.out”、“.dylib”或“.so”文件。

正如您已经看到的,LLVM是对代码进行优化的地方,中间表示是这些优化的具体来源。

Swift使用Swift编译代码。在代码优化方面,一些特性正在发生变化,几乎每年都会出现新的特性。(我在这里所写的内容对于SWIFT4.2和XCode 10是有效的)

让我们看一下Swift的编译管道:

您可以看到与ObjC的相似之处:不仅相同的后端,而且前端的工作方式也是相似的。词法分析、标记化(从原始字符串中分离一些词法项)、构建AST、类型检查。主要区别在于SIL (Swift中间语言)的存在-- AST和LLVM IR之间的另一种中间代码表示形式。

Swift开发团队以Clang为例,尝试利用Clang的所有优势并弥补一些缺陷。其中一个缺陷是无法实现一些高层次的分析、可靠的诊断和优化,对于这些分析和优化,ATS和LLVM IR都不是合适的材料。所以SIL是解决这个问题的方法。

其他参考资料:差异:

https://dmtopolog.com/code-optimization-for-swift-and-objective-c/

嘎吱声:

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 (编译器级优化部分) level (XCode构建设置参考)

快速编译器:

https://modocache.io/reading-and-understanding-the-swift-driver-source-code

迅速优化:

https://swift.org/blog/osize/ https://swift.org/blog/whole-module-optimizations/

SIL:

文档录像: Joseph Groff & Chris Lattner Swift的高级别IR

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31275721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档