谷歌抛弃java_Google的Java项目新合同

谷歌抛弃java

Google最近启动了一个新的开源项目 ,该项目旨在使用户能够使用前提条件,后置条件和不变式的合同对代码进行注释。 在这次采访中,JAXenter向Java团队成员和YouTube软件工程师David Morgan谈了关于新工具的合同,以及该合同可以为Java开发人员增加什么价值。

JAXenter:您能否向我们介绍“ Java合同”项目?

David Morgan:自从手工制作机器代码以来,软件工程已经走了很长一段路。 但是大型项目仍然遭受大量无法预测的错误和延迟,并且还有很长的路要走。

开发人员社区正在慢慢组合一个不断增加的工具包来应对复杂性:敏捷方法,测试驱动的开发,新的和更强大的语言,代码分析和重构工具。

契约代码是一种已经存在一段时间但在Java世界中从未流行的方法和语言功能。 我认为合同可能是Java程序员工具包的有用补充,因此开始研究如何在Google上使用它们。

显然,我首先看了可用的工具,但没有找到与我个人想要的东西匹配的东西。 最接近的是约翰尼斯·里肯(Johannes Rieken)创作的《摩登爵士》(Modern Jass),所以我开始以此为基础。 Nhat Minh Le是实际执行的大多数工具,他在2010年夏天在Google实习,并得到了Andreas Leitner的建议和指导。 几周前我们开源了生成的工具。 迄今为止,人们的React是积极的,但实际影响尚待观察。

JAXenter:使用合同注释Java代码有什么好处,请为
开发人员?

大卫:有很多查看合同的方法。 我喜欢将合同视为使代码有点自我意识的工具。

程序代码非常像盲目遵循的指令列表,每个人都知道盲目遵循这些指令可能会导致问题,有时甚至是严重的问题。 合同代码不再盲目遵循:在每个步骤中,它“知道”关于应该开始和结束的状态的信息。

这更像是人类遵循指示的方式,其优点很明显:只要没有意义,流程就会停止,您可以找出问题所在。

有趣的是,程序员通常会在编写代码时考虑这些检查,因为他们会想象逐步遍历代码以及每个阶段应该发生什么。 这是非常重要的知识,但通常会被丢弃和遗忘。 有了合同,它可以被写下并使用。

最擅长的计算机是盲目地按照指令进行操作,因此,在实际使用程序时,将关闭合同,以使程序尽快运行。

JAXenter:如何使用合同将接口文档转换为代码?

David:接口文档说明了一段代码的作用:需要提供什么作为输入,产生什么副作用以及产生什么样的结果。

通常,这用Javadoc表示,例如:

/ **
* @param列出任何整数列表
* @返回包含相同值的新列表,已排序
* /

诸如“新列表”和“已排序”之类的概念可以用代码表示,而任何可以用代码表示的内容都可以在合同中使用:

@Requires({
“列表!=空”
})
@确保({
“结果!=列表”,
“ Collections.isSorted(结果)”
})

此处,“排序”概念由另一个称为Collections的类提供。

现在,界面说了同样的话,但是可以在运行时检查它。 如果启用了运行时检查时状态未达到预期,则程序将停止并且开发人员可以找出问题所在。

有关Java合同中使用的技术的更多信息,请查看Nhat MinhLê的技术报告 。


翻译自: https://jaxenter.com/googles-new-contracts-for-java-project-102964.html

谷歌抛弃java

你可能感兴趣的:(谷歌抛弃java_Google的Java项目新合同)