首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一个等同于Google Closure对javascript,Java的优化?

有没有一个等同于Google Closure对javascript,Java的优化?
EN

Stack Overflow用户
提问于 2011-07-31 10:31:19
回答 3查看 314关注 0票数 3

我们在下面的博客中看到:http://blog.fogus.me/2011/07/21/compiling-clojure-to-javascript-pt1/一些令人难以置信的语法转换,对javascript编程语言所做的简化,由谷歌闭包编译器完成。

我的问题是-有什么东西可以为Java提供这种语法转换吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-31 10:49:59

作为一般规则,Java编译器可以/执行一些通常有用的优化来生成JVM代码。然后,JVM中的JIT编译器在生成本机代码时进行更多的优化。因为这两个都是自动的并且对您来说是不可见的,所以您不会注意到,但您不需要显式地执行它们。

Java编译器和JIT编译器不知道如何在您的程序上下文中进行转换。对于这些,理想情况下您需要某种源代码到源代码的program transformation系统,它可以读取源代码,将其解析为某种工具内部结构(通常是AST),应用您在该内部结构上定义的“令人难以置信的语法转换”,然后用您的语言重新生成源代码。

我们的DMS Software Reengineering Toolkit (商业版)就是这样一个引擎;它可以处理多种语言。DMS有一个Java 1.6 front end,它构建完整的符号表,并提供控制和数据流分析,这是实现更复杂的转换所必需的。

免费的(大学研究)替代方案是StrategoTXL,它们都有某种(我不知道)成熟度的Java解析器,但绝对不提供符号表或任何类型的流分析,这意味着您必须自己构建这些解析器或糟糕的近似解析器。有些人可能会建议ANTLR,它也有Java前端,可能构建AST,很可能不构建符号表,也不提供典型转换系统所做的其余机制(源到源的转换,源文本的重新生成等)。

如果您对Java编译器所做的事情感到满意,那么您就不需要这些了。如果它做的还不够,那么你想要这样的东西。您问了这个问题,这表明您对Java编译器不能完成的事情有了一些想法。介意详细解释一下吗?

票数 3
EN

Stack Overflow用户

发布于 2011-07-31 10:39:00

闭包编译器的工作方式是因为JavaScript与Java不同,它通常是以源代码形式分发的。因此,重命名变量和消除空格等操作不适用于Java,因为Java应用程序通常是以字节码(通常打包在JAR文件中)的形式分发的。

至于其余的优化,Java编译器和Hotspot JVM本身结合了许多非常擅长优化应用程序和提高性能的技术:其中许多技术在您不知道它们存在的情况下就发生了。

票数 5
EN

Stack Overflow用户

发布于 2011-07-31 12:20:04

我的问题是-有什么东西可以为

提供这种语法转换吗?

国际海事组织,不完全是。

  • 谷歌闭包编译器将Javascript作为输入,并执行(相对丰富的) Javascript AST的高级转换。
  • Java字节码编译器可以做,但显然在Java AST级别的优化方面做得并不多。相反,它们将大部分优化工作留给了JIT编译器……它从(语义相对较差的)类文件开始进行优化;即字节码。

这使得JIT编译器更难做Google Closure编译器可以做的那种优化。

那么为什么没有一个等同于Google Closure for Java的工具呢?有两个可能的原因:

  • ,因为没有人这样做过。(我想不起任何具体的例子...)由于普通的手写input.
  • Technical原因,
  • 不存在优化的机会(见下文)。

我想这主要是第二个原因。Javascript和典型Javascript程序的动态特性意味着有更多的机会通过AST转换进行优化,并且AST级别的优化器将为正常代码实现更显著的加速。

现在,Clojure编译器生成的Java源代码很可能会提供更多的AST级优化机会。回顾一下以前对Java进行AST级优化的尝试(假设它们存在)可能是一个好主意。

我上面提到的“技术原因”包括:

  • Java中某些反射和自省工具的存在实际上是优化的障碍。例如,Java编译器不能进行尾部调用优化的原因是它破坏了不能查看调用堆栈的Java代码。一个例子是安全管理器。
  • Java字节码编译器主要在单个编译单元的级别上操作;即单个类/接口/等等。Google Closure编译器执行的那种高级优化涉及包含许多类的输入文件。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6887180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档