将库从Java移植到Python

时间:2009-01-15 19:23:22

标签: java python

我准备将一个小型库从Java移植到Python并想要一些建议(小〜几千行代码)。我已经研究了一些Java代码,并注意到了两种语言中常见的一些设计模式。然而,肯定存在一些仅限Java的习语(单身等),这些习惯在Python世界中通常不被广泛接受。

我知道至少存在一个工具(j2py),它会通过遍历AST将.java文件转换为.py文件。一些初步实验产生了不太有利的结果。

我是否应该考虑使用自动化工具生成一些代码,或者语言是否足够,以至于任何工具都可以创建足够的重新工作来从头开始编写文章?

如果工具不是魔鬼,除了j2py之外还有其他任何可以至少处理同一项目导入管理的工具吗?我不希望任何工具将第三方库从一种语言与另一种语言的替代品相匹配。

7 个答案:

答案 0 :(得分:9)

如果是我,我会考虑手工完成这项工作。几千行代码并不是很多代码,并且通过自己重写代码(而不是自动翻译代码),您将能够决定如何恰当地利用Python惯用语。 (FWIW,我几乎专门从事Java工作9年,现在我正在使用Python,所以我知道你必须要做的翻译。)

答案 1 :(得分:6)

无论如何,第二次写代码时代码总是更好.... 再加上几千行Java可能会被翻译成几百个Python。

答案 2 :(得分:5)

看看Jython。它可以在Java之上相当无缝地集成Python,并提供对Java库的访问,但仍然允许您动态地对它们进行操作。

答案 3 :(得分:3)

自动翻译器(f2c,j2py等)通常会发出您不想手动触摸的代码。当你需要做的就是使用输出时(例如,如果你有一个C编译器而没有Fortran编译器,f2c允许你编译Fortran程序),这很好,但是当你需要对代码做任何事情后很糟糕。如果您打算将其用作黑盒子以外的其他任何东西,请手动翻译。在这个规模,它不会太难。

答案 4 :(得分:3)

我会手工再写一遍。我不知道有哪些自动化工具可以生成非恶心的Python,并且自己将Java代码移植到Python,我发现结果质量比原始版本高,而且要短得多。

你获得了高质量,因为Python更具表现力(例如,匿名内部类MouseAdapters之类的东西偏离了简单的第一类函数),你也可以获得第二次编写它的好处。

它也相当短:例如,99%的getter / setter可以被排除在外,直接访问这些字段。对于实际执行某项操作的其他1%,您可以使用property()

然而正如大卫所说,如果你不需要阅读或维护代码,自动翻译就可以了。

答案 5 :(得分:2)

Jython不是你在最终解决方案中寻找的东西,但它使移植变得更加顺畅。

我的方法是:

  1. 如果有现有测试(单元或其他),请在Jython中重写它们(使用Python的unittest)
  2. 在Jython中编写一些特征测试(记录当前行为的测试)
  3. 开始按班级移植:
    • 对于每个类,在Jython中对其进行子类化并逐个移植方法,使得该方法成为超类摘要
    • 每次更改后,运行测试
  4. 您现在可以使用Jython代码,希望对Java具有最小的依赖性。
  5. 在CPython中运行测试并修复剩下的内容。
  6. 重构 - 你会想要Python化代码,可能会用Python习语简化它。由于测试,这是安全和容易的。
  7. 我过去一直都很成功。

答案 6 :(得分:0)

我使用过Java2Python。这还不错,你仍然需要理解代码,因为它没有正确地完成所有事情,但它确实有帮助。