超越

作者在文末的话不妨当作引文,他说:「受《重访 Copland》的启发成此文,行文晦涩还望见谅,也希望你能理解我的意思。」

看完提早释出的 WWDC 2010 演讲视频后,我觉得自己的猜测终有可能实现。虽然 Objective-C 被苹果奉为最重要的并极力推荐的程序语言,但我确信,苹果肯定在暗自开发超越 Objective-C 的继任者,我把它称作「xlang」。

苹果曾帮助初生的开源项目 LLMV 成长为一个庞大而且成功的事业。当看到有程序语言采纳 LLVM 的成果时,我总会觉得很高兴,但现在似乎情况有变。

LLVM 的核心是虚拟化,即不与特定的架构关联,也不和某一种语言关联。如非用于学术研究,这仅可能是一种怪癖,除了一个事实:即其他很多的关联架构用此处理汇编和调试,也就是说,和真实平台打交道的那部分以及处在边缘区域但并未触及纯编译器、即时编译器(JIT)和最优化领域的那部分已经开始了萌芽。Clang 获得了巨大的成功,而它的能力在 Xcode 4 中被进一步增强,但人们却很容易忘记,它是构建在 LLVM 之上的。

那些帮助 Clang 得以成为优秀编译器的东西都将大量的应用在假设中的「xlang」编译器上,因为 LLVM 的成果唾手可得,何须权衡取舍?低端所需的资源已经齐备,而且苹果既完全掌握已有部件(libauto,Objective-C 的可重用垃圾收集器),又有智慧和勇气将它迅速部署妥当。

为什么是现在?数年来,Objective-C 得到了逐步改善,而且速度正在加快。但是,Objective-C 身兼维护现有代码和平台的职责,又要保证其作为 C 超集的质量。尽管苹果想要一改现状,但是可不能乱来。改变将由上至下逐步实现,但所费时间不菲(非脆弱的实例变量)。也许 iOS 目前没有这个问题,但以后会有,除非苹果真的打算到时候靠边修边补撑着。

而 C 仍然是 C。苹果对自己持续消减 Objective-C 的内部运作指令多感自豪,例如最近的 objc-msgSend 快速路径。但苹果也知道,维持一个层又不破坏 C,等于剥夺了提高效率和内存安全性的能力。如果 iOS 能将内存冻结,只维持程序某些部分的运行,你看如何?即使具备垃圾收集的 Objective-C 可以解决这个问题,但只要一个 NSValue 对象,甚至更简单的指针,就可以击碎这个梦想。

所以,苹果不入 xlang 不行。但这么做会得到什么呢?

他们会获得一个具有现代环境的现代编程语言,层次足够低,使它具备 Objective-C 和 C 的绝大部分性能。而这一层又足够的简单,可供信赖。他们便可以自由地定义语法和语义。几乎所有的 Objective-C 功能都使用 @keywords,因为它们必须与 C 无关,而且 C Block 使用 ^ ,因为它们无法在 C++ 中重载。

最后但也同样重要的是,他们可以根据自己的喜好引导语言词汇。我想象 C Block 的一些网格,消息和 Go 的通道将会扮演一个有趣的角色。Cocoa 之所以如此优秀的许多原因是由于异步和关注点的分离,而一个重要的模型与相关的概念可以促成巨大的改变。xlang 可以为 Cocoa 增加全新的 API,例如为 Cocoa 定制 xlang,而非为 Objective-C 定制 Cocoa。

所有这些猜想不会让我傻到相信 Objective-C 明天就要滚蛋,甚至 10 年内都不会。与 C 兼容意味着难以割舍,这便是 Objective-C 为何仍是以此为目的的工具。但是在一个程序员常做他想的世界,某种编程语言不可能永远合适。我要为 C 鼓吹三遍,而且要为超越 C 的东西再吹上三遍。

正如有人很清楚的了解更高级别的抽象、可选平台、语言的现状和平台工具的情况,以及已露端倪的未来(编者:是在说 John Siracusa 吗?:p),我也愿意相信。

延伸阅读:

[原文链接;作者:Jesper]