如何从一种语言翻译成另一种语言?

时间:2010-12-26 14:07:41

标签: language-agnostic

我不想要自动化解决方案。 当你必须将程序从一种语言翻译成另一种语言时,你会怎么做?您希望从头开始重写它,还是复制并粘贴它,只更改需要更改的内容? 什么是最好的选择?

4 个答案:

答案 0 :(得分:3)

取决于

  • 目标(快速破解一次性使用?长期生产的工作项目?)

  • 我拥有的资源(多少工时?旧代码的测试套装和/或功能规格?熟悉这两种语言?)

  • 最重要的是,语言之间存在差异。概念(OO?功能?反射?控制结构?)以及可用的库。

    请注意,这个子弹并不像看起来那么简单 - 这取决于部分关于原始程序的惯用程度 - 例如,有些人写的非常“C-like”Perl代码(例如使用C控制流和非常类似于OO设计的C ++)可以简单地复制到C或C ++,有些人使用函数式编程,闭包和反射功能编写令人难以置信的错综复杂的惯用Perl;这不能明显地翻译成C / C ++。

  • 此外,原始代码的质量。例如。好的程序将具有分离的业务逻辑,通常以标准配置和控制流程表示,更容易直接克隆。

E.g。从PHP转换为Perl以进行黑客攻击,通常可以从复制开始,因为许多PHP构造可以一对一映射到等效的Perl构造上(只需选择Perl模板化Web库)。结果代码不会是好的Perl,但出于某些目的,它将足够好。

另一方面,将LISP代码翻译成Java,最好只是将原始代码翻译成功能规范并从头开始重写。您的Python和JavaScript示例可能在同一个框中。

通常你有两种语言至少共享一些概念(例如,两者都有OO和一些命令式控制结构),因此你最终得到了两种方法的某种组合 - 部分代码可以“无意义地”翻译,零件需要从头开始重新编写。

第二种(完全重写)方法越多,您最终获得的质量更好的惯用语和强大的代码。

答案 1 :(得分:1)

通常情况下,使用原稿进行重写以获得灵感和方向是最佳选择。

你用一种语言做某事的方式很可能不是在另一种语言中做到这一点的正确方法。

在复制粘贴方面,您很少能够这样做 - 语言不同并遵循不同的语法规则。

当然,这完全取决于源语言和目标语言。

使用你的评论--javascript和python,我会说重写是最好的选择。

答案 2 :(得分:1)

这可能主要取决于两种语言之间的相似性和“翻译”的含义。

例如,将C89代码转换为C ++可能并不那么困难,因为在复制粘贴时它应该是开箱即用的(C ++是与C89兼容的超集)。不过,我几乎不认为这是“翻译”。

另一方面,将Java转换为Haskell肯定需要完全重写,因为语言范式甚至比语法更糟糕,完全不同。

答案 3 :(得分:0)

考虑Wikipedia's list of programming languages。我太懒了,无法计算这个列表中有多少人,但我们假设有100个。

如果您想将其中一个翻译成另一个,这意味着至少有100 * 99 = 9900种可能的翻译组合。

这太可怕了。由于大多数语言都是独一无二的,因此翻译非常非常依赖于源语言和目标语言。

考虑this Pascal to C converter。作者说他花了一年半的时间为这些特定的语言做一名优秀的翻译。显然,这不是一项微不足道的任务。

根据您的抱负,您可能需要花费一天或多年的时间将程序从语言A翻译成语言B.

这需要多长时间取决于您的技能,源代码的大小,语言A和B的复杂程度以及它们的相似性。

正如您所看到的,这不是一项微不足道的任务,而且高度依赖于您的情况。