BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Sharpen助NGit实现托管Git命令

| 作者 赵劼 关注 4 他的粉丝 发布于 2010年11月4日. 估计阅读时间: 3 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

Git是目前最为流行的分布式版本控制工具,受到全世界开发人员的广泛欢迎。Lluis Sanchez Gual在开发MonoDevelop的Git集成功能时,使用Sharpen将Java实现的JGit转化为C#实现的NGit。Sharpen是一款由Versant公司开发的Eclipse插件,用于将他们的对象数据库产品db4o由Java移植为C#。

Lluis在博客中写到,在实现MonoDevelop的Git功能时,他本打算直接使用Git命令,并解析输出,它可以满足一些基本需求,但很不可靠,只能作为短期解决方案。后来他将注意力转移到GitSharp上。GitSharp是款完全由托管代码实现的.NET类库,实现了绝大部分的Git命令。GitSharp源自JGit的手动移植,因此难以接受JGit的升级与补丁。同时,它还依赖着一些用于实现ssh协议的加密类库,由于输出策略原因,它们不能包含在MonoDevelop中。

因此Lluis尝试了另一种方式,使用Sharpen将JGit的Java代码转化为C#,经过了几个星期的努力,它已经可以自动地将所有JGit代码生成C#代码了,只需少量的手写补丁,十分易于维护。其中大部分的工作是对Sharpen的改进,并实现一些Java核心类库中无法直接对应Mono类库的部分。Lluis表示,目前很容易在JGit和NGit间保持同步,事实上他已经将这一过程使用makefile自动化了。在单元测试方面,NGit已经通过了90%的单元测试,其他失败的10%主要是由于JUnit和NUnit在行为上有所不同,Lluis将继续尝试解决这些问题。在这个过程中还产生了Nsch项目,这是Jsch的对应产物,用于ssh通信,且只依赖于Mono.Security类库。

因此,NGit已经是一个完整的由托管代码实现的客户端了,它不对Mono外的类库有任何依赖。包括单元测试在内,转换后大约有56000行C#代码,目前已经可以在Github上访问了。Lluis目前的工作,是继续实现MonoDevelop中对Git的支持插件,他表示已经完成了大部分实现,还需一些测试,并解决一些性能问题即可提交至master分支中。他同时也提交了一些JGit的补丁,已被部分接受

Sharpen项目原本是由Versant公司开发,用于将他们的开源对象数据库产品db4o从Java移植到C#。Sharpen支持自定义转化规则,并可以保留.NET的习惯,例如将特定方法转化为属性或是事件。在Sharpen的帮助下,他们已经同时提供db4o在两种平台上的原生实现。

除了Sharpen之外,IKVM.NET也是一个在.NET环境下运行Java程序的项目。与Sharpen的源码转化不同,IKVM.NET的手段主要是将Java字节码转化为.NET IL,并提供了一套JDK核心类库的.NET实现。IKVM.NET支持微软.NET平台及Mono,并可以成功运行包括Eclipse、Jython、JBoss在内的大型Java应用程序。国内社区的老赵也分享了他基于IKVM.NET使用Lucene 2.9.0Google Closure Compiler的经验。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

依赖自动转换的自由软件项目没有前途 by bai zhe

第一、转换工具本身问题比较多,尤其是面对这两种都在迅速更新并且分歧日益明显的语言来说,需要调整的地方会越来越多;
第二、对程序员来说,怪异(甚至丑陋)的代码结构导致没有跟进的激情,对于主要依靠自愿贡献的的开源项目来说,损害尤其大。

Re: 依赖自动转换的自由软件项目没有前途 by Jeffrey Zhao

所以Java转化为C#是可以的,因为C#全面覆盖Java的能力,反过来就不行了……至于结果代码是否丑陋怪异,其实也是Sharpen在解决的问题。当然做到完美很难,做到可以被人接受,我认为问题不大。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT