游人小说网 > 四合院开局四八,八岁带妹逃荒 > 第607章 逻辑的岔路!魔鬼的诞生!

第607章 逻辑的岔路!魔鬼的诞生!


“完成了?”

黄建功又惊又喜。

这才一周时间,“华夏”语言的规范就出来了?

钱学敏他们,是什么效率!

“快!拿来我看看!”

黄建功迫不及待地从联络员手中,接过了那份厚厚的,还散发着油墨香气的《华夏语言第一版设计规范》。

实验室里,所有的专家,也都好奇地围了过来。

他们也想看看,自己未来要“翻译”的,究竟是一门怎样的“神谕语言”。

黄建功翻开了第一页。

“华夏语言设计总则:以人为本,大道至简,优雅清晰……”

看到这十二个字,黄建功赞许地点了点头。

没错,这完全符合老师的点化。

他继续往下看。

“第一章:数据类型。本语言定义四种基本数据类型:整数(INTEGER)、浮点数(FLOAT)、字符串(STRING)、布尔(BOOLEAN)……”

“嗯,不错,严谨!”黄建功抚了抚眼镜。

“第二章:循环结构。本语言推荐使用FOR循环与WHILE循环,不推荐使用GOTO语句,以保证代码的结构化与可读性……”

“好!有远见!”黄建功的脸上,露出了笑容。

他仿佛已经看到,未来用“华夏”语言写出来的程序,会是何等的赏心悦目。

然而,当他翻到第三章,“运算符与表达式”时,他的眉头,微微皱了起来。

“第三点一节:自增与自减运算符。为简化代码,本语言引入++与--运算符。A++等价于A  =  A  +  1,A--等价于A  =  A  -  1……”

“嗯?”黄建功发出了一声轻咦。

A++?

这个设计,确实很简洁。

但是,对于编译器来说,这意味着,要增加一个全新的,对++这个双字符运算符的,特殊识别逻辑。

他隐隐感觉,事情好像没有那么简单。

他压下心中的一丝疑虑,继续往下看。

“第三点二节:复合赋值运算符。本语言引入+=、-=、*=、/=等复合赋值运算符。A  +=  10等价于A  =  A  +  10……”

黄建功的眉头,皱得更深了。

又是一堆,新的双字符运算符。

这会大大增加他们“词法分析器”的复杂程度。

钱老他们,为了追求所谓的“简洁”,是不是有点……走得太远了?

但真正让他感到不安的,是接下来的一个章节。

“第四章:语句结构。第四点三节:表达式语句。本语言允许将一个独立的表达式,作为一个完整的语句。例如,A  +  B;本身就是一句合法的语句,尽管它可能没有实际意义……”

“什么?!”

黄建功失声叫了出来。

一个独立的表达式,也能算一个语句?

那A  +  B;和A  =  A  +  B;,编译器该如何区分?

这……这不是在给编译器,制造混乱吗?

“黄老,怎么了?”旁边的人,好奇地问道。

黄建功没有回答,他的脸色,变得无比凝重。

他有种非常不好的预感。

他翻到了最后一章,附录。

“附录A:关于IF语句的说明。本语言的IF语句,可以省略THEN关键字。例如,IF  A  >  B  PRINT  "A更大"是合法的。”

“附录B:关于函数调用的说明。本语言的函数调用,可以省略括号。例如,PRINT  "你好"等价于PRINT("你好")。”

“附录C……”

黄建功越看,手心越是冰冷。

他终于明白,问题出在哪里了。

钱学敏他们,这群搞理论的,为了追求所谓的“人性化”和“灵活性”,在语言里,加入了太多太多,模棱两可的,有歧义的语法!

在人看来,PRINT  "你好"和PRINT("你好"),意思是一样的。

IF  A  >  B  PRINT  "A更大"和IF  A  >  B  THEN  PRINT  "A更大",意思也是一样的。

人类的大脑,可以很轻松地,根据上下文,理解其中的含义。

但是,机器不行!

机器是死板的!

它的“语法分析器”,在解析IF  A  >  B  PRINT  "A更大"这句代码时,会遇到一个致命的问题。

当它读到IF  A  >  B之后,它期望下一个读到的,是一个明确的THEN关键字。

但是,它读到的,却是一个PRINT。

这个时候,它就“懵”了。

它不知道,这个PRINT,是属于IF语句的一部分呢,还是一个新的,独立的语句的开始?

这就是“语法歧义”!

一个,足以让整个编译过程,彻底崩溃的,致命的妖怪!

“完了……”

黄建功的手,开始颤抖。

那份设计规范,在他手里,不再是智慧的结晶,而像一个潘多拉的魔盒。

钱学敏他们,出于好心,为了让语言变得更“自由”,更“简单”。

却在无意中,释放出了一个,名为“歧义”的,逻辑上的妖怪!

他们亲手,为自己,也为编译器组,挖了一个,深不见底的巨坑!

“黄老?黄老!您没事吧?”

周围的专家,看到黄建功脸色惨白,额头冒汗,都吓了一跳。

“快!快去把钱老请过来!”黄建功的声音,嘶哑而急促,“出大事了!”

他知道,这门“华夏”语言,从它诞生的那一刻起。

就已经走上了一条,逻辑的岔路。

而这条路的尽头,不是通往神国的天梯。

是一个,由他们自己创造出来的,万劫不复的,逻辑深渊!

半小时后。

“编译器”攻关组的会议室,气氛紧张到了冰点。

钱学敏和几位“神谕语言”设计组的核心成员,匆匆赶到。

他们看到黄建功和一众编译器专家,个个脸色铁青,都感到有些莫名其妙。

“老黄,怎么了?火急火燎地把我们叫过来?”钱学敏笑着问道,脸上还带着一丝创造出完美作品的得意,“是不是被我们的设计,给惊艳到了?”

黄建功没有说话。

他只是拿起一支粉笔,走到黑板前,写下了一行,他们规范里定义的,“合法”代码。

IF  A  >  B  IF  C  >  D  PRINT  "1"  ELSE  PRINT  "2"

写完,他转过身,用一种极其压抑的目光,看着钱学敏。

“钱老,请问,这行代码,是什么意思?”

钱学敏看了一眼,不假思索地回答:“很简单啊。如果A大于B,那么,就再判断C是不是大于D。如果C也大于D,就打印‘1’。否则,就打印‘2’。”

“是吗?”

黄建功的嘴角,扯出一个比哭还难看的笑容。

“那为什么,不能是这样理解呢?”

“如果A大于B,那么,就执行后面的IF  C  >  D  PRINT  "1"这个判断。”

“但是,如果A不大于B,那么,就执行ELSE  PRINT  "2"。”

他用粉笔,重重地在ELSE这个词上,画了一个圈。

“请问,这个ELSE,它到底是跟第一个IF配对的,还是跟第二个IF配对的?”

钱学敏脸上的笑容,瞬间凝固了。

他张了张嘴,想反驳。

可他发现,自己竟然,无从反驳。

从人类的阅读习惯来说,ELSE通常是和最近的那个IF配对。

但是,从语法的可能性上来说,它跟第一个IF配对,也完全说得通!

一句话,两种截然不同的解释!

这就是,赤裸裸的,无法回避的“歧义”!

“这……这……”

钱学敏的额头,也开始冒汗了。

他和其他几位语言组的专家,面面相觑,都从对方的眼中,看到了震惊和慌乱。

他们之前,光顾着追求语言的“灵活性”,完全没有考虑到,这种嵌套结构下,会产生如此致命的问题!

“这只是其中一个问题!”

黄建功的声音,变得严厉起来。

他擦掉黑板上的代码,又写下了另一行。

A  =  B  +  C  *  D;

“这句,很简单,先算乘法,再算加法,对吧?这是我们小学就学过的‘运算符优先级’。”

“但是!”

他话锋一转,又写了一行。

A  =  B  +  C++;

“这句呢?钱老,您告诉我,是先算B+C,再让C自增1?还是先让C自增1,再算B加上那个新的C?”

钱学敏,彻底说不出话了。

他发现,他们引以为傲的,那个简洁的++运算符,在这里,也成了一个“歧义”的源头!

“还有这个!”

黄建功几乎是在咆哮了。

PRINT  A  B  C;

“你们说,为了方便,函数调用可以省略括号!”

