Swift语言是静态还是动态调度?

7
阅读Swift语言指南,我无法找到明确的信息,Swift是静态调度(像基本的C ++,Java,C#)还是动态调度(像Objective-C)。 语言功能的文档(如类,扩展名,泛型等)似乎表明它是静态类型的,这可能是所谓速度提高的来源。 然而,苹果在WWDC 2014主题演讲中表示,该语言使用与Objective-C相同的运行时,并且与Cocoa / Cocoa Touch非常兼容,这表明它使用动态调度。
2个回答

12

将C++、Java和C#描述为静态调度并不特别准确。这三种语言都可以并且经常使用动态调度。

同样,Swift也可以同时使用两种方式。它与ObjC的不同之处在于它并不总是动态调度。标记为@final的方法可以被静态分派,结构体和枚举方法也可以。我相信如果运行时类型可以在编译时证明(类似于C++虚拟化),非final方法也可以被静态分派,但我对细节不太确定。


1
你的回答在我看来 似乎 是正确的,但是你能引用一些来源吗? - Palimondo
6
来源:阅读生成的汇编输出,与 Swift 编译器工程师交流。 - Catfish_Man

2
根据来自 Y Combinator(https://news.ycombinator.com/item?id=7835099)的这段摘录:
从用户的角度来看,它基本上是 Rust 书中的内容,所有 Gravy 还有放松的所有权和语法。
它拥有所有[1]:静态类型、类型推断、显式可变性、闭包、模式匹配、可选项(带有自己的语法!还有“任何”)、泛型、接口、弱所有权、元组,以及其他一些很棒的东西,如简写语法、最终和显式覆盖...
它尖叫着“现代化!”,拥有所有最新的圈子功能。它甚至带有一个轻量级的表/布雷特·维克托风格的游乐场。但它仍然是一种实用的语言,看起来易于接近和直观。
编辑:[1]:好吧,几乎是这样。我认为我没有捕捉到关于生成器、一流并发和并行性或尾调用优化等方面的任何信息。

1
还缺少多重继承、契约式设计和异常处理。事实上,这些都是我喜欢Eiffel的原因。而且模板系统通常都是非常原始的类型替换。你不能将常量或方法名作为模板参数传递。 - Lothar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接