2011年6月30日星期四

阮一峰的网络日志

阮一峰的网络日志


Javascript的10个设计缺陷

Posted: 29 Jun 2011 09:43 PM PDT

前几篇文章,我经常说Javascript的设计不够严谨,有很多失误。

今天的这一篇,前半部分就谈为什么会这样,后半部分将列举Javascript的10个设计缺陷。

我参考的文献主要是Douglas Crockford的专著《Javascript语言精粹》JavaScript: The Good Parts)和Fredrik Holmström的文章《我对Javascript的抱怨》My gripes with Javascript)。

一、为什么Javascript有设计缺陷?

这里有三个客观原因,导致Javascript的设计不够完善。

1. 设计阶段过于仓促

Javascript的设计,其实只用了十天。而且,设计师是为了向公司交差,本人并不愿意这样设计(参见《Javascript诞生记》)。

另一方面,这种语言的设计初衷,是为了解决一些简单的网页互动(比如,检查"用户名"是否填写),并没有考虑复杂应用的需要。设计者做梦也想不到,Javascript将来可以写出像Gmail这种极其庞大复杂的网页。

2. 没有先例

Javascript同时结合了函数式编程和面向对象编程的特点,这很可能是历史上的第一例。而且直到今天为止,Javascript仍然是世界上唯一使用Prototype继承模型的主要语言。这使得它没有设计先例可以参考。

3. 过早的标准化

Javascript的发展非常快,根本没有时间调整设计。

1995年5月,设计方案定稿;10月,解释器开发成功;12月,向市场推出,立刻被广泛接受,全世界的用户大量使用。Javascript缺乏一个从小到大、慢慢积累用户的过程,而是连续的爆炸式扩散增长。大量的既成网页和业余网页设计者的参与,使得调整语言规格困难重重。

更糟的是,Javascript的规格还没来及调整,就固化了。

1996年8月,微软公司强势介入,宣布推出自己的脚本语言Jscript;11月,为了压制微软,网景公司决定申请Javascript的国际标准;1997年6月,第一个国际标准ECMA-262正式颁布。

也就是说,Javascript推出一年半之后,国际标准就问世了。设计缺陷还没有充分暴露就成了标准。相比之下,C语言问世将近20年之后,国际标准才颁布。

二、Javascript的10个设计缺陷

1. 不适合开发大型程序

Javascript没有名称空间(namespace),很难模块化;没有如何将代码分布在多个文件的规范;允许同名函数的重复定义,后面的定义可以覆盖前面的定义,很不利于模块化加载。

2. 非常小的标准库

Javascript提供的标准函数库非常小,只能完成一些基本操作,很多功能都不具备。

3. null和undefined

null属于对象(object)的一种,意思是该对象为空;undefined则是一种数据类型,表示未定义。

  typeof null; // object

  typeof undefined; // undefined

两者非常容易混淆,但是含义完全不同。

  var foo;

  alert(foo == null); // true

  alert(foo == undefined); // true

  alert(foo === null); // false

  alert(foo === undefined); // true

在编程实践中,null几乎没用,根本不应该设计它。

4. 全局变量难以控制

Javascript的全局变量,在所有模块中都是可见的;任何一个函数内部都可以生成全局变量,这大大加剧了程序的复杂性。

  a = 1;

  (function(){

    b=2;

    alert(a);

  })(); // 1

  alert(b); //2

5. 自动插入行尾分号

Javascript的所有语句,都必须以分号结尾。但是,如果你忘记加分号,解释器并不报错,而是为你自动加上分号。有时候,这会导致一些难以发现的错误。

比如,下面这个函数根本无法达到预期的结果,返回值不是一个对象,而是undefined。

  function(){

    return
      {
        i=1
      };

  }

原因是解释器自动在return语句后面加上了分号。

  function(){

    return;
      {
        i=1
      };

  }

6. 加号运算符

+号作为运算符,有两个含义,可以表示数字与数字的和,也可以表示字符与字符的连接。

  alert(1+10); // 11

  alert("1"+"10"); // 110

如果一个操作项是字符,另一个操作项是数字,则数字自动转化为字符。

  alert(1+"10"); // 110

  alert("10"+1); // 101

这样的设计,不必要地加剧了运算的复杂性,完全可以另行设置一个字符连接的运算符。

7. NaN

NaN是一种数字,表示超出了解释器的极限。它有一些很奇怪的特性:

  NaN === NaN; //false

  NaN !== NaN; //true

  alert( 1 + NaN ); // NaN

与其设计NaN,不如解释器直接报错,反而有利于简化程序。

8. 数组和对象的区分

由于Javascript的数组也属于对象(object),所以要区分一个对象到底是不是数组,相当麻烦。Douglas Crockford的代码是这样的:

  if ( arr &&
    typeof arr === 'object' &&
    typeof arr.length === 'number' &&
    !arr.propertyIsEnumerable('length')){

    alert("arr is an array");

  }

9. == 和 ===

==用来判断两个值是否相等。当两个值类型不同时,会发生自动转换,得到的结果非常不符合直觉。

  "" == "0" // false

  0 == "" // true

  0 == "0" // true

  false == "false" // false

  false == "0" // true

  false == undefined // false

  false == null // false

  null == undefined // true

  " \t\r\n" == 0 // true

因此,推荐任何时候都使用"==="(精确判断)比较符。

10. 基本类型的包装对象

Javascript有三种基本数据类型:字符串、数字和布尔值。它们都有相应的建构函数,可以生成字符串对象、数字对象和布尔值对象。

  new Boolean(false);

  new Number(1234);

  new String("Hello World");

与基本数据类型对应的对象类型,作用很小,造成的混淆却很大。

  alert( typeof 1234); // number

  alert( typeof new Number(1234)); // object

关于Javascript的更多怪异行为,请参见Javascript Gardenwtfjs.com

三、如何看待Javascript的设计缺陷?

既然Javascript有缺陷,数量还不少,那么它是不是一种很糟糕的语言?有没有前途?

回答是Javascript并不算糟糕,相反它的编程能力很强大,前途很光明。

首先,如果遵守良好的编程规范,加上第三方函数库的帮助,Javascript的这些缺陷大部分可以回避。

其次,Javascript目前是网页编程的唯一语言,只要互联网继续发展,它就必然一起发展。目前,许多新项目大大扩展了它的用途,node.js使得Javascript可以用于后端的服务器编程,coffeeScript使你可以用python和ruby的语法,撰写Javascript。

最后,只要发布新版本的语言标准(比如 ECMAscript 5),就可以弥补这些设计缺陷。当然,标准的发布和标准的实现是两回事,上述的很多缺陷也许会一直伴随到Javascript存在的最后一天。

(完)

文档信息

2011年6月25日星期六

阮一峰的网络日志

阮一峰的网络日志


Javascript诞生记

Posted: 24 Jun 2011 08:30 AM PDT

1.

二周前,我谈了一点Javascript的历史。

今天把这部分补全,从历史的角度,说明Javascript到底是如何设计出来的。

只有了解这段历史,才能明白Javascript为什么是现在的样子。我依据的资料,主要是Brendan Eich的自述

2.

上一篇文章写道:

"1994年,网景公司(Netscape)发布了Navigator浏览器0.9版。这是历史上第一个比较成熟的网络浏览器,轰动一时。但是,这个版本的浏览器只能用来浏览,不具备与访问者互动的能力。......网景公司急需一种网页脚本语言,使得浏览器可以与网页互动。"

网页脚本语言到底是什么语言?网景公司当时有两个选择:一个是采用现有的语言,比如Perl、Python、Tcl、Scheme等等,允许它们直接嵌入网页;另一个是发明一种全新的语言。

这两个选择各有利弊。第一个选择,有利于充分利用现有代码和程序员资源,推广起来比较容易;第二个选择,有利于开发出完全适用的语言,实现起来比较容易。

到底采用哪一个选择,网景公司内部争执不下,管理层一时难以下定决心。

3.

就在这时,发生了另外一件大事:1995年Sun公司将Oak语言改名为Java,正式向市场推出。

Sun公司大肆宣传,许诺这种语言可以"一次编写,到处运行"(Write Once, Run Anywhere),它看上去很可能成为未来的主宰。

网景公司动了心,决定与Sun公司结成联盟。它不仅允许Java程序以applet(小程序)的形式,直接在浏览器中运行;甚至还考虑直接将Java作为脚本语言嵌入网页,只是因为这样会使HTML网页过于复杂,后来才不得不放弃。

总之,当时的形势就是,网景公司的整个管理层,都是Java语言的信徒,Sun公司完全介入网页脚本语言的决策。因此,Javascript后来就是网景和Sun两家公司一起携手推向市场的,这种语言被命名为"Java+script"并不是偶然的。

4.

此时,34岁的系统程序员Brendan Eich登场了。1995年4月,网景公司录用了他。

Brendan Eich的主要方向和兴趣是函数式编程,网景公司招聘他的目的,是研究将Scheme语言作为网页脚本语言的可能性。Brendan Eich本人也是这样想的,以为进入新公司后,会主要与Scheme语言打交道。

仅仅一个月之后,1995年5月,网景公司做出决策,未来的网页脚本语言必须"看上去与Java足够相似",但是比Java简单,使得非专业的网页作者也能很快上手。这个决策实际上将Perl、Python、Tcl、Scheme等非面向对象编程的语言都排除在外了。

Brendan Eich被指定为这种"简化版Java语言"的设计师。

5.

但是,他对Java一点兴趣也没有。为了应付公司安排的任务,他只用10天时间就把Javascript设计出来了。

由于设计时间太短,语言的一些细节考虑得不够严谨,导致后来很长一段时间,Javascript写出来的程序混乱不堪。如果Brendan Eich预见到,未来这种语言会成为互联网第一大语言,全世界有几百万学习者,他会不会多花一点时间呢?

总的来说,他的设计思路是这样的:

  (1)借鉴C语言的基本语法;

  (2)借鉴Java语言的数据类型和内存管理;

  (3)借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;

  (4)借鉴Self语言,使用基于原型(prototype)的继承机制。

所以,Javascript语言实际上是两种语言风格的混合产物----(简化的)函数式编程+(简化的)面向对象编程。这是由Brendan Eich(函数式编程)与网景公司(面向对象编程)共同决定的。

6.

多年以后,Brendan Eich还是看不起Java。

他说:

"Java(对Javascript)的影响,主要是把数据分成基本类型(primitive)和对象类型(object)两种,比如字符串和字符串对象,以及引入了Y2K问题。这真是不幸啊。"

把基本数据类型包装成对象,这样做是否可取,这里暂且不论。Y2K问题则是直接与Java有关。根据设想,Date.getYear()返回的应该是年份的最后两位:

  var date1 = new Date(1999,0,1);

  var year1 = date1.getYear();

  alert(year1); // 99

但是实际上,对于2000年,它返回的是100!

  var date2 = new Date(2000,0,1);

  var year2 = date2.getYear();

  alert(year2); // 100

如果用这个函数生成年份,某些网页可能出现"19100"这样的结果。这个问题完全来源于Java,因为Javascript的日期类直接采用了java.util.Date函数库。Brendan Eich显然很不满意这个结果,这导致后来不得不添加了一个返回四位数年份的Date.getFullYear()函数。

如果不是公司的决策,Brendan Eich绝不可能把Java作为Javascript设计的原型。作为设计者,他一点也不喜欢自己的这个作品:

"与其说我爱Javascript,不如说我恨它。它是C语言和Self语言一夜情的产物。十八世纪英国文学家约翰逊博士说得好:'它的优秀之处并非原创,它的原创之处并不优秀。'(the part that is good is not original, and the part that is original is not good.)"

(完)

文档信息

2011年6月20日星期一

阮一峰的网络日志

阮一峰的网络日志


与父亲在一起的日子(组图)

Posted: 19 Jun 2011 11:04 PM PDT

昨天是父亲节。

半夜里,我突然想起来,曾经推荐过一个美国摄影师的作品。母亲去世后,他就拍他的父亲,还写下自己的感想。

这组作品,我看过多次,昨天再看,竟然又一次被感动了。儿子对父亲的关心、对老年人衰老和孤独的感慨,都在其中得到了细腻的体现,非常感人。

网上似乎还没有全文翻译,我就把它译了出来,再一次推荐给大家。

=============================================

与父亲在一起的日子

作者:Phillip Toledano

译者:阮一峰

原文网址:http://www.dayswithmyfather.com

1.

这是一份日记,记录我的父亲。

2.

我希望留下我和他在一起的日子。

3.

2006年9月4日,母亲突然过世,将照顾父亲的重担一下子留给了我。父亲患有健忘症,经常不记得几分钟前发生的事。

我带着父亲参加了母亲的葬礼。但是回家后,每隔15分钟,父亲就问我母亲去了哪里。我不得不一遍遍地解释,她死了。父亲震惊极了,问我为什么没人告诉他?为什么不让他参加葬礼?为什么他从没去医院探望她?......他全忘了。

于是,我改口说,母亲去巴黎照顾生病的舅舅了,暂时不回来。

4.

年轻时,父亲非常英俊,在好莱坞当电影演员。他不喜欢自己现在苍老的样子。

我让他看着镜子,想拍一张肖像。他看到镜中的自己,顿时变得非常不安。

你看,即使到了98岁,他还是有虚荣心。

5.

屋子里到处都是他留下的小纸条,上面写着"人都到哪里去了?"、"发生什么事了?"......这显示了他内心深处的恐慌,他从不对我说这些。

6.

父亲握着我的妻子卡拉的手。

每当卡拉画眉毛或者穿新裙子,他都会注意到,他对细节很敏感。另一方面,他还赞美卡拉"身材好",喜欢看卡拉穿短裙,我觉得很有意思。

7.

这是拉尔夫叔叔的照片。他是父亲的弟弟,去年死了,父亲还不知道。

8.

父亲经常对我说,他想死。他说是时候走了,他已经活得太长了。

很奇怪,我竟然有些赞同他的想法。他现在如此健忘,这样的生活根本不能叫做生活,而是一种折磨。但是,这个世界上,我的直系亲属只剩下他一个人了。

9.

这是我家的狗乔治。父亲不记得她的名字,就叫她"狗狗"。

晚餐时,父亲喜欢把菜扔到地上喂她(这总会吓到母亲)。当乔治朝着地上的菜窜过来,父亲就会很高兴,夸她可以去拍电影。

10.

每天,父亲待在厕所的时候很长很长。因为他健忘,所以他可以在那里待上几个小时。

他常常在厕所里刚系上裤子,就说"等一等,我要去上厕所"。这让人又恼火又伤心。我对他说,你已经在厕所里一个小时了,他就会用一付难以置信的表情看着我。

11.

我喜欢他看报纸的那些时刻。

有那么几分钟,他很清醒,一切看上去又回到以前。那时,我们就不再称母亲去了巴黎,而是说她去买吃的了,一会就回来。那是一天中的甜蜜时刻。

12.

吃饭总是一个大问题。我现在明白,为什么母亲去世之前,总是烧一模一样的菜,因为父亲只吃那个。

一般情况下,他只吃鸡蛋,炒鸡蛋、鸡蛋色拉、鸡蛋汤等等。奇怪的是,他的胆固醇一点也不高。

13.

父亲是一个幽默的人。我把两块饼干放在他的胸口,他说"快来看我的奶头"。这难道不好笑吗?

14.

父亲退休后,依然保持对艺术的热爱。他用大量的时间听歌剧、画画、雕塑。

虽然现在他不再画画了,但是依然向往艺术。他对日落很着迷,说这些色彩可以画出很多画。虽然身体不行了,他的心还是年轻的。

15.

父亲是讲故事的高手。从小我就喜欢听他的故事,他的表演可是得过奥斯卡奖的。

如果他心情不好,我就请他讲一个故事,他会很快进入角色,把自己忘了。

16.

今天,他过98岁生日。

17.

我让他拍一张我的照片。我想知道,他能看出我有多爱他吗。

我手上的戒指,是母亲去世那天戴的。

18.

今天是母亲的生日。我总是记不住这个日子,但是今天早上我梦到了她。她在笑。

要是她还活着,今天就是81岁了。

妈,生日快乐。

19.

父亲很在意别人给予他的关心。

每次我去看他,他都把这当做一件大事,总是说他有多爱我。在他眼里,我是一个天才,而卡拉也是我们家当然的一份子。

我真高兴,这段时间我们在一起。

20.

我总是被父亲爱母亲的程度震惊。他一直在谈她,对她充满感激,无比珍惜这段感情。

母亲很爱我,就像胶水一样,把我们这个家紧紧粘在一起。从小她就事事管着我,我有点嫌她啰嗦。有一次,她甚至打电话让我不要出门,因为外面风大危险。

现在她不在了,我才意识到,我一生都在抵制她对我施加影响。如今它不在了,我却想念了。她应该很高兴听到我这样说。

21.

父亲很注意健康。早在粗粮流行之前,他就开始吃了。每天早上,他都非常投入地做健身操,弯腰用手指触碰脚趾,还做仰卧起坐。

他还喜欢往橙汁里加生鸡蛋。他总是问我要不要一起喝,我说这种饮料很恶心,他就得意地哈哈大笑。

22.

最让父亲开心的,就是我取得成功。

每当他心情不佳的时候,我就立刻讲一个我职业上的最新突破。我告诉他,我正在为某本著名杂志或者某个大型项目,拍摄重要的作品。有时候,这是真话,有时候,这是假话。但是这不重要,重要的是我要尽可能让他开心。

他一听到我的这些话,脸上就会露出幸福的表情。他总说:"我必须让所有朋友都知道,我有一个著名的儿子。"

23.

有一天,我把父亲以前的电影借回家。那是一部30年代拍摄的《陈查理探案记》,我和他一起看。

他告诉我,那时太年轻,电影里的小胡子都是胶水粘上去的。看着父亲年轻时的形象,我感觉很奇妙。那时他完全不知道,未来会有母亲和我,我们会生活在一起,生活充满了各种可能。

24.

父亲又问母亲去哪里了,我还是说在巴黎。

他又问她现在干什么(除了照顾生病的舅舅),我就说她正在管理一个杂技团,然后做出把头放在狮子嘴里、荡秋千、跳火圈的动作。这让我们两个都笑起来了。

25.

有一次,我们说着说着,他就停下来了,什么话也不说,发出叹息,然后闭上眼睛。

就是从那时起,我明白他其实都知道,关于母亲,关于所有的事情。

26.

昨天,父亲去世了。

我整晚都和他在一起,握着他的手,听着他的呼吸声,想知道哪一口气是他最后的呼吸。他死在家中自己的床上,我和卡拉在他的身旁。

过去三年来,我一直害怕,他会在我不在家的时候去世。我不想让他孤单经历这一切,不想让他周围有陌生人。我知道,这样说可能不合适,但是我非常满意这件事发生的方式。

很幸运,过去三年我与他在一起,我们没有话没说,知道彼此深爱对方,知道他深深为我骄傲,而我也发现他竟是如此有趣。这是我的一份非常非常宝贵的礼物。

27.

感谢每一位读完这份日记的人,我从没想过其他人会对这件事有兴趣。我深感荣幸我有这么多读者,我读过你们的每一条留言、每一封电子邮件。

父亲如果知道我这样做,他会很开心。他希望别人知道他的故事。他的生命从无静止,他就像一条河流,一直在奔腾向前。

上周是他99岁生日,我问他知道自己几岁吗?他笑着说:"22岁?"

现在,他去巴黎了,与母亲团聚了。

(完)

文档信息

2011年6月19日星期日

阮一峰的网络日志

阮一峰的网络日志


小说集《夹边沟记事》

Posted: 19 Jun 2011 12:12 AM PDT

我已经好几年不读小说了,但是这几天一口气读完了小说集《夹边沟记事》

虽然名义上是小说,但是它写的都是真事,属于历史纪实。

(图片说明:《夹边沟记事》,天津古籍出版社,2002。)

夹边沟是一片盐碱滩,位于甘肃省酒泉市郊东北30公里处,靠近巴丹吉林沙漠,风大沙多,荒无人烟。

(图片说明:夹边沟卫星照片,来自Google地图。)

1954年,这里建立起了"夹边沟农场",正式名称是甘肃省第八劳改管教支队,用来关押劳改犯。

1957年,"反右运动"兴起,甘肃省2000多名右派被关押在这里,接受劳动改造。他们遭受了惨无人道的对待,每天必须完成长达十几个小时的艰苦劳动,口粮却不足一斤,大部分人最后都饿死病死。等到1961年初,夹边沟农场被撤销时,还活着的右派只有400余人!《夹边沟记事》写的就是这一段历史。

2010年,《南都周刊》做了一个专题《甘肃夹边沟农场50年》。下面就是几张50年后来自现场的照片。

(图片说明:随着风沙的吹蚀,当年掩埋的遇难者衣物被曝露在酒泉戈壁上。)

(图片说明:距夹边沟林场办公区百米外的一座土山下,三座无碑的荒坟。据当地人介绍,这就是"右派"的坟,墓主人是谁已无人知晓。)

(图片说明:当年许多"右派"为了能吃饱,便在野外采野草充饥。这种草种食用过多会影响人体消化和排泄,致人肚胀而亡。 )

甘肃知青出身的作家杨显惠,在访问大量幸存者之后,写出了系列小说《夹边沟记事》,一共12篇,发表在2000年的《上海文学》。

小说中这样记载当时的情况:

"(右派)刚到夹边沟时每月定量是40斤粮(1斤为16两),在天寒地冻的河西走廊,充当苦力的右派可以籍此活命。但是后来粮食供应降为每月26斤,再降为20斤,每天只有7两粮食,体力严重透支的他们开始挨饿。随着1958年冬天的到来,死神也随之而至,一批体弱不堪的人最先命赴黄泉。"

"在每天吃过了食堂供应的树叶和菜叶子煮成的糊糊汤后,他们蜷缩在没有一点热气的窑洞和地窝子里,尽可能地减少热量散失,等待一下顿的糊糊汤。"

"如果有了一点力气,就到草滩上挖野菜、捋草籽,煮着吃下。体质稍好的,到草滩上挖鼠穴,抢夺地鼠过冬的口粮;看到蜥蜴,抓来烧着吃或者煮了吃,有人因此中毒而亡。"

"到了寒冬腊月,野菜无迹可寻,他们只能煮干树叶和草籽果腹。草籽吃了胀肚,树叶吃了也便秘,无奈之下,只好趴在洞外的太阳地上,撅着屁股,相互配合掏粪蛋。"

"死亡高峰不可避免地到来。1960年11月中旬,每天都有数十人死去。场部党委书记梁步云慌了神,跑到张掖地委汇报情况,说这样死下去了得吗,请地委给调点粮吧。地委书记是一位坚定的老革命,他训斥梁步云:死几个犯人怕什么?干社会主义哪有不死人的?"

《夹边沟记事》发表后,引起了轰动: 

"远在千里之外,夹边沟右派的后人们传阅着每一篇,奔走相告:夹边沟的盖子揭开了!他们带着这些纪实小说,清明节上坟时焚烧,以告慰父亲冤屈的亡灵。

一位死难者的儿子,在一个偶然的机会里读到了它们,他一下子哭倒在地,把《上海文学》供在桌上,长跪着,一页一页地读,一次次地哭。他对朋友说,父亲去世时他还小,只知道父亲死在夹边沟,但不知道父亲死得这样惨。

在甘肃临洮,杨显惠访问了夹边沟幸存者、82岁的裴天宇老人。老人说,他在甘肃师大当教授的学生寄来了4册《上海文学》,他用了半个月时间才读完那4篇文章。他说,每一次拿起来读不上10分钟,就泪流满面......"

2009年,还被改编成了电影。

我觉得,这本小说集写得非常好。从史料角度看,还原历史真相,真实可信,发人深省;从文学角度看,叙述流畅自然,描写准确生动,全无添油加醋,没有强加于人的评论;从艺术角度看,感染读者的地方首先是残酷的历史,然后是人道主义关怀。这本书没有写成猎奇式或控诉式的作品,而是体现了人性,令50年后的读者感受到悲悯、叹息、愤怒和爱,这是很不容易的。

小说集的《序言》里,有人把此书与索尔仁尼琴的《古格拉群岛》相提并论。我认为,这个评价不过份,《夹皮沟记事》是当代中国最高档次的文学作品,够得上诺贝尔级别。

========================================

下面转贴其中的一个片段。

《董坚毅之死》

作者:杨显惠

摘自小说集《夹边沟记事》中的《上海女人》


1960年国庆节前,夹边沟的右派除去死了的和几百名体质太弱什么活也干不了的,全都迁移到了高台县明水乡的一片荒滩上。省劳改局的计划是从酒泉劳改分局管辖的十几个劳改农场和劳教农场调人,在那片荒滩上建一片河西走廊最大的农场,要开垦五十万亩土地。因为仓促上马冬季临近,其他农场的领导很贼,没有按计划调人,就夹边沟农场的右派调过去了。大约是一千五百人,分别住在祁连山前的两道山水沟里。千百年来,从祁连山里流出的洪水在那片荒滩上冲出了几道深沟。山水沟蜿蜒两公里多长,南边靠近祁连山的一端很浅,越往北越深,最深处有六七公尺,出了山水沟是一片泥沙沉积的沙土地,再往北是一道接一道的沙梁。

由于没有木材盖房,我们住在自己动手挖的窑洞里。窑洞大小不等,沟浅的地方,靠近南端,因为崖坎矮,挖的窑洞才一米高,人四肢着地才能钻进去,进去后坐着刚能仰起脸来。这样的窑洞住一个人或者两个人。我们组的窑洞挖在山水沟中端,很大;我们组最早是二十五个人,在夹边沟死掉了三个,还有三个因瘦得走不动路留在夹边沟了,剩下的十九个人加上其他组没住处的两个人,全住在这个窑洞里。我们组的人,我印象最深的是文大业、崔毅、魏长海,还有晁崇文、钟玉良、章......哎呀,叫章什么来的,那是个西北师院历史系的教授,姓章,可名字突然就想不起来了。对了,崔毅,崔毅这时候已经不在明水也不在夹边沟了,他在两个月前就逃跑了。他是四十年代北大的毕业生,英文讲得特好。这人四十年代就参加学潮,是地下党,解放后是省委宣传部的干部。文大业是省卫生学校的副校长,原兰州医学院教授,死在明水了,吃脏东西死掉的。对了,董坚毅也是那几天死掉的,和文大业前后脚死掉的。

文大业的死我记得很清楚。那是八月上旬的一天,他从自己的铺上挪过来凑近我,说,老李,我活不过一个星期了,我喝粉汤了。我当时吓了一跳,问他真的吗,他说真的。

我可是吓了一跳。他说的粉汤就是用黄茅草籽煮的汤。黄茅草你知道吗?你肯定知道,草滩上到处都长,你就是不知道它叫什么名字。它长的样子就像骆驼草一样,一蓬一蓬的,茎秆比骆驼草的茎秆还粗还高。它的茎是黄色的,叶片也带点黄色,很好辨认。河西的农民都叫它黄茅草,有的叫黄茅柴,因为农民们都拿他当烧柴,有的把它挖来埋在田埂上做风墙----挡风。黄茅草的草籽是能吃的,这我们原来不知道,是酒泉县和高台县的右派们说的,他们也是听老人们说的:闹饥荒的年头,当地的农民们用它充饥。于是,右派们就跟他们学,拿着床单到草滩上铺开,把黄茅草枝条压下来敲打,把籽打下来;然后用手搓,把皮搓掉,再拉着床单摇晃,叫风把皮儿刮走。不能吹,黄茅草籽太小太轻了,像罂粟籽那么大小,一吹就连籽都吹跑了。籽儿收集回去再用锅炒熟。炒的时候要注意,不能炒焦了,只要爆一下就成。当然,那么小的籽儿,你是听不见爆声的,要用眼睛看,籽儿在锅里自己动了一下,那就是爆了。炒熟之后装在小布袋里,缝在衣裳里边,藏好。一定要藏好,干部们要检查的,那东西容易吃死人,干部们不叫吃,检查出来就没收了。

