swift 是先翻译成 Objctive-C 代码再 c 再汇编在 01?

2015-10-14 00:41:23 +08:00
 Ixizi
看到篇文章如下

CocoaChina 上的 xu54 认为 Swift 本质其实就是 Objective-C 的文本变种,对于这门全新的语言,苹果做的工作其实远没有我们想像的艰巨。 LLVM 编译器做工作只是先把 Swift 翻译成 Objective-C 代码,然后再把 Objective-C 代码翻译成 C 语言代码,然后再把 C 语言代码翻译成汇编,最终翻译成机器码。至于为什么编译器厂商这么绕,不直接把自己的语言翻译成汇编和机器码,那是由于现有的语言编译器( Objective-C 、 C )已经非常成熟,而高级语言间的文本转换开发成本和维护成本都极其小。 Swift 之所以要翻译成 Objective-C ,是由于 Swift 仍然需要 Objective-C 中的 ARC 、 GCD 等环境。既然 Swift 其实就是 Objective-C , 对入门者而言远比 Objective-C 好学,对资深开发者来说又能节约很多无谓的低级重复的机械代码(这些代码在 LLVM 翻译成 Objective-C 时,编译器自动帮你写上),并且开发者关注的应该是业务逻辑,而不把精力分散在语法等低级问题上,语法消耗的时间越少,这门语言也就越成功,所以他觉得 Swift 必定会替代 Objective-C 。

感觉不对劲啊………………………………………意义何在…为什么…
4183 次点击
所在节点    iDev
22 条回复
cdfmr
2015-10-14 21:39:22 +08:00
@rainex BCB 在编译过程中并没有先翻译成 Pascal ,只是其使用的 RAD 库是 Pascal 语言编写的 VCL 。 BCB 编写的程序,一般由用户代码、 C++运行时、 Pascal 运行时和 VCL 这几部分链接而成,这让很多使用 C++而有优越感的人不爽,高贵的 C++居然需要其它语言编写的库来支撑,因此一直有人建议 Borland 使用 C++重写 VCL 。 BCB 编译器生成的代码运行效率不慢,真慢的话,大部分还是用户代码的原因,比如初学者滥用控件,却因不知控件内部的实现机制导致一些没必要的系统开销,非编译器之原因。
rainex
2015-10-15 02:22:48 +08:00
@cdfmr
@sherlocktheplant 我都是猜测哈,说 c++builder 和 delphi 的例子,是类比 swift 和 objc ,至于翻译,直接从一种高级语言翻译成另一种高级语言是没必要的,毕竟高级语言代码只是对人友好,对编译器没意义,先都翻译成中间代码(中间代码这个没标准,自家定义),下一步再让编译器产生可执行目标代码即可, c++ builder 里, c++项目里可以用 pascal 写的控件,可以加入用 pascal 写的 unit 代码(但我记得反过来就不行, delphi 里不认 c++builder 代码,由此可以佐证 c++builder 对 delphi 语法和编译部分的依赖,换句话说,后者成前者子集了), swift 和 objc 的关系我觉得也类似,我理解题主所说的也是类似意思,苹果没必要把 swift 翻译成 objc 的明文,出个中间代码就行了,短平快,先让 objc 的编译技术积累发挥一些价值,将来有精力了让 swift 的编译再完备起来。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/227821

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX