手动将代码从一种语言翻译成另一种语言

时间:2012-03-29 16:00:56

标签: c matlab programming-languages fortran

我经常在MATLAB / Python中编写代码来测试我的算法是否可行(并且实际上是可行的)。然后我需要将整个代码转换为C,有时在FORTRAN90中。

将中等大小的代码从一种语言手动转换为另一种语言的好方法是什么?

我试过了:

  • 将整个代码从一个代码转换为另一个代码,然后对其进行测试。 (有时会出现错误和错误,这些错误和错误不会消失,并且发现错误的来源会成为问题)

  • 逐行进行,每隔几行检查输出的一致性。 (太耗时)

  • 使用f2c之类的转换器。 (根据我的经验,它们非常糟糕。我链接到许多库,它们具有不同的函数调用C和Fortran)

此外,:

  • 我非常熟悉我所处理的编程语言,因此我不需要手册或参考指南(即我知道语法)。

  • 我不是专门针对MATLAB和C提出这个问题,而是作为翻译范例。

  • 关于尺寸,代码长度小于100行。

  • 我不想将一种语言的代码调用到另一种语言。请不要建议。

3 个答案:

答案 0 :(得分:7)

不同的语言需要不同的范例。您肯定不会以相同的方式编写和设计代码。 Matlab,Python,C#或C ++。甚至对象层次结构也会根据语言的不同而发生很大变化。

也就是说,如果您的代码包含一些相互关联的过程,那么您可以通过直接逐行转换(每种语言允许您编写两个或三个互连的函数,同时保持惯用)。但只有最简单的程序就是这种情况。

使用高级语言进行原型设计,然后以“生产”语言以健壮和干净的方式实现相同的想法是一种非常好的做法,但涉及两个非常不同的事情:

  1. 您想要的任何语言的原型。测试,试验并说服自己这个想法是有效的。注重大局,不要注重表现,而要注重高层次的想法。还要注意您在实施时遇到的困难,因为您将在第2步中再次面对它们。
  2. 从头开始实施X语言的生产环境中的想法。它比你没有进行原型设计阶段更快,因为在第1阶段已经遇到了大部分困难。使用惯用X,并专注于正确性。注意角落情况,一般的健壮性,一旦它正常工作,性能。您会注意到大约一半的代码是由1中没有出现的新内容组成的(例如错误检查,角落处理,输入/输出,单元测试等)。
  3. 你可以看到逐行翻译显然是一个好主意,因为你没有翻译成同一个程序。

    另外,当不进行原型制作时,我发现自己丢掉了第一个版本并制作了另一个我更喜欢的版本,即。我发现自己是原型!两次实现同样的事情不是时间的浪费,而是正常的开发流程。

答案 1 :(得分:2)

您可能需要考虑使用具有多个后端的更高级域特定语言(例如,Matlab,C,Fortran),为每种目标语言生成干净且惯用的代码,可能需要进行一些优化。如果您的问题域很窄并且每一段代码都或多或少是典型的,那么设计和实现这样的DSL应该是相当简单的。

答案 2 :(得分:1)

使用输入/进程/输出将源分解为伪代码,然后编写新的代码库以符合该规范。