陶敏修《高阶Perl》访谈录(来自The Perl Review)

来源:互联网 发布:贝克汉姆任意球数据 编辑:程序博客网 时间:2024/05/18 01:45

陶敏修《高阶Perl》访谈录

简介:陶明修(Mark Jason Dominus),资深Perl专家,Perl模块开发者,也是Perl.com/PerlMonth/ThePerlJournal的撰稿人(或编辑)。他的著作《高阶Perl》由摩根.考夫曼出版社出版发行(简体中文版在2013年已由械工业出版社出版,译者注)。本文内容译自The Perl Review 在2005年4月对其的采访。

The Perl Review(下简称TPR):什么原因促使你写《高阶Perl》这本书?

陶明修(下简称陶):正如我在书中前言解释过:长期以来我发现大多数Perl程序员是在用C的方式来写Perl,但实际上我们应该有更好的做法。我们手握Perl这样强大的工具,却以一种老式的蹩脚方法来使用,这真的很让人羞愧。但是也有一些前言没有透露的目的。这本书是关于如何使用闭包的,其实有很多语言并不能很方便的支持闭包。尤其是Java,对我来说简直是在70年代语言基础上的大退步。在前言的第一稿中,我有很长一段冗述谈到递归的:在1950年代,当时业界流行的标准程序语言并不能支持递归(比如Fortran),即便程序员们都知道递归是怎么回事,他们也觉得这玩意儿是毫无必要、效率低下的象牙塔技术。但后来像C和Pascal这一类的高级语言出现,(情况发生了改变),要是现在你还想推行一种不支持递归的语言,那么准备好被嘲笑吧。同样的事发生在垃圾自动回收机制上,这次Java充当了一个正面的转折点,我想最再过10到15年,恐怕没有人再愿意去使用那些没有自动内存管理的语言。我想闭包也是一样,虽然现在这么说有点早。像Java这类没有真正闭包的语言依然是可以推广的。在我开始写书那会儿,Python也根本没有闭包,而且我听Guido van Rossum (Python语言创始人,译者注)说那东西不重要,我想他错了。30年后人们会嘲笑那些设计新语言但又不考虑闭包特性的人,正如嘲笑那些不考虑递归的设计者一样。


TPR:书的开头,你比较了Perl,Lisp和C语言,并说Perl更接近于Lisp而不是C。请问如果Perl更接近于C的话,你认为它是否一样强大?还是说接近Lisp,会使Perl更强大?

陶:我觉得没有人会认为如果Perl像C的话会让这门语言更强。在80年代,UNIX系统管理员一开始主要用C和B Shell,后来在这个领域Perl很大程度上取代了前两者,使得C的使用范围缩小。在高阶Perl的前言中,我提到Norvig 写的“使Lisp与众不同的七个特性”,这七个特性,Perl涉及到了六个,而C一个也没有。没有涉及到的第七个,即Norvig 说的“统一语法”(uniform syntax),正是这个特性使得Larry Wall说Lisp像是混合了指甲碎屑的麦片一样。但是这个特性也让Lisp这门语言变得难以想象的强大。很难评价这个让Lisp收益巨大,简洁而又统一的语法。Perl完全做不到,任何对Perl代码进行动态改变的尝试都会导致错误百出,我们都接受这一点。例如,在最近发布的Perl6::Subs的模块文档中,Chip Salzenberg 说“本模块就是一个源码过滤器。而源码过滤器总是会崩。” 我认为他说言非虚,但是在Lisp中源码过滤器很好写,也从未崩过。Lisp的主要赋值运算符“self”,实际上就是用一个源码过滤器实现的。所以说如果Perl要是能在这些方面能接近Lisp,可能会变得更强大。不过另一方面看来,这样就会让Perl失去其本来面貌。

TPR: 你现在还用Lisp吗,用得如何?

陶: 偶尔吧。出于某些原因,我感觉Haskell和SML(Standard ML)更有吸引力。一是Lisp的社区力量显得有些不太活跃,二是我感觉Haskell和SML的“强语言类型”很不错。

TPR: 你希望Perl向Lisp靠拢,还是希望Lisp能向Perl靠拢?

陶: 都不希望,真的。我喜欢语言世界的多样化。但有时我也希望Perl的语法元素更简洁些。

TPR: 你在写这本书时,是研究Lisp多一点,还是Perl本身更多一点?

陶: 写这本书花了5年时间,所以各种各样的东西都研究到了。

TPR: 读者会从《高阶Perl》一书中学到很多函数式编程的知识,你认为程序员仍然需要学习Lisp或者其他函数式语言吗?

陶: 首先我想申明的是我并不认为Lisp是学习函数式编程的好模板,我想很多Lisp程序员也这么认为。“函数式编程”意味着坚实的哲学基础(philosophical stance),同时不带来副作用。你可以在真正的函数式语言中看到这种基础,例如Haskell,所有的副作用都被隔离在一种叫“monad”的特殊数据结构中。我感觉在Lisp里基本上不太关心这种基础。所以我认为所有的程序员都应该尽可能多的去学习各种语言,他们要是没有这个念头,反而会让我奇怪。这就好比作为一个木匠,你说锤子和凿子已经够好用了,完全没必要去掌握锯子和扳手的用法一样。学习新知识最大的好处就是你永远无法预知你会收获什么。高阶Perl成书的原因,正是因为我发现了书中那些以前没被发现,但在Perl中又确实有效的技术。你要是自己去挖掘这些东西是比较困难的,但如果有现成的可借鉴,那就简单多了。现状是,各个语言社区正变得彼此隔离。而同一个社区的人,大家学的又是相同的语言,看的是相同的书,用相同的方式解决相同的问题。但如果你要想解决那些困住你周边人的问题,你必须知道一些他们不知道的知识。有一种方法就是去别的社区了解下此类问题的解法。如果你想学一门新语言,Haskell和Common Lisp都是不错的选择。他们都是非常强大而且实用的语言,同时也会改变你的编程思想。


TPR:你用多年时间写了一本关于函数式编程的书,如果这时告诉你说,唐宗汉(即唐凤,CPAN排名第一的台湾Perl名人,译者注)正在用Haskell写Perl 6的编译器,点燃了整个Perl社区的激情,你的感想是?

陶: 唐说的每句话和做的每件事,都让我感到震精。


TPR: 这本书涉及的很多技术,好像都是用来方便程序员写工具或模块一类东西供其他程序员用,是否这些人才是你的目标读者?

陶: 是的,好像在第一章里面我已经说得很多了。部分也是我的个人偏见,因为我对用户界面不感兴趣。我认为多数程序员是在为其他程序员写代码,而不是最终用户。而且基本所有程序员最后都会给自己的代码加上可供调用的接口,否则没办法进行回归测试。


TPR:当你论及存储与缓存,你说(用你的缓存管理模块)轻易解决存储问题的能力是Perl的主要福音之一。从《高阶Perl》,我们还能得到其他什么好处?

陶: 缓存是一个很好的例子,花5分钟时间就能理解。如果你有更多的时间来钻研,那么可以尝试下第8章的重载解析器。通过编写函数与操作符的方法把简单的解析器构建成复杂解析器的技术,对于那些需要写解析器的人来说是非常有用的。


原创粉丝点击