【问题标题】:Is there a way to transfer/translate the code written in Java to other languages? [closed]有没有办法将用 Java 编写的代码传输/翻译成其他语言? [关闭]
【发布时间】:2009-07-28 20:43:49
【问题描述】:

理论上这对我来说似乎是可能的。如果可能的话,任何人都可以向我确认这一点吗?如果有这样的软件可以做到这一点?(如Java到C++或C#)

一般而言,是否可以将 Java 等语言转换为 PHP 等服务器端编程语言?

【问题讨论】:

标签: java php oop translation transfer


【解决方案1】:

翻译一种语言的句法元素并产生另一种语言并非易事,但也并非不可能。一个好的解析器可以用一种语言构建语法树,然后发出另一种语言。在简单的“Hello World”类型应用程序的上下文之外移植代码的困难是双重的:

  1. 一种语言的库可能会有所不同(例如 WinForms 与 Swing)
  2. 必须满足某些语言特性:(lambda 表达式、匿名方法、不同的继承实现等)。

【讨论】:

    【解决方案2】:

    这是可能的,但主要问题是 Java 有一个非常大的运行时库,需要在目标语言中提供它才能进行全自动转换。

    对于 Java -> .NET 的特殊情况,您可以使用 Microsoft 的 J# 将其编译成可以使用的 .NET 程序集。 ikvm.net 还允许在 .NET 中运行 JVM。

    对于 PHP,我认为不存在这样的解决方案。您可以使用 gcj 创建一个可以链接的本机库,但我不认为这是一个可行的方案。

    您需要 PHP 中的哪些功能?

    【讨论】:

    • 实际上没有什么特别的!只是想知道是否可以将已经用 Java 编写的代码转移到您没有经验的其他语言中。
    • 由于大多数现代语言都是图灵完备的,这是可能的。不幸的是,它很可能需要更多的工作,而不仅仅是首先移植代码。
    • 如果您必须翻译大型系统,构建翻译器(并进行任何手动后期清理)比手动移植代码要容易和可靠得多。 Gartner Group 认为,您每天可以在相似语言之间翻译 ~~140 行代码(您可以声称不这样做,但聪明的人不应该相信您),如果语言差异很大,情况会变得更糟。如果您必须移动一百万行代码,则需要 ~~7100 人日或 32 人年。我们在大约 1-2 人年的时间内建立了翻译人员(使用复杂的工具)。 (见semanticdesigns.com/Products/DMS/DMSToolkit.html
    • @Ira,您的一般 Java -> .NET 解决方案的价格是多少?
    • 我们不进行一般翻译,因为那样您就必须将您在 Java 中可以想到的每个库映射到 MS 可能为 C# 设想的每个库。您可以合理地做的是翻译您拥有的代码,这是一个更有限的问题。您已经注意到涉及工程成本。真的。 32 人年手动翻译一百万行代码的成本是多少?
    【解决方案3】:

    Visual Studio 附带了一个 Java 到 C# 的翻译器,即使它做得相当不错,但之后仍有很多需要清理的地方。

    根据我的经验,您真的必须问问自己将代码从一种语言翻译成另一种语言是否有意义。有什么收获?翻译后的代码是否可维护?如果这些问题的答案指向错误的方向,那么翻译可能不是正确的方法。

    【讨论】:

      【解决方案4】:

      Google Web Toolkit 会从 Java 转换为 JavaScript:

      http://code.google.com/webtoolkit/overview.html

      【讨论】:

      • 有趣 :) 他们会将你用 Swing 做的界面也转移到 HTML 设计中吗?
      • 不行,你必须使用兼容 GWT 的工具包来设计你的接口,例如 GWT 本身或 EXT-GWT 等。
      【解决方案5】:

      回答你的问题,是的,理论上这确实是可能的,实际上每天都在使用这种技术:)

      在我看来,有趣的是 Java 转换器通常通过获取字节码而不是源代码进行转换。然后是字节码到ObjectiveC 的源代码。对于某些转换器(至少一个开源转换器),它是字节码到 XML,然后是 XML 到目标语言。

      例如,使用 Java (JME) 编写并自动从 Java 字节码转换的 iPhone Uniwar 应用程序受到了所有人的好评并进入了 appStore 的前十名。进入前十名,即使是几天,也意味着它部署在很多机器上;)

      在现实世界 [TM] 中,Cobol-Java 以及奇怪的是 Java-Cobol 并非闻所未闻。

      要让这一切工作,你需要一个非常好的转换器:)

      【讨论】:

      • 如果您的目标是获得可维护的代码,我会避开基于字节码的转换器。首先,您将丢失原始源代码中的所有 cmets。
      • 但是“未知(雅虎)”不是更好地减少翻译的数量......因为每次我们这样做都会以某种方式失去一些准确性......“斯蒂芬C “我同意你的说法……你说得很好……特别是我的主要建议是让来自不同语言世界的程序员更容易相互理解……所以懂Java的程序员X先生可以理解其软件背后的逻辑是程序员Y先生使用C++编写的,无需学习该语言...
      【解决方案6】:

      理论上是可以的。但正如其他人指出的那样,主要问题是翻译图书馆。

      前段时间,我制作了 Java 到 Tcl(XOTcl) 和 Java 到 Python 的翻译器来评估翻译的可能性。按 java2tclyava2python 搜索。

      它们转换语法但不进行相关的结构转换(例如,Java 文件操作到 Python 的)。这将需要更多的开发时间。

      总的来说,我认为这样的翻译是可能的。但前提是您的翻译人员涵盖了转换项目的类/库。

      【讨论】:

        猜你喜欢
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-14
        • 1970-01-01
        • 2018-05-28
        • 2018-05-23
        • 1970-01-01
        相关资源
        最近更新 更多