要
Ruby程序设计语言的发明人Yukihiro Matsumoto与Bill Venners进行了一次谈话。谈话内容集中讨论了变体接口,使用混合插入(mix-ins),以及Ruby的简明性给软件生产力带来的效益。
在网络上以昵称"Matz,"著称的Yukihiro Matsumoto是Ruby程序设计语言的发明人。Ruby是一种适于开发日常脚本以及完整的应用程序的面向对象程序设计语言。Matz自从1993年就开始进行了Ruby语言的研发工作。因为他想发明一种语言使得你既能非常高效的进行开发又感觉到乐趣无穷。最开始Ruby只是在日本非常流行,随后便踏上了进入了全世界程序设计者心扉的道路上。
200年9月24日Bill Venners与Yukihiro Matsumoto在丹麦Aarhus 举行的JAOO会议上会面。在这次会面上,Yukihiro Matsumoto讨论了Ruby的设计哲学,Ruby程序设计语言的特性,以及如何才能成为一个更好的程序员。在这部分当中,Matz特别介绍了设计的不完善性哲学,最小非预期理论,以及人在计算机发展上起到的重要作用。
在“运行时”改变接口
Bill Venners:在Ruby当中,我可以为对象实时的添加方法和变量。我当然已经在其他的语言当中尝试为类添加了方法和变量,这些方法和变量在运行时变成了对象。但是比如说在Java当中,一旦一个类被加载或者一个对象被实例化后,他的接口就变得不可更改了。允许结构在运行时可以修改使我有点害怕。我对于我在Ruby当中如何使用这样的特性表示非常好奇。在运行时添加方法的益处是什么呢?
Yukihiro Matsumoto:首先,你不是一定要使用这个特性。最为常用的动态特性的应用,例如为对象添加方法,是“过程中”程序设计。这样的特性使你可以建立一个适应环境的库,这些不是为特殊使用设计的。
Bill Venners: 能否举例说明什么是适应环境的库么?
Yukihiro Matsumoto:一个形象的例子是“代理”。在Ruby中,并不是为每一个特殊的类单独设计代理类,取而代之的是:你可以创建一个多用途的代理,它可以用来包装任何的对象。代理可以检测到其中的对象,并且会为那个对象在代理中作变型。代理能够为自己添加方法,所以他同包装类有相同的接口,每一个方法都可以托管给包装类当中相应的方法。所以一个可以用于包装任何对象的多功能代理是一个库中的类如何适应环境变化的形象的例子。
在Ruby中为对象添加方法同样可以被用于Java程序设计者使用内建类的情况下。例如,如果你想为某个方法传递一个监听对象,在Java中你通常是实例化一个内建类,这个内建类定义了监听器方法并传递它。在Ruby中,你可以仅仅创建一个简单的对象—一个类的对象实例—为之动态的添加所需的监听器方法并传递它。
同时,由于你可以替换一个方法并且也可以添加一个方法,你可以使用这个特性来定义回收信号。例如,每一个面向对象的图形用户界面库都有一个按钮(Button)对象。当某个人点击按钮,按钮点击方法就被调用了。在Button基类当中,这个点击方法的实现当然是空的。在别的程序设计语言中为按钮添加行为,你通常是创建一个Button的子类重载点击方法。但是在Ruby中,如果你想,你可以在Button类中直接替换点击方法。
单继承与混合插入(Mix-Ins)
Bill Venners:在你的一篇文章中曾经写道:“Ruby只支持单继承,我把它作为一个Ruby的一个特性。”为什么单继承是值得你考虑的呢?混合插入又是什么?
Yukihiro Matsumoto:单继承是非常优秀的,整个类继承结构形成了一颗单树根结点的单叉树,叫做对象,这是非常容易理解的。在一些支持多继承的程序设计语言当中,类形成了一个网络,这样反而难以理解。
虽然单继承具有简单的树形结构,使得他非常地优秀,但是有时我们会想在单继承的限制外类之间共享要素或者方法。Java在这种情况下必须定义一个接口来共享方法签名,通常是使用某种从一个对象到另一个对象的托管。在Ruby当中,我们定义了一个叫做“模”的东西,看起来很像类,但有很多的限制:即是你不能为模创建实例,模不能从类继承得到。所以在Ruby当中,如果你定义了一个具有方法的模并且将这个模插入了类当中,这样累就具有了这些方法,包括签名和实现。如果你这时将同样的模插入到另外一个类当中,就会有两个类来共享这个实现。这赋予了多继承相当多的益处,同时又没有破坏单继承简单的树形模式。
这种插入模的方法被称为“混合插入(Mix-ins)”。混合插入最初是从LISP语言文化中开始的,是作为多继承的一个使用。事实上,一个混合插入是一个使用多继承的精确手段。所以在LISP当中使用多继承是一种象征。而在Ruby当中,我们通过支持类和模强制你使用混合插入。
作者简介:
Bill Venners:
早期从事C++与Windows上的MFC的开发工作,随后完全转向Java的开发工作(1995年以后不再进行任何的C++开发工作),在Java领域成果卓越,著有经典教材《深入Java虚拟机》("Inside the Java Virtual Machine")。
Bill Venners不仅学术上具有非凡的表现,在生活中,他为人乐观,网友们可以通过下面的链接找到他非计算机相关的所有文章。
http://www.autumnleafcafe.com/