有些人可能知道我在设计一个程序语言,叫做 Yin 语言。最开头宣布要做这个语言的时候,很多人热血沸腾,可是过了不久,我发现自己很不喜欢这样的气氛,越来越厌倦跟人讨论,所以后来悄悄地丢掉这些人,淡出了。我现在想告诉你我是怎么想的。
我从来没有想让 Yin 语言流行起来。我对程序语言的认识,其实超乎所有人的想象。我默默地看着各种新语言扯着各种幌子,不吸取历史教训,继续犯一些古老的错误,或者犯一些我根本不会犯的新错误,或者解决一些根本不需要解决的问题。这些语言缺少的不是功能,而是简单和优雅。要达到简单和优雅,必须要有品位,而品位就像一个艺术家的心,是非常难得到的。没有经过 Indiana 式教育的人,是几乎不可能达到这种品位的。就算 Friedman 培养出来的那么多学生,也极少有人可以达到我这种地步。我清楚的知道,其它语言设计者是完全没法达到我的一些精华思想的。我很希望他们设计出那样的东西,这样我就不需要亲自动手了,然而至今没有发现任何人可以做到,甚至根本没有想到。这些想法,早在多年前就已经被我在多个原型中实现过,所以具体做起来不会是问题。在我的心目中,Yin 语言就像原子弹的技术。我不想搞核扩散,我并不想让所有人都得到它。我曾经觉得应该把它与全世界分享,后来我发现,你越是愿意分享,别人越是不拿你的东西当回事。我觉得这个世界不配拥有这样的语言,因为人类是那么的愚蠢,而世界对我是如此的不友好。在资本主义这种奖励贪婪人的制度下,Yin 语言被所有人掌握,很可能不是在造福世界,而是一种灾难。所以即使我把 Yin 语言做出来了,它也只会属于少数人,我不想让这样的技术落到贪婪或者愚蠢的人手里。
我很不喜欢人们对于一个新语言的反应。我不会因为人们对我设计的东西显示出盲目的热血沸腾而受到鼓舞,因为越是盲目热情的人,越可能脑子有问题,越可能在将来浪费我的口水,有理也说不清。我宣布开发 Yin 语言的第一天,就有人想把其他语言的“社区”的概念放到它身上。就像很多语言都搞得像宗教一样,一下子出现了好些想做“Yin 语言传教士”的人。有些人太积极了,未经我同意就建立了 IRC 聊天室之类的东西,还有人立即买了个域名给 Yin 语言(然后控制权还没有给我)。他们其实没有想到,那些都不是我想要的。我很不喜欢其他语言的宗教性质,社区意识,阵营意识。我感觉有很多人其实只是想抢占“第一把交椅”,就像很多其他语言的狂热分子一样。他们让我感觉,从一开头我就已经失去了对这个语言的控制,仿佛它不再是我的设计。Yin 语言跟其它语言不一样,它不应该有一个社区,不应该成为一个宗教,因为我是一个科学家,我的设计完全出于理性的思考。
我也不喜欢很多人对 Yin 语言肤浅的赞美或者质疑。有些人激动地对我说:“美国人,日本人,都有可以设计语言的人了,我们中国终于也有了!” 有的人甚至建议让它看起来像中文,符合中国人的思维方式。这些说法显示出人们对语言设计的无知和品位的低下。日本人做出了什么语言呢?我只知道一个日本人造的语言,它是一个彻底的垃圾 :P 而且一个程序语言本来就跟人类语言扯不上任何关系,只不过有些关键字是人类语言的单词而已。也没有所谓“符合中国人的思维方式”一说,因为人脑其实根本就不是用人类语言在思考。人脑的思维方式更像是一种程序语言,一种电路,而不是人类语言。只有需要跟另一个人交流的时候,人脑才会把内部的“数据结构”转换成人类语言,就像 Java 的 toString ()方法一样。这就是我现在正在做的事,我很清楚我现在给你们打的这些字,不可能完全符合我的思维,也就是言不达意。所以无论把一个语言设计得像中文或者像英语,最后都是一个错误,因为普通的程序语言(比如C)早就在很多方面超越了人类语言,没有人类语言特有的那些历史遗留问题。SQL 和 COBOL 之类的语言试图设计得像英语,结果惹出更多的麻烦事,得不偿失。想要一个程序语言有“中国特色”,其实显示出国人的自卑心理,也是在贬低我的价值。“中国第一”对我来说毫无意义,这让我感觉他们其实认为 Yin 语言跟“国产 Linux”是一类的。要知道,我是世界上最强的语言设计者之一(很可能没有之一),我的价值是不限定于任何国家的。
还有的人开始发送各种 github issue,请求他们在其他语言(比如 Ruby)里用过,认为重要的“特性”。有人要求我给这个语言“定性”,一本正经的要我说明这是什么“范式”的语言。有人义正言辞的索取 1.0 版本的 specification。有人开始质疑我的一些设计,甚至自作聪明的做了改动。有人质疑我为什么不用正则表达式来做 lexer,跟我说 Java 的 lexer 多么的严谨,因为它用了正则表达式…… 这一切都让我觉得越来越傻,越来越无语,越来越浪费时间和口水。他们不知道,他们头脑里的很多概念几乎全都不存在于我的脑子里。我不喜欢有人自作聪明,觉得好像自己懂很多似的,好像还可以评价甚至教育我。每一次不耻下问都发现似乎有人真以为我不懂,以为自己是专家了。Yin 语言也许根本不符合任何一种“语言范式”,然而它也不会像 Scala 一样弄成个大杂烩。它应该是天衣无缝的设计,就像一句名言说的:“一个设计师知道他达到了完美,并不是当他不能再加进任何东西,而是当没有任何东西可以被去掉。”
另外,很多人认为重要的特性,很有可能是有问题的。他们不明白,现有程序语言的问题,不是没有实现某些特性,而是实现了多余的特性,有问题的特性。如果错误的特性被加了进去,一旦有人开始用这个语言,就再也没法去掉了。所以作为一个优秀的语言设计者,我的一项重要任务是防止多余或者有问题的特性进入语言里。我也很不喜欢有人拿我的语言,我的开发实力跟其它语言作对比,因为比较本身就是一种不尊重的行为。比如有些人质疑 Yin 语言有没有 Go 语言好,其实是在贬低我,因为我的水平跟 Go 语言的设计者根本不是一个档次的,Go 语言的设计者当我的学生都不合格。
所以,Yin 语言的设计开发其实仍然在缓慢地进行中,然而已经不再公开,不再开源。我觉得所谓“开源精神”纯属扯淡,很多人开源不过是为了提高自己代码扩散的速度,提高知名度,这样可以带来利益,其实没有人真的是想做什么“贡献”的。这样的虚伪行为带来了开源社区的代码质量普遍低下,各种浮夸之风盛行,有人却看不出来。我不是 Paul Graham,我不会吹牛,扬言要做个叫 Arc 的 Lisp 方言,结果最后做出来的东西连退步都不是(not even a step backwards)。我是有真正的实力,受过系统的精深的教育的,然而我真的有自己的困难和自己的生活。太多不合格的程序语言设计者占据了重要的语言设计岗位,很多公司已经完全不明白谁才是真正的专家。由于没有经济支持,我的大部分时间得用来做其他工作。设计语言是一个吃力不讨好的活,我想找到其它事情,甚至进入另一个领域,利用我的特殊品味来创造更大的价值。我不是工作狂,我也需要休闲和娱乐。我已经为技术耗费了太多的生命,我觉得我的人生是不完整的。为自己工作其实仍然算是工作,工作和生活需要平衡。我需要享受生活,需要陪我的猫咪,需要跟朋友玩,所以显然是不会浪费周末明媚的阳光,蹲在家里写代码的。所以 Yin 语言的开发虽然在进行,进度是不会很快的。即使我完成了,可能也不会给很多人用的。所以你们还是继续忍受现有语言和系统的扯淡和煎熬吧 :)