代码之家  ›  专栏  ›  技术社区  ›  sud03r

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

  •  6
  • sud03r  · 技术社区  · 15 年前

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

    我能想到的唯一原因可能是编译语言(如C/C++)比性能良好的解释语言要好。

    欢迎有更多的见解。

    11 回复  |  直到 9 年前
        1
  •  4
  •   Reed Copsey    15 年前

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

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

    您有两种选择——要么使用某种形式的桥接器从C++调用Python代码(有时可能是笨拙的,尽管是可能的),也可以在C++中重写例程。翻译工具可以简化第二个选项。

        2
  •  13
  •   foobarfuzzbizz    15 年前

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

    如果你同意这个论点,除了程序集以外的任何东西都是毫无意义的。(事实上,装配也是如此。真正的人用手输入十六进制操作码。)

    如果你想从更高层次的角度写作,或者你对一种语言比另一种语言更熟悉,你可以使用一种语言来转换另一种语言。

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

        3
  •  3
  •   MetroidFan2002    15 年前

    不仅对于性能问题,对于技能集也是如此——有时候,在团队的主要语言中使用稍微有点混乱的代码比在时间限制下学习和编辑源语言更快。

        4
  •  3
  •   James Thompson    15 年前

    其中一个好处是,它允许您用动态语言构建应用程序的原型,然后用静态编译语言对其进行优化。这使得您可以像Python那样以非常宽松的语言来关注算法,然后当您对速度和类型安全感兴趣时,将其编译成静态类型的语言,如C++。

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

        5
  •  2
  •   Tom A RRUZ    15 年前

    转换代码的另一个有效原因是更新代码。例如,我们有一个用Delphi编写的10年前的应用程序,其中很大一部分将在C中需要,在我们即将开始的更新中。与其用C重新编写代码,我们只需转换整个应用程序,进行更新,而且我们在大约6个月内就有了一个全新的应用程序,而这与重新编写所需的两年相比。

        6
  •  2
  •   CLR    15 年前

    虽然这可能不在您的优先事项列表的首位,但我个人会考虑这样做来熟悉一种新语言(无论它是否在更高的层次上来自源语言)。

    阅读“实用程序设计员”给出了一个很好的理由。每隔一段时间学习一门新语言,你就会很好地了解我们这个领域的其他方面。

    非常有用!

        7
  •  0
  •   Jimmy    15 年前

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

        8
  •  0
  •   Soviut    15 年前

    这是因为“解释”语言的层次更高。一般来说,这意味着你必须编写的许多困难的或样板代码都会得到处理,从而使你能够更多地关注问题,而更少地关注语言或编译器的实际工作。

    其他情况,如Java或.NET编译到它们的各种字节码格式,然后由虚拟机解释,或者JIT(准时)编译成机器代码。这使得编译后的字节码更加可移植,因此它可以在任何虚拟机或JIT编译器存在的地方运行,而不管平台是什么。

        9
  •  0
  •   T.E.D.    15 年前

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

    你要意识到的是语言的功能没有完全重叠。所以需要重新编码。这就是工作。

    你必须投资 许多 可能相当于从头重写的50%到75%。在这一切结束时,你将得到一些只起作用的东西,以及那些你已经免费工作的东西。加上你引入的任何新bug。

        10
  •  0
  •   FlappySocks    15 年前

    有些语言是为特定目的而编写的。例如,Erlang是专门为多线程和抗崩溃而编写的。CouCHDB的开发人员说,他在C++中启动了他的项目,但是后来切换到Erlang,因为它更好地适应了他的编程模型。

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

    C++是快速的,但需要更多的工作。

        11
  •  0
  •   CoderTao    15 年前

    从一种语言到另一种语言(Python & Gt;C++)的一个原因是一个优化问题。通过编译到本机代码,您可以摆脱任何插入或jit'ing步骤。这通常会发生在Python中;您还将消除对在计算机上本地安装Python的任何依赖。

    此外,该程序现在可以利用目标编译器的任何优化功能。我听说这在编写一个简单的编译器时相当常见;从“不错”的语言到具有优化编译器的中间语言。

    最后,正如其他人所说的,在C++上使用Python的原因是因为它应该更容易工作。 Epigrams in Programming “当一种编程语言的程序需要注意不相关的内容时,它是低级的。”

    推荐文章