过故人庄停顿:对《Unix编程艺术》的一点不满

来源:百度文库 编辑:九乡新闻网 时间:2024/10/02 18:12:52

几天前在书店看到了Eric S. Raymond的《Unix编程艺术》1中文版,一直听说这书不错就买下了……

这是一本Unix的宗教书籍——至少从书名和前15页来看是这样的,作为Unix的信徒将这样一本宗教书籍带回家就像基督徒的家中有一本圣经一样自然。令人失望的是整本书只有前30页还有点价值,其余的部分由自我崇拜+目空一切所组成。虽然买这书时就没想过要作者写得客观,因为这种书(或者所有关于Unix文化的书)当然会带有主观甚至是强烈的个人色彩。但看完书后有些话还是不吐不快……

通篇看下来看出作者要表达的可以归结为三点:

Unix哲学不朽
Unix哲学及在这一理念下的Unix体系中各个部件所体现出来的和谐一致性令人惊叹。关于Unix哲学的更多更深入阐述正是我希望在书中看到的。
信我者得永生
作者将自己的价值观作为任何判断的准绳,这从他的各种评论可见一斑。遗憾的是他的价值观在一些时候并不能代表Unix社团。当然也有可能作者只是在炫耀。
Emacs是最好的并且能与Unix哲学相容
……

 

关于上面的最后一点实在是不敢赞同。作者将Unix哲学概括为17条原则。其中,写其他原则时不容妥协的态度形成鲜明对比的是作者对吝啬原则隐约其辞(他还特地写了一篇“软件的适度原则”),看到后来才明白原来作者是Emacs用户。并且与前面偏向技术分析写作风格不同的是在写编辑器的章节时作者倾向于从哲学地角度来看问题。

虽然我们都知道在功能及操作取向上的差异这才是Vi与Emacs的最大不同——对了还有体积!然而作者试图将这些讨论带入哲学层面,然后在读者入坠五里云雾时带出结论。除了使用了更多更抽象的词汇写这一篇(译者应该也挺头痛的吧),他还做了一些比较来支撑他的观点:

  • Vi比ED加入了太多功能带来了复杂性,还导致了体积上升。所以更小功能更少的sam要胜出一筹。
  • Emacs比wily更大功能更多……(含糊带过)……。所以更多功能更“大”的Emacs胜出。

然后得到了Emacs(比Vi)更胜一筹的结论。这里面的逻辑令人费解。

作者明白光一味地贬低Vi还不足以说服人们停止对Emacs体形肥大功能庞杂的指责。他为此加入了一节“Emacs是个反Unix传统的论据吗?”为Emacs辨解2

  • Emacs出身于贝尔实验室而不是Unix所以可以公然地违反Unix的设计原则。
  • Emacs的功能很多,所以应该被享有被区别对待的特权。
  • 众多的Emacs扩展不是Emacs的错,用户可以选择不用。(注:就算没那些扩展Emacs还是很大。Emacs之所以为Emacs就是因为那些扩展。管理众多的扩展带来了附加的成本。)
  • 最后作者还试图暗示读者Emacs之所以如此臃肿还有更深层的原因3……

 

对于他怎么吹捧或者怎么为Emacs辩解我并不怎么在乎,但他对Vi的说法让人无法接受。他关于Vi的论述中只有一个专用陷阱还算站得住脚。他认为专用性陷阱存在的情况下Vi必须不断添加代码来获得新的功能,而大部分用户不得不为他们没用到的代码买单。

但Vi用户都知道的是Vi的增加的代码都是针对编辑需要而增加的,而不是加入对图像声音的支持4。而讽刺的是就算是功能最强大的Vim——在增加了无数代码后也只是Emacs的一小部分。在Vim的最新(2006年4月)PC版本7.0e在+Big编译选项下有1400KB5,而GNU Emacs(Gnu Emacs V21.3,2003年)有9000KB,完整的包有近20MB。更不用说Vim的1400KB已经包括了几乎所有功能,而Emacs在没有扩展的情况下虽然有9000KB却也比Wily好不到哪去。注意:该书中文版在P310最后一行是明显的误译:

中文:“Vim有1500KB而GNU Emacs是900KB”原文:“1500KB for GNU Emacs versus 900KB for vim”应为:“GNU Emacs有1500KB而Vim是900KB”

 

从另一方面看Emacs的Lisp代码在离开Emacs几乎没用。Emacs的扩展与Vi不断增加的c代码在本质上并无不同,只是一边是以二进制存在一边是以文本的方式存在。Emacs虽然可以选择不加载扩展但在Vi的体积也进入9MB之前我不认为这是一个多明显的优点。

最后,我们来看一下作者是怎么根据Emasc来扩展最简原则的定义的(中文版的P316):

最简原则暗示:选择需要管理的上下文环境,并且按照边界所允许的最小化方式构建程序。这就是“尽可能简单,而不过于简单”,……

最矫正这种趋势的方法直接来自于旧学派Unix的赞美诗集。这就是吝啬原则:只有实证了其它方法行不通时才写庞大程序…………如果两者都失败了,才可以自由地构建一个巨型程序(或一个新框架),而不会觉得已经完败于设计挑战。

这是原文:

This suggests a Rule of Minimality: Choose the shared context you want to manage, and build your programs as small as those boundaries will allow. This is “as simple as possible, but no simpler”, ……

The corrective to this tendency comes straight from the old-school Unix hymnbook. It is the Rule of Parsimony: Write a big program only when it is clear by demonstration that nothing else will do—that is, when attempts to partition the problem have been made and failed. ……Only if both approaches fail are you free (in the Unix tradition) to build a large program (or a new framework) without feeling you have failed the design challenge.

如果上面的中+英文还不够清楚地话那我解释一下好了,这些话的大意是:如果Emacs不符吝啬原则的话,那就赋于吝啬原则新的含义。这样Emacs就符合新的吝啬原则了。

这本书的其他部分就不做评论了6,大家可以在网上找找应该可以找到很多关于这本书的书评……




Footnotes

[1] 这本书使用CC授权,可以免费在线阅读地址是http://www.faqs.org/docs/artu/

[2] 这些都可以在书中的13章看到

[3] P315,“在我们对Emacs复杂度种类和动机的分析中,还有什么更意味深长的暗示?又有什么理由相信那些从教训归纳出来的东西?”

[4] Latest stable release: 21.4 (Feb 6, 2005) Emacs version 21 supports variable width and height fonts, playing sounds and the inclusion of images in a document, as well as tool bars, plus nicer menus and scroll bars.

[5] 1.4MB对于编辑软件来说的确是大了点

[6] 一次只做一件事并做好

5 Comments »

The URI to TrackBack this entry is: http://blah.blogsome.com/2006/04/19/blah_taoup/trackback/

  1. 有那么一段时间使用emacs,但是发现总按错键,各种命令有的是按ctrl,有的不按,搞得头晕,于是,转向vi,世界清静了

    Comment by xiang — 2007, February 17 @ 18:07

  2. Show off the hottest attending traveling with the black clamp Hardy clothing
    . This is one of accepted accoutrements and is allotment of the hardy shirts
    collection. Shop for the azure hardy shirt
    . hardy shirts
    gives us a new yield on the agrarian west.

    Comment by Breitling Watches — 2010, June 21 @ 09:50

  3. county party secretary of no practical significance that if the dollar item county party secretary high-risk so Yiwu flowers

    Comment by western restaurants in yiwu — 2011, March 18 @ 13:51

  4. Didn?t know the forum rules alolewd such brilliant posts.

    Comment by Lorene — 2011, May 20 @ 05:08

  5. jaUSys fnusubwiutdo

    Comment by batxnkrm — 2011, May 21 @ 00:10

RSS feed for comments on this post.