“那这句话,编译器怎么知道,你是想调用一个,名为PRINT,参数是A、B、C的函数?还是想调用一个,名为PRINT,参数是A的函数,然后,B和C是另外两个独立的变量?”

一个个尖锐的问题,像一把把锋利的刀子,狠狠地扎在钱学敏和所有语言组专家的心上。

他们设计的那些,所谓的“优雅”、“简洁”的语法糖。

在编译器那冰冷、严苛的逻辑面前,全都变成了一个个,可笑的,致命的毒药!

“我们是在造‘通天塔’!不是在盖狗窝!”

黄建功将手中的粉笔,重重地摔在地上,粉笔断成了两截。

“通天塔的每一块砖,都必须是标准的!尺寸、角度,不能有丝毫的偏差!”

“而你们!给我们的,是什么?!”

“是一堆,奇形怪状,棱角不明的石头!”

“你们让我们,怎么用这些石头,去建造一座,能够通往神国的,伟大的巴别塔?!”

“用这些石头盖起来的,只会是一座,随时都会崩塌的,危楼!”

巴别塔……

这个词,让钱学敏的身体,剧烈地一颤。

他想起了那个古老的传说。

人类妄图建造通天高塔,最终,因为语言的混乱,而分崩离析,功败垂成。

而现在……

他们,正在重蹈覆辙!

他们创造的“华夏”语言,非但没有成为沟通的桥梁,反而,成了混乱的源头!

“老黄……我……我们……”

钱学敏的嘴唇,一片煞白。

他想道歉,想解释,说他们只是想让语言更友好,更方便。

可是在这铁一般的事实面前,任何的解释,都显得那么苍白无力。

他们,错了。

从一开始,就错了。

他们误解了老师“大道至简”的真正含义。

真正的“简”,不是形式上的,让人类写起来简单。

而是逻辑上的,让机器理解起来,没有歧义!

是规则的清晰!是秩序的井然!

而他们,却把“自由”,当成了“简单”。

最终,亲手,为这座通天塔,制造了第一道,也是最致命的一道裂痕。

“巴别塔”的裂痕,一旦出现,就再也无法弥合。

两个原本亲密无间的攻关小组,第一次,产生了巨大的隔阂。

“编译器”攻关组的专家们,怨声载道。

“这活儿没法干了!语言组那帮人,根本不知道我们在做什么!”

“他们设计的每一条‘方便’的语法,都是给我们增加一倍的工作量!”

“什么++,什么省略括号,这都是异端!是魔鬼的设计!”

“语法分析器,已经重写了三个版本了!每次都是因为他们新加的‘语法糖’,导致整个逻辑推倒重来!”

而“神谕语言”设计组那边,也充满了委屈和不满。

“我们是‘以人为本’!这有什么错?这可是老师亲自点化的!”

“是他们编译器组的人,太死板了!脑子转不过弯来!”

“不就是多几种情况吗?多写几个判断逻辑不就行了?哪有那么复杂!”

“我看他们就是能力不行,还怪我们设计得不好!”

争吵,在两个小组之间,不断爆发。

原本热火朝天的西山实验区,第一次,笼罩在一种互相指责,互相推诿的,压抑的氛围之中。

聂老总和黄建功、钱学敏,开了好几次协调会。

但问题的根源,在于思想上的巨大分歧,根本无法调和。

最终,在巨大的压力下,他们只能选择一个,最笨,也是最无奈的办法。

——打补丁。

“既然有歧义,那我们就,增加新的规则,来消除歧义!”

在一次争吵不休的联席会议上,钱学敏疲惫地提出了一个解决方案。

“比如,IF语句的ELSE悬挂问题。我们就强制规定,ELSE永远和最近的,那个没有配对的IF结合!”

“这……这不是又增加了新的,复杂的规则吗?”编译器组的人立刻反对。

“那你们说怎么办?!”钱学敏也来了火气,“难道要把整个设计,都推倒重来吗?!”

编译器组的人,沉默了。

推倒重来,意味着过去一个月的努力,全部白费。

这个代价,谁也承担不起。

“好,那就按钱老说的办!”黄建功最终拍了板,“先解决眼前的问题!”

