Swift编译为本机代码吗?

mar*_*mnl 45 swift

简单的问题,但在当前的开发人员文档中似乎没有直接的答案.

Swift编译成机器语言(即汇编),还是编译成某个中间形式然后在虚拟机上运行?

(我怀疑它确实如此,但是对苹果世界的发展不熟悉,我不清楚它是否可能是某个人.)

Dav*_*rry 30

是的,它通过llvm位代码编译为机器语言,并且正如@connor所说,它运行在Objective-C运行时之上.

  • llvm位代码只是llvm编译器集合使用的中间格式.它允许所有人使用通用代码生成器.翻译是swift-> bit-code-> assembler-> machine language. (12认同)
  • @mattdipasquale Swift可以在没有Objective-C运行时的设备上运行,这证明了Swift不能在Objective-C之上运行.在Linux上安装Swift时就是这种情况.即使在使用Objective-C的计算机上,除非您使用的是用Objective-C编写的类,否则Swift根本不使用Objective-C. (10认同)
  • Swift不能在Objective-C的运行时运行.它有自己的运行时.我可以在使用Objective-C继承类时使用Objective-C运行时,但Swift不会在Objective-C之上"运行".这不应该被误认为是虚拟机; Swift编译为本机代码. (5认同)
  • 在编译时. (4认同)
  • 好的,它是在运行时还是提前“通过 llvm 编译为机器语言”? (3认同)
  • 关于Yosemite的Ars Technica文章描述了编译过程.它提到转换为Swift中间语言(SIL)作为第一步.正如其他人所说,它最终通过LLVM生成机器代码.http://arstechnica.com/apple/2014/10/os-x-10-10/22/ (3认同)

Eri*_*eim 19

Swift不仅编译为本机机器代码,而且还专门为它设计.与例如专门设计为JITed语言的Java不同.我的意思是,Swift通过提前编译实现了最佳性能,而Java从JITing中获益最多.

这些设计选择有很多原因,但其中包括Swift比Java等托管语言有更大的范围.它应该适用于具有更多受限硬件的台式计算机和电话.您可以将Swift用作系统编程语言,这与C#,Java或Python不同,因为它几乎没有运行时要求,并且允许对内存进行相当详细的控制.所以从理论上讲,应该能够用Swift构建一个操作系统内核,用Java来说这很难.

  • Java最初的目标是嵌入式系统,而不是桌面.JVM和JRE是分离的; 这意味着它不需要在桌面上使用传统上使用Java的20-200MB运行时.Java VM长期以来在微控制器(uJ,Javelin)上运行,性能低于5美元.还有一个名为jNode的java OS内核.我会离题的是,与*VM平台相比,像Swift那样的预编译程序在电池等关键设备上更加节能.当像Jazelle这样的处理器直接执行java字节码时,它变得更加复杂. (3认同)

Rod*_*Rod 8

Swift,就像objective-c使用llvm编译为本机代码一样

苹果公司最高机密的Swift语言可以从工作中发展成为一个很好的解释,以支持Objective C,它现在的目标是取代它

从那篇文章,谈论斯威夫特

编译器针​​对性能进行了优化,并且语言针对开发进行了优化,而不会影响任何一种.

  • 当你说“编译”时,你是指编译时还是运行时? (2认同)
  • 是的,我看到了这个引用,但它听起来像是异想天开的营销,并没有提供任何实际的技术细节 - 但是你现在已经回答了我的问题,谢谢. (2认同)

Con*_*nor 6

像Objective-C一样,Swift被编译为在Objective-C运行时运行的机器代码.

  • 我不熟悉Objective-C,但你说_runtime_听起来像是一个解释中间字节代码的虚拟机,即Swift不能编译为本机代码? (8认同)
  • 嗯,它是一个库,而不是真正的虚拟机.基本上你的代码调用obj-c运行时来做面向对象的东西.所有代码(包括obj-c运行时)都编译为机器代码. (7认同)
  • Swift当然不会"在Objective-C运行时运行".它*使用*Objective-C运行时用于类和协议(那些专门标记为`@objc`),但它具有它自己的运行时用于其他所有内容. (5认同)
  • @Connor,根据您的回答和评论,您不应该说***“[...]与 Objective-C 运行时库一起运行”***吗?这比***“在 Objective-C 运行时上”***更清楚,后者看起来像是由虚拟机“管理”的。 (2认同)