多年来,我听到很多关于我们开发人员必须使用的继承项目的抱怨.WTF网站上有大量的代码示例,让我在我的呼吸下实际上嘀咕"WTF?"
但实际上你们中的任何一个人都被提供了让你离开的代码,"这是经过深思熟虑的神圣废话!" 或者"哇,我从未想过那个!"
您必须使用哪些继承代码才能让您微笑,为什么?
很久以前,我负责Turbo C/C++运行时库.Tanj Bennett用16位汇编程序编写了原始的80x87浮点仿真器.我没有密切关注Tanj的代码,因为它运作良好并且不需要注意.但是我们正在向32位移动,任务落到了我身上,以扩展模拟器.
如果可以说编程与艺术有共同之处就是它.
Tanj的核心数学函数设法将80位浮点临时结果保存在5个16位寄存器中,而无需从内存中保存和恢复它们.X86汇编程序员将了解这是一个什么样的成就.注册空间很少,并且将五个寄存器作为你的临时工,同时进行复杂的数学运算是一个值得一看的美丽网站.
如果这只是一个巧妙的编码问题就足以使其成为艺术品,但不仅如此.Tanj仔细挑选了最适合将温度保持在寄存器中的基础数学算法.结果是一个超快速的浮点仿真器,这是我们许多客户的重要卖点.
当386出现时,大多数关心浮点性能的人并没有使用模拟器,但我们必须支持英特尔的386SX,因此模拟器需要进行大修.我重写了指令解码逻辑和异常处理,但核心数学函数完全不受影响.