黄茅草籽吃起来也麻烦,抓一撮放在饭盒里煮,著着煮着就成了清白色的粥,真像是淀粉打的粉汤,与淀粉汤的不同之处在于用筷子一挑能拉出丝来。这时候还不能吃,要搅,一边搅一边吹,叫它快点凉下去。凉了的"粉汤"像一团面筋,柔柔的。把它拉成条状,拉长的感觉就像是拉橡胶一样,然后咬着吃。那东西是嚼不烂的,只能咬成一块一块咽下去。这东西根本就没有营养,但是也没毒,吃它就是把空空的肠胃填充一下,克服饥饿感,就像有些地方的人吃观音土一样。这种东西能挺时间,吃上一次能挺三天,因为它是不消化的。既然不消化也就排泄不出来,需要吃别的野菜什么的顶下来。这种东西千万不能在粥状的时候喝下去。在它还没凝固成块状之前喝下去,它会把肚子里的其他食物----树叶子呀,干菜呀,还有别的杂草籽呀----粘在一起,结成硬快堵在肠子里形成梗阻。我估计,在夹边沟和明水至少有几十人因为喝了这种"粉汤"而致死。有些人是出于没有经验,第一次喝了就死去了,但另一些人的想法是嚼着吃太恶心,少喝一点可能没有危险,实际是对"粉汤"的粘性估计不足。

真是吓坏了,我当时就说他:你不知道那东西不能喝吗?他回答:饿得等不及了,还没放凉就喝了几口。我生气地说,几口?就几口吗?他回答,也就半碗。我说这可怎么办呀?他说要是有点蓖麻油就好了。我知道,蓖麻油是泻药,它可以把肠子里的食物变成稀汤子排泄出来。我立即跑出去跑了一趟厂部卫生所,但是医生把我骂了出来:人家都拉肚子拉的要把肠子拉出来,你还要泻药,我到哪里给你找泻药去!

医生说的话也对,农场闹病的人大都是因为吃了脏东西拉痢疾。有些人拉得起不了床,几天就死掉。

我沮丧地回到窑洞,跟文大业说,你还想活不想活吧,想活我就给你掏!

还在夹边沟的时候,我们就互相掏粪蛋蛋了。超常且沉重的劳动把我们的身体榨干了,每天供应的十二两原粮不能提供沉重劳动所需的热量,为了活命,我们把谷糠呀、树叶和草籽呀,凡是我们认为有营养的东西都填进肚子。这些东西是不易消化的,加之我们的肠胃早就没有了油水,所以排泄就成了非常痛苦的事情。我们每次要在茅坑上蹲半天,竭尽全力才能排泄出几个粪蛋蛋。有人在骂人的时候说,你打嗝怎么是草腥昧的!那意思是说你不是人,你是吃草的牲口。我们那时候排泄出的东西就是和驴粪蛋一样的草团子。经常的我们在茅坑上蹲半天,连个粪蛋蛋也排泄不出来,必须相互帮助,互相配合:一个人趴在地上撅着屁股,另一个人从后边掏。我们大多数人都有一个专用工具,是用质地坚硬的红柳枝条削成的木勺,状如挖耳朵勺但又比挖耳朵勺大出许多倍。没有制备专用工具的人只好用吃饭小勺的把儿掏了。

文大业对我讲的时候,事情已经到了很痛苦的程度:小肚子胀得圆鼓鼓的,但又排泄不出来。我马上和他一起走到窑洞外边去,他趴在一个土坎上,撅着屁股,我跪在后边进行操作。但是,用了很长的时间,我也没掏出一点东西来。文大业的肚肠里吃下去了很多菜叶、草籽之类的代食品,"粉汤"把这些代食品黏结在一起,凝成了一个很坚硬的硬块。硬块的直径超过了肛门的直径许多,堵在肛门上,根本就无法掏出来。我试图把这个硬块捅碎,使之化整为零,但也没有成功。我的专用工具一用力,那硬块就移动,根本用不上力,而文大业又痛苦难忍呻吟不止。最后的结果是我的专用工具把他的粪门搞得鲜血淋淋,一塌糊涂,硬块安然如初。

文大业的肚子胀得越来越大,五六天后就"胀"死了。我们把他的尸体用被子裹起来抬到窑洞外边放着,下午,农场掩埋小组的人把他装上马车,拉到北边的山水沟口埋掉了。

我们窑洞里,惟一不吃脏东西的是董坚毅。董坚毅是省人民医院的泌尿科医生,上海人,印象中似乎是毕业于上海的哪个医学院。还在夹边沟的时候我就认识他,就是没说过话,我和他不在一个队。1959年国庆节前夕,农场组织我们去酒泉看酒泉劳改分局搞的《建国十周年劳改成果展》在一家饭馆吃饭,我们俩坐在了一起。夹边沟的右派分子们大都身上带着一些钱和粮票的。这是他们当初从家里带来的,因为劳教农场不许加餐,就总也花不出去。只要遇到外出,见到饭馆,就决不会放过吃一顿的机会的。可惜那时的饭馆里卖饭也是定量,只卖半斤小米饭或者两个馒头。有的人为了多吃一份,只要时间来得及,吃了一家饭馆再钻进另一家饭馆。

那天在饭馆吃饭,我们正好坐在一起,便跟他说了说话,知道了他是在1956年支援大西北建设的热潮中自己要求来兰州的。他原在上海的一家医院当主治医师,来兰州后在省人民医院做泌尿科主任。他爱人也是上海一家医院的医生,那年正好生孩子,就没跟他来。他还说,他爱人是独生女,岳父岳母坚决反对她离开上海,否则也就来了。

董坚毅三十四五岁的样子。

那次在饭馆吃饭,他的文雅书生的样子在我的心中留下了难以磨灭的印象。记得从饭馆出来,右派们排队集合回夹边沟的路上,我跟别人说过,董坚毅活不长了,看他吃饭时细嚼慢咽像是吃什么都不香的样子,就活不长。旁边有人说,你可是说对了,那人吃东西讲究得很。

别人挖野菜呀捋草籽呀逮老鼠呀,什么能填肚子就吃什么,他嫌脏,说不卫生,不吃。他就吃食堂供应的那点东西。

后来有一段时间,我没再看见他,便以为他死掉了。谁知到了明水,他又出现了,并和我住在同一个窑洞里。见面时我还问了一句,老董,你没死掉呀?他笑了一下说,你怎么这样说话呀?我说你不是吃东西很讲究吗,好长时间不见,我以为你死掉了。他告诉我,因为肝硬化,他到场部医务所住院三个月。

到了明水,董坚毅还是不吃脏东西。在夹边沟的时候,因为劳动太过沉重,又吃不饱,----人们每月吃十八斤原粮----就有少数人死去了。到了明水,粮食定量进一步降为每天小两七两,月不足十四斤,一天就吃一顿菜团和一顿菜糊糊,营养极度短缺,大批死亡就开始了。为了减轻死亡,农场领导采取了特殊措施:停止右派们的劳动,准许在上班时间去草滩上捋草籽、抓老鼠和逮蚯蚓充饥,或者在窑洞里睡觉。那一段时间我们把山水沟附近的老鼠和蜥蜴都逮绝了,吃光了,把附近柳树和榆树上的树叶都吃光了。可是董坚毅不吃那些东西,每天吃过了食堂配给的菜团子和菜糊糊以后,就在铺上躺着挨日子。我曾经劝过他,别那么斯文啦,能弄到什么就吃什么吧,活命要紧。他竟然回答:那是人吃的东西吗?

实际上,他之所以没有饿死,完全是他女人的功劳。自从他定为右派到了夹边沟,他女人三两个月就来一次,看望他,并且捎来许多饼干、奶粉、葡萄糖粉之类的食品和营养品。

但是,到了明水才一个多月,他的身体就不可逆转的衰弱了,身上干得一点儿肉都没有了,眼睛凹陷得如同两个黑洞,怪吓人的。他的腿软得走不动路了,每天两次去食堂打饭的路上,他摇摇晃晃地走着,一阵风就能刮倒的样子。在窑洞里要想喝点水,就跪着挪过去。他整天整天地躺在被窝里默默无语,眼睛好久都不睁开。

那是11月中旬的一天傍晚,我正在靠近窑洞门口的地方煮从田野上挖来的辣辣根,----这是一种多年生根类植物,最粗的能长到筷子粗细,煮熟后有一点甜味----董坚毅忽然挪到了我的身旁。我以为他想要吃点辣辣根,便用筷子搛了几根给他。他却推开了,说,老李,我想求你一件事。我问什么事,他说,我认为你是能活着回到兰州去,这是没问题的。我说你怎么认定我能活着回去?你没看见吗,我的脸肿得眼睛都睁不开了,腿也肿得穿不上鞋了。说真的,到了11月,几乎所有的人都衰弱不堪了,除去上次我给你讲过的魏长海。每天晚上入睡的时候,谁都不知道转天早晨还能不能醒来,因为每过三两天就有一个人死去,而且都是睡眠中死去的,没有呻吟,没有呼唤,一点痛苦的挣扎都没有,就静静死去了。

什么,你说人们为什么不逃跑吗?有逃跑的。崔毅不是跑了吗,后来钟毓良和魏长海也跑了。民勤县供销社的主任,哎呀,我叫不出他的名字来了,也跑了。但是逃跑的人总归是个别的,是少数人。绝大多数人不跑。不跑的原因,上次我不是说过了吗,主要是对领导抱有幻想,认为自己当右派是整错了,组织会很快给自己纠正,平反。再说,总觉得劳教是组织在考验我们,看我们对党忠诚不忠诚,如果逃跑不就对党不忠了吗?不就是背叛革命了吗?就怕一失足铸成千古恨,跑的人就很少了。

我说我的身体也不行了,怕熬不出去了,但董坚毅说,老李,你肯定能活着出去,你是个有办法的人。我惊了一下说,我有什么办法?他说,有人给你送吃的,我知道。有过两次了,孔队长夜里叫你出去,你回来后就在被窝里吃东西。我夜里睡不着觉,都听见了。

我不好再说什么了,他的话说得对,他窥探到了我生活中一件极端秘密的事情。还在1959年的时候,夹边沟和新添屯就开始死人了,人们都写信叫家人寄饼干寄炒面,而我也开始考虑如何不被饿死的问题了。考虑来考虑去,我决定讨好孔队长。孔队长是从甘谷砖瓦厂调来的干部,官不大,是夹边沟基建队的副队长,可是他经常跟着马车去酒泉,给农场拉生产资料和生活用品,还从酒泉邮局取回右派们的邮包。我当时想,这个人对我有用,一定要搞好关系,所以有一天我从他那里取省公安厅一位朋友给我寄来的包裹,看包裹里没有吃的,只有一团棉线和一块蓝条绒,我就全都给他了。我对他说,孔队长,这些东西我拿着没用,你拿去给你爱人做件衣裳吧。孔队长是甘谷县人,甘谷县新生砖瓦场撤销后,他调到夹边沟来了,但他女人没调过来,他女人比他小几岁,二十二三岁的样子。女人是农村妇女,从甘谷县来夹边沟看过他,我看见过。他接下了我的东西,像是有点不好意思,跟我说了几句同情的话:这是你家里人寄来的包裹吗?你家里人怎么不给你寄些吃的来,你现在最缺的是吃的东西。我顺着他的话往下说,孔队长,你说得太对了,你真能体谅人。我现在就是缺吃的,可是我是个单身汉,没有对象,父母又年老多病,我不愿叫他们知道我犯了错误在这里劳动改造,这样一来就没有人给我寄吃的了。看起来我的话起了作用,他说,没人寄吃的可是个问题,你的日子不好过呀,可你要是有钱也行呀。我听出来一点门道了,又说,有钱能有什么用处,咱们农场里什么也买不上,拿钱拿粮票也不卖馒头,还得饿肚子。他说,嗳暧,哪能一棵树上吊死,场里不卖,不会到酒泉去买吗?酒泉的黑市上什么都有。我说,黑市上有也没用呀,我们这种人出不去......说到这里我就停住了,想看看他的态度再往下说,结果他却直截了当地说,咳,那有啥难嘛,我三天两头去酒泉,你要是买啥东西就说一声,我给你捎回来不就中了吗!他的话正中我的下怀,我立即就对他说,要是这样,就太感谢你了。只是我还有个困难,你要是能帮助我解决就更好了。他说,你说你说,你有啥难事就说。于是我告诉他,我来夹边沟农场第一天,报到登记的时候,身上带着的一千元钱和三百元公债券都交给财务科的人保管了,现在取不出来。你能不能想办法替我取出来。他回答,这有啥难,明天我就去给你取出来。他说话算话,第二天傍晚就把我叫到副业队的办公室,说钱取出来了。问他怎么取的,他说他告诉财务科的人,我家的老人病了,我要给老人寄钱治病,财务科叫他代我签了个字,就把钱和公债券都给他了。我接过钱和公债之后,立即把三百元公债券给了他,我说,我要的是现金,公债券给你吧,到期后你取出来补贴家用吧。他很高兴。他一个月的工资三四十元,三百元对他可是个大数。趁着他高兴,我又抽出二十元钱给他,请他去酒泉时替我捎点吃的回来。两天后的一个夜晚,我已经睡觉了,听见孔队长的声音喊我,叫我出去一下。我走出去,跟他走到山墙那边,他交给我一个纸包。他说是两块烧饼,并嘱咐我不要叫人知道。此后,每过一个星期,我叫孔队长带一次烧饼,已经有一年多的时间了。当然,有这两块烧饼和没这两块烧饼是大不一样的。虽然烧饼都不大,每块只有半斤重,但是对于我极端虚弱的身体,是不可缺少的补充,使我苟延残喘至今。只是近来我手头的这笔钱已经所剩无几了,而身体健康状况更加糟糕,我内心里极为恐慌。

见我无语,董坚毅又说,我求你一件事,不知道你答应不答应?

我说,你说吧。他说,我爱人要来看我了,但是,我的情况可能是等不到她来。

我很是惊骇,说他,你怎么这样想?不是好好的吗!

他摇着头说,你听我说,我把话说完。近来几天,我坐着坐着,大脑就突然变成空白,意识消失了,眼前的东西都没有了。这不是好现象。

我说,你不要胡思乱想。那是你瞌睡了。

他依然摇头:老李,你不要说了,瞌睡和晕眩我还是分得开的。我没有瞌睡,一天到晚睡觉,我都睡不着,坐一会儿就瞌睡到那个样子?晕眩,那是晕眩,已经出现好几次了。这是预兆......

我说,瞌睡了,你是打盹了。

他说,老李,我是认真和你谈这件事的,你听我说。我前几天就接到我爱人的信了,她说最近要来看我,我也给她写了回信,说近日农场要调一部分人到别的地方去,其中有我,她能来就快来吧。我还告诉他,如果她来了明水找不到我,就找你询问我的情况 我惊叫起来,老董,你怎么这样?他苦笑一下:你不要急,不要着急。我原想不告诉你的,想再等几天,可能还能见着她。今天早晨起床,晕眩又出现了,不能等了,我把这事告诉你。

我说,胡思乱想,你这是胡思乱想,你想老婆想疯了,神经错乱。

他仍然苦笑,然后说,你不要打岔。我求你的事很简单,其实很简单,但你一定要办。当然了,如果她来了,我还活着,就不麻烦你了。如果我这两天就死了,我爱人还没来,求你把我卷起来,就用我的被子卷起来,把我放在里边一点的地方,就是那儿。

我们的窑洞本来就挖得很大,近来又抬出去了几个人,所以靠着最里边的黑暗处已经空出了很大的一片空当。他指了指那片空当又说,你们把我放几天,等我爱人来了,把我的情况告诉她,叫她把我的尸体运回上海去。

他说了求我的事,然后用黑洞洞的眼睛看着我,那意思是问我答应不答应。我没吭声,我的心当时抽紧了,不知说什么好。静了一下,他又说,求求你,求你帮我这次忙。我不愿意把自己埋在这里。老李,当初呀,我爱人,我的父母,还有岳父岳母,都劝我不要来大西北,我没听他们的话,一心要支援大西北建设,来了大西北。我真后悔,后悔没听他们的话。那天董坚毅说了很多话,并且最后还说,在窑洞里放上三几天,如果他爱人还没有来,就把他抬出去埋了。否则会发臭的,太脏。

三天后董坚毅死去。我们窑洞死去的几个人都是在睡梦中死去的,睡着后再也没醒过来。董坚毅不是,他死于白天。那是他委托后事的第四天上午,他围着被子坐在地铺上和我说话,说他女人快到了,看来用不着我为他料理后事了。他正说着话,头往膝盖上一垂就死了。这样的死亡方式我在电影里看到过,我总认为那是艺术的夸张,但自从董坚毅死后,我相信了,艺术是真实的。遵照死者的嘱托,我和晁崇文把他用他的鸭绒被和一条毯子裹起来,塞到窑洞的角落里,等他女人来收尸。

(完)

文档信息