“向上兼容性”的思考

几年前,刚进入OriginLab公司。当时参与了Import File相关工作。我们这部分几乎所有的功能都是基于OriginC语言(下面简称OC)开发的。不单是是公司内部,连Origin的客户,都使用OC开发界面和附加功能。

有一天,我们收到一个客户的抱怨,说他在Origin 7.5写的关于Import File的OC代码,不能在Origin 8.0下运行通过。于是我们的Leader Justin找到我,要求我解决客户的问题。我仔细的分析了客户的OC代码,发现他使用了几个我们不曾公开的内部库函数(至于他为什么能获取关于此类函数信息,不得而知)。而在8.0里,我们已经抛弃了这些函数,因为他们已经被新的函数所替代。为了解决用户的问题,我们不得不将这些无用的函数放回库中,并保持其函数名称和参数列表与原来一致。 

虽然最终这个问题得到了解决,但就其解决方法,我和Justin争论了一番。他认为无论如何都不应该修改客户的代码,8.0理应维护所有7.5上来出现的兼容性问题,这个明显的“向下兼容性”原则。我认为,应该要求用户修改OC代码,任何不标准的库函数调用,都不能得到新版本很好的支持,因为OC很难处理“向上兼容性”。这个争论短暂的持续一会,就停止了。我们互相都不能说服对方,这件事情不欢而散。

最近些日子,同样的问题再次出现。Origin 8.0 SR5版本发布。一个客户抱怨,他在SR4下写的Impor File相关OC代码,不能正确运行在SR5版本中。这次事情比较严重,因为SR4是一个正式版,我们没有任何理由要求修改他的OC代码,我们必须在将来的SR6中,加入对他的代码的支持,并且这个问题在SR5中已经很难修补了。这次问题的原因是同样的,他使用了“内部”库函数,而我们在SR5已经修改了它们。从软件测试的角度看,这个问题是很难捕捉的。因为我们无法获取所有用户可能写出的自己的代码,并详细测试。最关键的一点,我们无法假设用户调用了某个“内部”库函数。 

如果用户是上帝,那我就是掉入了地狱。 

这类事情,发生在许许多多的软件平台中。Raymond Chen在其著作《Windows编程启示录》中,叙述了为什么Windows一些内部函数名称是非常古怪的。其目的是讽刺那些“聪明”的程序员逆向了Windows内部代码并对其某些功能进行调用。Microsoft为此不得不花费若干时间和精力,去维护由于Windows平台升级所带来的应用程序兼容性问题。Raymond Chen强调,每当客户升级新的Windows平台,并发现某些应用程序崩溃时,总是第一时间指责Microsoft,而不是应用程序作者本人。 

 

我一直试图向人解释“向上兼容性”,但有时连我自己都会陷入迷茫。 

直到有一天看到这样一篇文章。

http://www.devtopics.com/101-great-computer-programming-quotes/ 

101 Great Computer Programming Quotes

14. “I’ve finally learned what ‘upward compatible’ means.  It means we get to keep all our old mistakes.”(Dennie van Tassel)

101条伟大的计算机编程名言

14. 我终于明白“向上兼容性”是怎么回事了。这是指我们得保留所有原有错误。(Dennie van Tassel)

这个Dennie van Tassel貌似是个语言大师,其相关资料有。

ttp://www.gavilan.edu/csis/languages/history.html

http://hhh.gavilan.edu/dvantassel/

http://portal.acm.org/author_page.cfm?id=81100587143&coll=GUIDE&dl=GUIDE&trk=0&CFID=36193259&CFTOKEN=99120681 

 

其实,“向上兼容性”和“向下兼容性”都是指同一个概念:较低级的东西能被较高级的东西接受。只不过,一个是针对较低级的版本而言,一个是针对较高级的版本而言。

但是,在许多实际开发过程中,这两个词语,表达了两种不同的态度:一个是“未雨绸缪”,一个是“亡羊补牢”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值