为什么要用一种语言将代码转换为另一种

时间:2009-07-27 17:30:21

标签: programming-languages code-translation

我听说过一些编译器将代码转换为另一种高级语言 例如Shedskin将python代码转换为优化的C ++ 我想知道为什么会有人试图这样做。为什么不直接用所需的语言编写呢?

我能想到的唯一原因可能是C / C ++等编译语言在性能方面优于解释语言。

欢迎任何更多见解。

11 个答案:

答案 0 :(得分:13)

如果您考虑一下,任何编译器都会转换为另一种语言:机器代码。

如果你使用那个论点,除了汇编之外的任何东西都是毫无意义的。 (实际上汇编也是如此。真人手工输入十六进制操作码。)

如果您想从更高级别的角度进行书写,或者您使用一种语言比另一种语言更舒服,您可以使用一种语言转换为另一种语言。

例如,您是想用一种语言编写和调试几百行网络代码,还是用另一种语言使用5-10行?

答案 1 :(得分:4)

如果要在另一个项目中重用该代码,将代码库的一部分转换为另一种语言通常很方便。

例如,假设你有一个python应用程序,它使用了一些方便的实用程序函数。稍后,您正在编写C ++应用程序,并且需要相同的功能。

你有两个选择 - 使用某种形式的桥接来从C ++调用python代码(有时可能很笨重,尽管有可能),或者用C ++重写例程。翻译工具可以简化第二种选择。

答案 2 :(得分:3)

不仅针对性能问题,而且针对技能组合 - 有时候,在团队的主要语言中使用稍微受损的代码比通过时间限制学习源语言和编辑源代码更快。

答案 3 :(得分:3)

一个好处是它允许您使用动态语言对应用程序进行原型设计,然后使用静态编译语言对其进行优化。这使您可以使用Python等非常宽松的语言专注于算法,然后在对速度和类型安全感兴趣时编译成类似C ++的静态类型语言。

这样的工具的另一个优点是它允许将遗留代码翻译成更现代的语言。我过去曾使用f2c将一些旧的Fortran项目转换为C语言,虽然它并不完美但它解决了许多我不想自己解决的简单重复问题。

答案 4 :(得分:2)

转换代码的另一个有效理由是更新代码。例如,我们有一个用Delphi编写的10年历史的应用程序,在我们即将开始的更新中,C#中将需要很大一部分应用程序。我们只是转换整个应用程序,进行更新,而不是在C#中重新编写代码,而且与重新编写的两年相比,我们在大约6个月内拥有一个全新的应用程序。

答案 5 :(得分:2)

虽然这可能不在您的优先级列表的首位,但我个人会考虑这样做以熟悉一种新语言(无论是在更高级别还是来自源语言)。

阅读“务实的程序员”给出了一个很好的理由。每隔一段时间学习一门新语言可以让你很好地理解我们领域的其他方面。

非常有用!

答案 6 :(得分:0)

高级语言应该更容易编写。甚至C ++编译器也是将一种语言(C ++)转换为另一种语言(目标代码)的工具

答案 7 :(得分:0)

这是因为“解释”语言更高层次。通常这意味着您需要编写的大部分困难或样板代码都会得到处理,这样您就可以更多地关注问题而不是语言或编译器的实际工作。

其他情况如Java或.NET编译为各种字节代码格式,然后由虚拟机解释,或者编译为机器代码的JIT(即时)。这使得编译的字节码更具可移植性,因此无论平台如何,它都可以在虚拟机或JIT编译器存在的任何地方运行。

答案 8 :(得分:0)

将工作代码转换为另一种语言的唯一理由是您的目标平台不支持任何本机语言编译器。如果这不是你的情况,那么这是一个愚蠢的事情。

你必须意识到的是语言的功能并不完全重叠。所以必须进行一些重新编码。那是工作。

你将不得不投入很多的努力,或许相当于从头开始重写的50%-75%的努力。在这一切结束时,你将拥有的东西只有你已经拥有的免费工作的东西。加上你介绍的任何新bug。

答案 9 :(得分:0)

有些语言是出于特定目的而编写的。例如,Erlang专门编写为多线程和防崩溃。 CouchDB的开发人员说他用C ++开始他的项目,但后来切换到Erlang,因为它更适合他的编程模型。

.NET / C#等VM语言是更通用的语言,非常适合那些只想完成工作的程序员。内置安全网有助于防止常见问题。无需担心缓冲区溢出攻击等问题,因为VM通常会处理此类安全问题。

C ++速度很快,但需要更多工作。

答案 10 :(得分:0)

从一种语言转到另一种语言(Python - > C ++)的一个原因是优化问题。通过编译为本机代码,您可以摆脱任何interprittation或JIT的步骤。这可能通常发生在Python;您还可以删除在机器上本地安装Python的依赖。

此外,该程序现在可以使用目标编译器的任何优化功能。我听说在编写一个简单的编译器时这很常见;使用优化编译器从“nice”语言转换为中间语言。

最后,正如其他人所说,使用Python而不是C ++的原因是因为它应该更容易使用;来自Epigrams in Programming,“当程序需要注意无关紧要时,编程语言是低级的。”