Objective-C之父Brad Cox访谈:我的编程之路
英文原文:The Road to Code: An Interview with Brad Cox
众所周知,Brad Cox 与 Tom Love 一起创造了 iOS/MAC 平台的首选开发语言 Objective-C。构建于C语言之上的 Objective-C 其理念来自于公认的第二个面向对象的程序设计语言和第一个真正的集成开发环境的 Smalltalk。日前,原文作者 Dave Dribin 采访了 Brad Cox,一起来了解下这位大神级人物,是如何看待他的编程之路。
Brad Cox 和他的爱犬
Q:请您简单做个自我介绍以及与 Objective-C的关系,谢谢。
Brad Cox:我之前在 ITT 实验室工作,在那里结识了 Tom,我们都有兴趣为人们带来高效的协作系统,但不同于邮件和实时通讯等应用;现在人们习惯称呼这类系统为 Groupware (群组软件)。我们发现在C语言上很难实现想法,当接触了 Smalltalk 以及面向对象的概念后,我想我们是时候要做出改变了,我们要创造一个更好用的基础平台。初期版本是有关 Sed 和 AWK 的工具集合,后来发展为基于 lex 和 yacc 的语言。而今天它还可以作为汇编语言的生成工具。
Q:方括号可以说是 Objective-C 的特色,请问这是您的杰作吗?
Brad Cox:是的,其实我就想看看有什么还没使用过的,花括号有了,圆括号有了,最后就是方括号了,我希望人们使用时不会与C语言等类似的混淆。
Q:有什么功能您当初想添加的,但限于当时的技术和时间等制约因素,而最后没有完成?
Brad Cox:的确曾有过不少想法。例如 Smalltalk 中的闭包概念,垃圾回收机制,解释型语言等。这些想法后来通过不同形式被实现了,但是没有任何一个类在C语言中是绝对适合的。
今天这些的确都一一成为了现实。在 Mac OS X 10.5 中,给出了垃圾回收机制;在 10.6 中,也就是雪豹版本,在 Objective-C 中添加了闭包处理。
Brad Cox:是的,我一直是闭包的拥护者,但是要进入调用者的堆栈的确是需要一定的技巧。
Q:在静态和动态还一直争论不休的时候,Objective-C 做了个跨界整合,动态的运行时环境和静态的编译。这是故意而为还是意外行为?
Brad Cox:事实上,很多功能是在我之后发布的。而当时我直接参与的,是在C的静态基础上简单地添加动态支持。而后来,静态支持是在这之后发展起来的。Objective-C 的功能都是希望为大家带来非常轻量级的工具,这也是 Objective-C 一直追求的。
与纯静态的 C++ 和 Java 相比,Objective-C 的动态类型支持的确非常好用。
Brad Cox:可能是多了一种轻巧的预设组件方式组合。
Q:苹果 iPod 和 iPhone 的销量超过了 3 千万,看到如此多的手持设备运行在 Objective-C 之上,那感觉是怎么样的?
Brad Cox:这感觉美妙极了。
Q:语言的设计是非常呆板的。过去 20 多年间出现 Java、C#、Python 及 Ruby 等都与Objective-C有很大不同。函数式语言似乎稍稍打破了沉闷的环境。对于语言设计的下一个重大事件或功能,您有什么看法呢?
Brad Cox:嗯,函数式语言现在变得热门了。我也曾尝试过,但是语法这个环节我就碰了壁。可能还欠点缘分。
Q:您觉得是语言的选择影响了最终软件质量,还是说全部的面向对象语言其实都大同小异?
Brad Cox:我想他们大体上都是差不多的。
Q:从您近期发布的消息和您的新作品<
Brad Cox:其实我没有转变焦点,请记得,为人们带来轻巧实用的功能是我创造 Objective-C 的初衷。对于我有关组件的关注,其实是我希望能找出有效帮助打造协作系统的办公自动化组件,所以说我并没有转变,只是希望帮助语言设计找到一个绕弯的方法 到达相同的目的地。有关组件方向的更多介绍,请进入我的个人博客进行了解。
另外,我对 OSGi 模块化架构有非常大的期待。一旦流行起来,它将扮演非常重要的角色。虽然上手有一定难度,但是尽早学习是我的建议。
Q:可以分享更多有关 OSGi 的看法吗?
Brad Cox:好的。OSGi 运行在 Objective-C 上可能不太合适,但是在其它的 Java 平台运作良好。一些主流的 IDEs 开发平台,如 Netbeans 和 Eclipse,是一个能实现过渡到基于 OSGi 组件的中间平台。而随着技术的日渐发展和逐步成熟,将来或会成为人们日常工作的一部分。
Q:OSGi会替代 jars 吗?还是会与 jars 相结合?
Brad Cox:我倾向于后者。
Q:是 metadata 提取物?
Brad Cox:是的。一个 OSGi bundle 可以看成是一个 metadata 的 jar 提取物。因此也可以说是在 JVM 中的小型 SOA (基于服务架构)服务。他们拥有自己的生命周期,能实现离线等待等处理。
Q:这样一来,能实现在线组件更新而不用把整个系统关闭?
Brad Cox:没错。一个典型的做法是在虚拟机中运行 OSGi,然后等候它来完成升级过程。这需要花时间来熟悉。这个模型与 Java 中不断创建—销毁的过程不太一样。