Swift 代码是不是在底层变成了优化的 Objective-C 代码?

Posted

技术标签:

【中文标题】Swift 代码是不是在底层变成了优化的 Objective-C 代码?【英文标题】:Is Swift code turned into optmized Objective-C code under the hood?Swift 代码是否在底层变成了优化的 Objective-C 代码? 【发布时间】:2014-06-03 20:25:45 【问题描述】:

我无法找到这个问题的答案。 Swift 只是一个 Objective-C 包装器,当代码编译时,Swift 代码变成了 Objective-c?

【问题讨论】:

不,不是。 (如果是的话,它不会比 Objective-C 快。) - 顺便说一句,你不必阅读很多内容来获取这些信息。只需阅读 developer.apple.com 上的介绍即可。它明确指出 Swift 是一种基于 LLVM 的语言。 @user3477950 不要争论你的主要观点,但 Swift-to-ObjC 编译器可能仍会提高性能。编译器输出的代码不一定类似于人类可能编写的任何代码,即使在手动优化时也是如此。确实,最佳的 Objective-C 代码在技术上也可以由人类键入,但声称人类可以或将经常(更不用说总是)发现该代码与 sufficiently smart compiler 参数一样错误。 @delnan 我不否认编译器通常比人类更擅长优化代码,因此编译器生成的 Objective-C 可能比手写的 Objective-C 更快。但是,如果没有进一步的注释,根据定义,Objective-C 不能比 Objective-C 快。 Apple 并未声明“Swift 比手写的 Objective-C 更快”。他们声称“Swift 比 Objective-C 更快”。 是的,因为许多类都桥接或扩展了 Objective-C 类,每个类都是 Class 并支持 NSObject 协议,不,因为 Swift 方法不是 Objective-C 方法,而且很多仅此一项可能会提高效率。 NDA 解除后,社区可能会说更多。 @user3477950 Apple 在他们非常受欢迎的演示文稿(与文档和技术参考相反)中声称的内容对于技术讨论没有多大兴趣,因为它至少有 50% 是营销。不,Obj-C 并没有神奇地比 Obj-C 更快,但是 Swift 的行为与 Obj-C 完全不同(例如,方法有静态调度),一个 Swift->Obj-C 确实通过读取 Swift 代码而不是 Obj-C 代码来获得额外的“注释”(信息)。 【参考方案1】:

不,它被制成 llvm 字节码 或 - 正如 delnan 所指出的 - 今天它称为 llvm 位码

“[使用新术语]部分是为了打破与传统虚拟机使用的字节码的关联(因为 LLVM IR 与此有很大不同)”

【讨论】:

FYI 现在常用的术语是“位码”,部分是为了打破与传统虚拟机使用的 bytecode 的关联(因为 LLVM IR 与此有很大不同)。

以上是关于Swift 代码是不是在底层变成了优化的 Objective-C 代码?的主要内容,如果未能解决你的问题,请参考以下文章

swift 在代码中将生成的imageView变成UIButton

iOS底层探索之dyld:动态链接器流程分析

Swift - 在图像而不是视图上使用手势识别器

Bridging-header 是不是有可能将 (void (^)(NSError *))block (ObjC) 变成块:() throws -> () (Swift)?

独家干货!腾讯T3-3手写8W字Tomcat体系架构,从性能优化到源码底层

如何才能编写高性能的 Swift 代码