于是,一场轰轰烈烈的,“打补丁”运动,开始了。

为了解决A  =  B  +  C++;的歧义,语言组规定,++放在变量后面(后缀),是“先使用,再自增”;如果放在变量前面(前缀),比如++C,就是“先自增,再使用”。

为了解决函数调用省略括号的歧义,他们又规定,如果函数名和第一个参数之间,没有空格,就视为省略了括号;如果有空格,就视为不同的语句。

……

一条条,越来越复杂的,如同补丁摞补丁般的规则,被不断地,添加到那本,本应简洁明了的《华夏语言设计规范》里。

那本规范,从最初的五十页,迅速膨胀到了一百页,一百五十页……

“华夏”语言,也从一个,本应清秀可人的少女,变成了一个,被缝上了各种奇怪肢体的,臃肿不堪的,弗兰肯斯坦式的怪物。

它不再“优雅”。

它不再“简洁”。

它充满了各种,需要死记硬背的,反直觉的,特殊的规则和例外。

而“编译器”攻关组的日子,更加苦不堪言。

他们每实现一个“补丁”规则,就意味着,要在他们那本已无比复杂的“状态机”里,增加更多的状态,和更曲折的跳转逻辑。

他们的代码,变得越来越臃肿,越来越难以维护。

一个小小的改动,就可能引发一连串的,连锁反应,导致整个系统崩溃。

他们感觉,自己不再是“翻译官”。

而是在为一个,精神分裂的病人,进行同声传译。

每一句话,都需要小心翼翼地,揣摩对方那混乱的,毫无逻辑的思维。

两个月过去了。

距离黄建功当初定下的,“三个月之期”,只剩下最后不到一个月。

“编译器”的原型,终于,在无数次的崩溃和重启之后,勉强能够运行了。

它能够“翻译”一些,最简单的“华夏”代码。

比如,LET  A  =  10。

比如,LET  B  =  20。

比如,LET  C  =  A  +  B。

PRINT  C。

当测试屏幕上,终于,显示出那个,代表着“30”的二进制结果时。

整个实验室,没有欢呼。

只有一片,死寂。

所有人都像是被抽干了力气,瘫倒在椅子上,大口大口地喘着粗气。

黄建功看着那个简单的“30”,脸上,没有一丝一毫的喜悦。

他知道,这根本不是胜利。

这只是,用无数的妥协和补丁,堆砌出来的,一个虚假的幻象。

这个编译器,太脆弱了。

它就像一个,用胶水粘起来的,玻璃房子。

看起来很美,但只要代码稍微复杂一点,稍微不符合那些,千奇百怪的“补丁”规则。

它就会,瞬间,土崩瓦解。

这天晚上,黄建功一个人,悄悄地,走进了“盘古之心”的恒温机房。

他看着那片,在金色盒子里,静静沉睡的芯片。

他伸出手,轻轻地,抚摸着冰冷的金属外壳。

“孩子……我对不起你啊……”

老人的声音,在空旷的机房里,显得格外悲凉。

“我们……给你造了一个,全世界,最愚蠢,最丑陋的,大脑皮层……”

“我们,不是在创造。”

“我们是在,缝合一个,怪物。”

“我们,把老师的‘神谕’,给……彻底搞砸了。”

他的眼眶,湿润了。

他知道,这条路,已经走到了尽头。

再往前,就是万丈深渊。

他们,必须停下来。

必须,承认自己的失败。

第二天一早。

黄建功召集了“仓颉”计划所有核心小组的负责人,开了一场闭门会议。

会议室里,烟雾缭绕。

所有人的脸上,都写满了这两个月来,被反复折磨后,留下的深深的疲惫。

没有人说话。

气氛,压抑得像一块铁。

黄建功将一份厚厚的报告,推到了会议桌的中央。

报告的封面上,写着几个触目惊心的大字。

《“仓颉”计划第一阶段总结暨失败原因分析报告》。

“都看看吧。”

黄建功的声音,沙哑得好像几天没喝过水。

钱学敏第一个,拿起了那份报告。

他的手,在微微颤抖。

报告里,没有长篇大论的理论分析。

只有一页又一页,触目惊心的,对比数据。

“‘华夏’语言,V1.0版本,关键字共计152个,特殊运算符37个,语法规则及特例共计412条。”

“‘编译器’,V0.1原型,核心代码(机器码)共计三百七十万行,状态机节点超过一万个。”

“编译效率:编译一条简单赋值语句,平均耗时3.2秒,占用‘盘古之心’百分之四十的运算资源。”

“稳定性:在1000次复杂语法测试中,编译器崩溃987次,崩溃率高达98.7%。”

……

每一行数据,都像一记响亮的耳光,狠狠地抽在钱学敏和所有语言组专家的脸上。

他们创造的,不是一门“简洁、优雅”的语言。

而是一个,臃肿、复杂、低效、且极不稳定的,代码怪物。

而编译器组,为了去“伺候”这个怪物,也把自己,变成了一个,同样臃肿、庞大、濒临崩溃的,另一个怪物。

“我们错了。”

黄建功缓缓开口,声音不大,却清晰地传入每个人的耳朵。

“错得,一塌糊涂。”

“我们从一开始,就误解了老师的‘道’。”

“我们把‘人性化’,等同于‘随心所欲’。”

“我们把‘灵活性’,等同于‘没有规矩’。”

“我们妄图,让机器,去迁就我们人类思维的,模糊和散漫。”

“结果,就是我们创造出了一个,连我们自己,都无法驾驭的,逻辑上的‘奇美拉’。”

他抬起头,目光扫过在场的每一个人,那目光里,充满了痛苦和决绝。

“我宣布,‘仓颉’计划,第一阶段,彻底失败。”

“《华夏语言第一版设计规范》,及其所有衍生设计,全部作废!”

“‘编译器’V0.1原型,及其所有代码,就地封存,销毁!”

“什么?!”

这个决定,像一颗炸弹,在会议室里炸响。

“黄老!不行啊!”

“这可是我们两个月的心血啊!”

“虽然它不完美,但至少能用啊!我们可以慢慢优化……”

一名年轻的专家,不甘心地站了起来。

“优化?”黄建功冷笑一声,“你告诉我,怎么优化?在一堆,已经烂到根里的地基上,去盖摩天大楼吗?”

“我们现在做的,不是在前进,是在一条错误的道路上,越走越远!”

“每多写一行代码,都是在增加我们未来的,纠错成本!”

“长痛,不如短痛!”

“必须,推倒一切,从头再来!”

黄建功的态度,无比坚决。

会议室里,再次陷入了死寂。

所有人都知道,黄老说得对。

这个怪物,已经没有“优化”的价值了。

唯一的出路,就是亲手,杀死它。

可是……

从头再来?

他们,又能从哪里开始呢?

那条正确的“道”,又在哪里?

所有人的脸上,都露出了,比两个月前,更加深邃的,茫然和绝望。

上一次,他们是不知道该怎么走。

这一次,他们是亲身证明了,一条路是死路,却又,完全看不到任何新的道路。

“我……去找聂老总。”

黄建功站起身,步履蹒跚地,向门外走去。

他的背影,在灯光下,显得无比的苍老和萧索。

“我们……又一次,投降了。”

……

半小时后,聂老总的办公室。

聂老总听完黄建功的汇报,看着那份“失败报告”,长久地,沉默着。

他没有发火,没有指责。

只是点上了一根烟,一口一口,用力地吸着。

办公室里,烟雾弥漫。

“我明白了。”

良久,聂老总掐灭了烟头,缓缓开口。

“看来,我们这群学生,还是太笨了。”

“老师的第二道考题,我们……交了白卷。”

他的脸上,也露出了深深的疲惫。

这两个月,他承受的压力,比任何人都要大。

他顶住了所有的质疑,给了西山最大的支持和信任。

换来的,却是这样一个,彻底失败的结局。

“准备一下吧。”

聂老总看着窗外,灰蒙蒙的天空,声音里,带着一丝,连他自己都不想承认的,认命般的无奈。

“让兴华同志,准备出发吧。”

“这第十三次……恐怕,要比以往任何一次,都更难开口啊。”


  (https://www.yourenxs.cc/chapter/5415337/40435176.html)


1秒记住游人小说网:www.yourenxs.cc。手机版阅读网址:m.yourenxs.cc