首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java编译与Perl编译

Java编译与Perl编译
EN

Stack Overflow用户
提问于 2014-01-18 10:38:26
回答 2查看 281关注 0票数 0

Java和Perl的编译过程有什么不同?两者都生成一个字节码,但在此之后会发生什么呢?perl中的解释和java中从对象代码到机器代码的转换是唯一不同的吗?如果是的话,为什么Java不能成为一种脚本语言呢?

EN

回答 2

Stack Overflow用户

发布于 2014-01-18 10:42:44

这个问题没有明确的答案,但无论如何我都会尝试的。

Java可以更积极地编译代码,因为它不像Perl那样动态。Java不适合作为脚本语言的原因是

  • 你必须编写相当多的代码才能做一些简单的事情。例如,“你好世界”是5行。
  • 与Perl相比,文件和字符串操作相对复杂。
  • 很难从Java运行另一个程序。
  • 您可以使用BeanShell或Groovy来编写Java脚本,但是您不会使用,因为有一长串的语言是更好的选择。一开始就痛痛快快。
票数 4
EN

Stack Overflow用户

发布于 2014-01-18 11:10:57

Java和Perl本身并不是编译或解释的语言,但它们都只有一个主要实现。

Java

Java源代码是提前编译成便携字节码的.在此步骤中应用了一些优化。然后,JVM通过解释或JIT编译,在JVM的选择下执行此字节代码。在这种语言中,没有任何东西能阻止在一个步骤中编译+执行。

Perl

在perl解释器中,VM和编译器紧密集成。即使在解析源代码期间,也可能已经执行了某些部分。每个可执行单元产生一个“Opcode Tree”,它兼具AST和字节码的角色。这种增量编译意味着不可能真正将编译与执行分开,尽管有时可以缓存已编译的结果或操作树的JIT部分。然后对操作码进行解释。

比较

Perl的编译速度比Java快得多,但应用的优化很少,例如常量折叠或删除不必要的操作码。更复杂的优化对于脚本的使用来说太昂贵了。缺乏JIT支持和高级优化也意味着Perl通常比Java慢得多。

原则上,VM (JVM和perl)也可以用于其他语言。缺乏正式的规范和非常以perl为中心的实现意味着没有其他语言使用perl解释器作为VM,而许多语言可以编译成JVM字节码(例如Python、Ruby、Perl6、Clojure、…等语言)。。

然而,JVM是为服务器软件或桌面应用程序等长期运行的程序而优化的.这使得执行代价高昂的优化成为一种可行的权衡。OTOH Perl不仅用于大型程序,而且还用于小型工具,在这些工具中,启动成本非常重要。因此,简单的Perl脚本可能只需要2MB的内存,并且可以比JVM单独启动所需的速度更快。虽然JVM可以用于脚本编写,但启动成本和内存的极端使用往往使其没有吸引力。

术语注意:脚本是在不手动编译的情况下执行程序。这与解释和编译无关。在Unix中,shebang可以用来指定脚本的解释器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21202958

复制
相关文章

相似问题

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