里奇后退两步,靠在椅背上,双手交叉在胸前。

他不是在刁难,他只是充满好奇。

这个问题不是凭空產生的,而是他真切遇到过的问题。

所以,里奇也在思考。

同样地,他也期待眼前这个年轻人,能给出一个让他感到新奇的解法。

就像他之前做到的那样。

李林深深吸了一口气。

此刻他脑海中有混乱、有震惊,但唯独没有恐惧。

因为他並没有从里奇身上感受到恶意。

这只是一个挑战。

一个他必须接受的挑战。

这就是c语言之父的威能吗,连繫统这种產物都得被他压制。

幸好,李林的知识都装在脑子里。

“呼——”

他没有急著动手,而是先试著理顺思路,说出了自己的思考,

“要真正解决问题,必须依靠系统本身防御错误的能力。毕竟,错误就像现实世界的熵增,一定会发生。所以,逻辑不仅要正確,还要设置防线。”

“那就让分配器自己处理。”

里奇的声音从虚空中传来,他的思路逐渐与李林重合,

“唯一的目標是,不许崩溃。”

李林点点头,似乎是同意了里奇的说法。

他重新抬起手,尝试在方格纸上构筑新的秩序。

这一次,他从逻辑入手,为它加上了一道免疫防线。

他修改了分配器,给每一个內存块的头信息添加了一个状態標记。

分別代表已分配、空閒、已释放。

释放一块內存之前,先检查它的状態。

如果状態已经是“空閒”或“已释放”,说明它已经被释放过了。

这时候不再执行合併操作,而是直接拒绝第二次释放,记录一条错误信息,然后返回。

“状態机?”

里奇的声音再次响起,语气里带著不加掩饰的惊喜。

他知道,他赌对了。

“你给每一个內存块赋予了一个有限状態机,从而把释放变成了一次带有前置条件验证的状態转移。”

李林点了点头,手指却没有停下来。

因为还不够。

光靠状態標记还不够,错误可能更隱蔽。

李林的大脑在飞速运转,模擬著编程场景中可能出现的错误。

比如,释放了一个不属於任何已分配块的地址呢?

他又在分配器中加入了一个已分配列表,释放时先在列表中查找目標地址。

找不到?

那就是野指针,同样拒绝释放,输出警告。

“防御性编程……在已经设立防线的情况下,还要用结构化的方式来儘可能保证安全。”

里奇满意地点点头,看向李林的目光不仅有欣赏,似乎还有些感慨。

像是在看一个和自己走在同一条路上的后辈。

“说说看,你是怎么想到这些的?”

李林愣了一下。

怎么想到的?

他思考片刻,摇了摇头,然后如实说道,

“我的能力还不足以想到这些。我只是……站在巨人的肩膀上而已。”

里奇没有说话,微微眯起眼睛,等待著他的下文。

“就像细胞。细胞里有遗传物质,也有处理这些遗传物质的酶。它们被同一个细胞膜包裹在一起,不分离。被释放的內存块也应该带著自己的状態、检查状態的方法和处理错误的方法。它不是一个被动的数据单元,而是一个主动的、对自己负责的结构。”

里奇沉默了很久。

头顶的日光灯管依旧嗡鸣,身侧pdp-11的机箱风扇依旧呼呼地转著,但他却觉得世界如此安静。

然后,他笑了。

“细胞。”

他缓缓地念叨了一遍,

“数据和操作数据的函数,封装在同一个结构体里。让结构体自己去处理自己的生命周期。”

他顿了顿,目光落在李林身上,

“你来自哪里,孩子?”

“半个世纪之后,里奇先生。”

“哦——那真的是……很幸运的事情。”

里奇语气出奇的平和,

“你能见到这么多我不知道、也没机会知道的事情。”

他站起来,走到方格纸前,伸手在那棵已经恢復秩序的二叉树上轻轻一点。

“这个想法,它应该有个名字。”

“面向对象,先生。您的c语言,是面向过程的。”

里奇沉默了一会儿,才缓缓开口,

玄幻魔法小说相关阅读More+

斗罗龙王:吾为神王,镇压一切敌

佚名

我在德国当文豪

佚名

红楼:什么叫黛玉是我青梅竹马

佚名

寂静的冬天

佚名

烽火山河:黑金血脉

佚名

我以秦腔镇戏鬼

佚名