您的位置:网站首页 > Java工具 > 正文

Codice为他们的代码型合并工具增加了对Java语言的支持2015年3月14日星期六Java工具

类别:Java工具 日期:2015-3-14 14:03:39 人气: 来源:
重庆中考论坛zslpsh,重庆学校zslpsh,重庆学校zslpsh,重庆市中学生网,重庆中学生网,重庆中学生网站,重庆中学生网好,重庆中学生学习网,重庆中学学习网,重庆中学生网家教,重庆中学生论坛,重庆学生zslpsh,重庆高考论坛zslpsh,重庆中学排名zslpsh,重庆中学zslpsh,重庆中学生,重庆学生网中考,重庆中考zslpsh,重庆中学生交友,重庆初中生,重庆中学生学习网,重庆土话网,西南云南方言网,最新电影淘娱淘乐,tianyanmao.cn,重庆18680好,岳阳yy房产网,重庆18680,云南西南方言网,网店taoyutaole,电影淘娱淘乐,最新电影淘娱淘乐,电影淘娱淘乐,娱乐资讯taoyutaole,影视淘娱淘乐,taoyutaole笑话,taoyutaole淘娱淘乐,娱乐taoyutaole,时尚taoyutaole,重庆生活新闻,贵州西南方言网,027旅游新闻网,重庆特产18680,0871昆明旅游人才网,重庆生活18680好,观赏虾之家zadull,022天津交友,022天津交友网,水草造景zadull,18680重庆特产,0755深圳交友网,0755深圳旅游招聘,0755深圳旅游招聘网,0755深圳旅游新闻

  Codice软件,也就是Plastic SCM的制作者,已经为他们的代码型三方代码合并【译注1】工具SemanticMerge的Beta测试版本增加了对Java语言的支持,该工具由InfoQ在进行过报道。

  该工具既可用于代码合并,也可用于代码比较。该工具在结构层面上处理代码合并,而不是以“解析代码,创建中间结果树,然后将这些中间结果树作为代码比较的基础”的方式在文本块层面进行代码合并。这种方法最显著的优点是代码比较过程不会被类文件的结构性变化所困扰例如改变方法的顺序。此外该工具还达到了“代码”的程度,因此,打个比方如果一个开发人员在第一行增加了一个对java.sql.ResultSet的import语句(或是一个中的using语句),而另一个开发人员在第10行增加了同样的import语句,SemanticMerge会知道它们是相同的import语句,所以在合并时对该行只会增加一次。

  有一些产品为其它开发语言提供同样的代码合并能力(Altova的DiffDog对XML执行类似的工作,还有Java开发的DaisyDiff库可以下至代码层面比较HTML文档),但是Codice软件的首席软件工程师Pablo Santos Luaces告诉我们:“我们没有真正找到任何一个完美的产品能够像SemanticMerge所做的那样去处理源代码,确实曾有一些工具试图达到同样的目标,但在我看来,他们要么尚未完成,要么就是试图去处理过于复杂的情况”。

  与Plastic SCM所预期支持的一样,该工具同样可被配置为与Git、Subversion、Perforce、ClearCase、Team Foundation Server、Mercurial和IntelliJ协同工作。

  目前SemanticMerge只有Windows版本,并且依赖于.NET Framework 4.0。Codice确实已经有计划将该工具移植到OS X和Linux平台上,在该计划中,在MacOS X平台上将使用Xamarin Studio,而在Linux平台上将使用Gtk#。这两种用户界面都将是原生的,但都会运行在C#/Mono虚拟机上。

  InfoQ采访了Pablo Santos Luaces以寻求更多信息。

  InfoQ:在支持C#和VB.NET之后,你们很快地增加了对Java语言的支持。那对于其它那些你们计划支持的语言(C,C++,Objective-C,JavaScript)而言,有没有可能也会如此迅速地推出呢?或者说这些语言做起来会更难?

  我们对Java语言支持的开发几乎是和对C#及VB.NET语言支持的开发同步展开的,这就是为什么我们只用了一个月时间就可以发布它了。如今我们将专注于C和C++。对这两种语言支持的开发工作都已开始,但是我们预计C++会更难一些。我们正在使用libclang解析代码,该工具极大地简化了工作,但是我们将会需要改动合并引擎的某些部分去处理一些C++独有的特性,因为这些特性在我们目前支持的语言中并不存在。我们同样也希望尽快把重点放在JS上,因为这是需求中的一项。

  代码比较和代码合并算法都是我们在SemanticMerge开发工作中的核心。它们都是基于“代码结构”进行处理的,而不是像Xdiff或是Xmerge等算法那样是基于文本块的。因此,该工具首先会解析代码,然后计算出基础版本和某一个贡献者版本之间的“语义差异”,接下来再计算出基础版本和另一个贡献者版本之间的“语义差异”。这两个语义差异的集合都将被用于代码合并的运算。

  差异比较算法真正有趣的部分是它能够被移动了的方法。因此,假设一个方法改变了,也依然能够将它作为一个差异进行(这将是合并运算的基础)。“解析”停留在方法体层面,以便将方法的方法体部分作为纯文本进行处理。为了在即使方法已被修改的情况下也能够检查是否“方法仍然相同”,我们以经过大量修改的Levenshtein 距离算法【译注2】为基础,运行我们曾使用过的Xdiff算法来进行判断。如果方法体是“足够相似”的并且其余的方法元素是匹配的(比如方法参数等等),那么它就是一个相同的方法。

  代码合并将使用两个差异集合来进行合并运算。如果一个方法在两个集合中都被修改了,那么你就面临代码冲突问题。而且这也适用于移动/移动(产生歧义的移动也会是代码冲突,例如他们被转移到不同的类文件),更改/删除,移动/删除及很多其他情况。

  对于C#的支持而言,我们预期可以很快离开Beta测试阶段。Java语言的支持才刚刚启动,因此将仍需在Beta测试阶段继续等待。我们会尽力在七月前将C#的版本准备好以供开始商业应用。话虽如此,我们在许多领域还有工作要做。

  首先,我们需要提高工具的启动时间。目前这个工具需要几秒钟的启动时间,当你需要合并几百个文件时,这将会是一个问题,而在真实的生产情景中你难免会遇到这种情况。我们已经使用它好几个月了,这几个月用下来我们发现这个问题必须得到解决。

  我们还需要添加一个“自动解决模式”,因为目前我们要求用户复查所有的代码合并,就算在SemanticMerge已经完全自动化地进行了代码合并的情况下也是如此。我们是故意这么做的,因为目前仍处于Beta测试阶段,但是我们的确需要尽快添加--auto选项。

  我们刚刚在这个版本中增加了一个更好的文本编辑器,这是用户提出的众多需求之一。

  而且你也知道,我们必须保持专注因为我们期望能够完成Mac版本,并尽快开始Linux版本的工作...还有堆积成山的事情要做。

  该工具的价格尚未设定,但是Pablo告诉我们,他希望通过每月3美元左右的包月套餐,或者60每月左右的无限使用计划来保持该工具是低价的。您可以在这里免费下载Beta测试版。

  感谢赵震一对本文的审校。

  给InfoQ中文站或者参与内容翻译工作,请邮件至。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

关键词:Java工具
0
0
0
0
0
0
0
0

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

郑重声明:本站资源来源网络 如果侵犯了你的利益请联系站长删除

CopyRight 2010-2012 技术支持 FXT All Rights Reserved