诊断Java代码: 在尺度钢丝上行走[Java编程]
本文“诊断Java代码: 在尺度钢丝上行走[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
要构建坚固的软件,程序标准很关键.没有杰出定义的标准,很难诊断软件系统的非常行为.但是很多软件系统的程序标准定义得很差劲.并且更糟的,是很多软件系统根本就没有标准.
直观的看,程序标准是对程序行为的一种描写.它可以采纳很多情势,但无论采纳何种情势,都有一条主线贯串全部实例:必须有某种范例的系统标准,因为您得依靠它来判断系统能否运转正常.
标准可以情势化也可以疏松地定义,这取决于开辟中系统的安定性和危险程度,还与开辟完毕后改正系统的简单程度有关.
我们将通过谈论标准为什么重要、为什么会常常被忽视以及若何改进这种情形来开始我们的这次“路程”.
均衡精度的本钱和收益
在微处理器计划世界中,系统布置在各种规模的利用上,从个人计算机到担负重担的医疗和军事系统.在这个范畴中有一个广泛的、牢不可破的法则:在布置之后改正芯片计划的本钱是极端高贵的.
因此,普通会将微处理器的标准情势化,这也就层出不穷了.一个正式的标准有宏大的好处,因为可以自动地注释和解析它.就微处理器而言,计划的很多方面可以自动地被考证无误.
软件类比:编程语言
在软件世界中,在布置和危险程度方面,近来似于微处理器的事物是编程语言.一种遍及的编程语言被用来编写无数的程序,它们被用于各种危险程度级别差别的系统中.
和芯片一样,在投入利用之后改正语言计划的本钱是相当高贵的,因为全部现有的程序都必须改正和重新编译.因此,与别的软件系统相比,编程语言的标准普通是相当正式的.
关于语法,这种情势化特别重要.事实上,全部现代编程语言都拥有正式定义的语法.大大都解析器是通过利用自动的解析器生成器构造的,生成器读入这些文法并产生完好的解析器作为输出.
不幸的是,语言语义并不偏向于作这样严峻的规定.这并非因为不能做到这样严峻.
象 ML 这样语言拥有情势化的语义,并因此证明了很多关于它们的法例,用于考证其精确性的某些方面(比方,它们的范例系统的完善).但是象 ML 这样的语言是特例.我们可以肯定造成这种情形的两个缘由.
首先,因为证明关于编程语言标准的特点实际上比硬件计划更难以驾御,所以不太需求正式的标准.相反,很多语言是用论述性文字规定的.这些文字标准关于大大都实际利用语言的人(比方编译器作者)来说已经充足了.实际上,编译器作者普通沉迷于不太正式的标准,因为它给了他们更多优化程序的空间.别的,有些时刻语言的利用者是程序员,他们中的大大都很赏识非正式标准,因为这样他们可以轻松地理解标准.
第二个来由是,很多语言是由单独的开辟人员作为“业余爱好”开辟的,而他们常常并不专擅长编程语言范畴.遗憾的是,这些开辟人员常常并不理解为规定编程语言语义而开辟的情势体系.
模棱两可的本钱的示例
但是,语言标准中的模棱两可或不一致造成的本钱大概是相当高贵的,会招致可移植性、坚固性的降低,乃至会造成安全性漏洞.通过研究一些当前遍及利用的语言,可以发现它们的标准中相对的切确程度是若何影响它们的.
C++ 语言的标准有很多模棱两可的地方,乃至在语法级别也有.此外,标准的很多部份是变成依靠于实现的.后果是:C++ 程序普通很难在多种平台上按预期的那样运行.
Python 语言标准遗留了很多依靠于实现或未定义的细节.后果,诸如 Jython 和 CPython 之类的实现,在供应与另一方相同的行为这个方面,面对着宏大难题.假如不是因为 Python 语言相对对比简单(并非贬义),这一问题还会更糟.
固然 Java 语言没有正式的标准(近似于 ML 那样的),但是在切确的非正式标准的开辟上投入了很多勤奋.该语言普通编译成由 JVM 注释的字节码,而 JVM 本身具有杰出的标准(固然通过正式解析在该标准中发现了一些模棱两可的地方).此外,Java API 都作为 JVM 的一部份规定.这使得 Java 代码具有空前途度的可移植性.
我们从中可以得出结论,一份尽大概切确的语言标准会非常有效.但即便在编程语言世界中,标准中的问题也是最高贵的,切确的标准很少,部份缘由在于预先制作一份切确标准很高贵.
很多公司发现本钱更低的做法是先拜托产品,今后(大概极大概永久也不会)再充分标准细节.当然,关于生命周期较短以及布置范围较窄的利用程序,预先定义切确标精确切是太高贵了.有时大概竞争对手早已拜托了系统,而开辟团队还未正式肯定其系统的标准.
此外,大型标准很少在用户需求更改时更新,并且因此被忽视了.但是假如预先定义标准太高贵,开辟团队应当采纳什么办法来规定他们的软件呢?
在答复这个问题之前,让我们考虑一下一个常用的,但也确切是最糟糕的办法吧.
以上是“诊断Java代码: 在尺度钢丝上行走[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |