光靠状態標记还不够,错误可能更隱蔽。
李林的大脑在飞速运转,模擬著编程场景中可能出现的错误。
比如,释放了一个不属於任何已分配块的地址呢?
他又在分配器中加入了一个已分配列表,释放时先在列表中查找目標地址。
找不到?
那就是野指针,同样拒绝释放,输出警告。
“防御性编程……在已经设立防线的情况下,还要用结构化的方式来儘可能保证安全。”
里奇满意地点点头,看向李林的目光不仅有欣赏,似乎还有些感慨。
像是在看一个和自己走在同一条路上的后辈。
“说说看,你是怎么想到这些的?”
李林愣了一下。
怎么想到的?
他思考片刻,摇了摇头,然后如实说道,
“我的能力还不足以想到这些。我只是……站在巨人的肩膀上而已。”
里奇没有说话,微微眯起眼睛,等待著他的下文。
“就像细胞。细胞里有遗传物质,也有处理这些遗传物质的酶。它们被同一个细胞膜包裹在一起,不分离。被释放的內存块也应该带著自己的状態、检查状態的方法和处理错误的方法。它不是一个被动的数据单元,而是一个主动的、对自己负责的结构。”
里奇沉默了很久。
头顶的日光灯管依旧嗡鸣,身侧pdp-11的机箱风扇依旧呼呼地转著,但他却觉得世界如此安静。
然后,他笑了。
“细胞。”
他缓缓地念叨了一遍,
“数据和操作数据的函数,封装在同一个结构体里。让结构体自己去处理自己的生命周期。”
他顿了顿,目光落在李林身上,
“你来自哪里,孩子?”
“半个世纪之后,里奇先生。”
“哦——那真的是……很幸运的事情。”
里奇语气出奇的平和,
“你能见到这么多我不知道、也没机会知道的事情。”
他站起来,走到方格纸前,伸手在那棵已经恢復秩序的二叉树上轻轻一点。
“这个想法,它应该有个名字。”
“面向对象,先生。您的c语言,是面向过程的。”
里奇沉默了一会儿,才缓缓开口,
“真是精闢的总结。”