【问题标题】:How do you port an open source project? [closed]你如何移植一个开源项目? [关闭]
【发布时间】:2010-02-05 12:48:09
【问题描述】:

我很好奇人们如何将LuceneHibernate 等开源项目从Java 移植到.NET?使用微软发布的Java Language Conversion Assistant 2.0是不是很简单?

【问题讨论】:

  • 不应该在社区 wiki 中吗?

标签: c# java open-source code-conversion


【解决方案1】:

不幸的是,对于这么大的项目,通常需要付出更大的努力。在一种语言中有效的东西在另一种语言中可能没有,更重要的是,在一种语言中存在的东西在另一种语言中可能不存在。例如,NHibernate 花了 来移植,而且他们仍在这样做(尽管一直在添加功能,例如 Linq)。

这通常是一个问题,一个接一个地定位和移植类,在可能的地方进行优化,在需要的地方改变结构。诸如泛型、别名和装箱之类的东西都在端口中发生了变化。然后,在你全部完成之后,通常还有很多优化需要完成(当然这是可选的......),也许是事件,也许是静态和扩展方法,可能是你的新语言/平台提供的任何东西旧的没有。

这样想,为什么要移植到.Net?我敢打赌说您处于两种情况之一,一种是您因为工作而无法使用 .Net(哦,抱歉!),或者您喜欢 .Net,因为它为您提供了一些优势.在第二类中,这意味着您选择了它 Java,因此在移植时,您希望利用最初让您选择 .Net 的任何特性。

【讨论】:

  • @Nick 感谢您的回答。幸运的是,我没有将任何东西从 Java 移植到 .NET(反之亦然),但我一直对它是如何完成的感到好奇。从您的回答中可以明显看出,这是一个需要大量时间投入的漫长过程,从一种语言移植到另一种语言的人应该得到比他们得到的更多的认可。
  • @Kane - 沿着这些思路还有另一个因素,即做这件事的人有多少关心(并且,在一定程度上了解目标框架,你越了解知道你可以做得更好/更快)。有快速而肮脏的无优化端口,然后有充分利用语言/框架的漂亮端口……这些端口需要更多时间,但对社区非常有用。
【解决方案2】:

就像尼克说的,事情没那么简单。涉及的不仅仅是移植代码,特别是如果您要移植的应用程序的体系结构不是那么好。您想使用要移植到的语言的功能,有时它们是您可能会更改的设计决策,因为它们对您来说似乎不合适。我不打算重复尼克所说的内容,但想补充以下内容。

我建议关注 Noda Time 的开发,这是 Jon Skeet 将 Joda Time 从 Java 移植到 .Net 的尝试。 Jon 实际上在以下博客上记录了这段经历:

http://noda-time.blogspot.com/

我建议关注博客、此项目的 google 群组页面和 google 代码项目。谷歌组和代码页链接可以在博客上的一篇文章中找到。

【讨论】:

  • +1 为 John Skeet。你可以把他的话当作福音真理。 :)
  • 可能是最好的例子之一,Jon 比大多数人都更了解框架,您可以看到合适的端口是什么样子,利用目标的功能。 +1 瓦利德
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多