JVM和Java的WORA与其他高级语言有何不同?


12

在Java世界中,我们经常谈论JVM,而Java刚发布时,它具有所谓的杀手级功能:“一次编写,在任何地方运行”。

从人们的交谈和书写方式来看,这似乎与Python的工作方式不同。但是我还没有发现我编写的Python代码在另一台机器上可以有不同的工作方式。(尽管我没有写太多的Python。)

那我想念什么呢?JVM与Python解释器有何不同?有没有办法使Python缺乏Java的平台独立性?还是仅仅是文化差异?


1
主要区别在于JVM规范的严格性。它是非常明确定义的,它必须(不应该)如何行为。

Answers:


17

Java在将您与基础OS隔离方面做得非常好,并且在与基础OS进行对话的大多数平台上为您提供了完全相同的工具。

另一方面,Python在将您与底层OS隔离方面做得不好,它在处理进程通信之间没有标准的处理方式(请查看Windows和*之间sys模块和os模块之间的差异。例如Python的nix实现。)

我用python编写的代码只能使用Python可用的API调用在* NIX框或Windows框上工作,而在Java中,很难编写仅在两个API上都不能正常工作的Java API代码Windows框或* NIX框


1
编写仅在Windows上运行的Java代码并不困难;只是硬编码Windows文件路径,例如“ C:\ MyApp \ data”
kevin cline 2014年

@kevincline硬编码路径在任何操作系统上都是不好的做法。但是Java不需要您这样做,因为Java提供了与操作系统无关的方法来检索公用目录,例如用户目录或当前程序的安装路径。
菲利普2014年

3

仅从语言运行时来看,几乎没有什么区别。JVM不仅被设计为解释器,还被设计为运行时编译器,代码推断,可以应用动态挂钩的工具虚拟化层,各种GC语义以及描述虚拟化人体工程学的能力,仅举几例。Python可以在JVM中运行吗?Java可以在Python解释器中运行吗?

如您所知,大多数解释器都是运行时语言/令牌解释器,JVM(和其他),它们可以解释/编译/运行中间代码。例如,IBM在Java之外已经有数十年的历史了,这并不是什么新鲜事。我相信VB甚至在中间代码中运行了一段时间吗?

由于许多解释语言几乎在任何地方都可以运行,因此WORA现在已经过时了。


3

当Java是新的时,WORA值得夸耀-特别是,您可以在一个平台上进行编译,然后在其他平台上运行(已编译的字节码)。

当然,无论解释器在哪个平台上运行(只要该平台可使用该解释器),解释语言的运行方式都非常相似。但是,文件系统,权限问题,编码,行尾以及无数其他小的但令人讨厌的问题都可能引起麻烦。一些与平台相关的事情很难抽象出来。


WORA本身还不够。真正重要的一点是,它已很好地定义它在任何地方的运行方式,从而使其在运行的确切位置变得不重要。
托尔比约恩Ravn的安徒生

1

Python是否具有独立于平台的GUI?

无论如何,WORA的功能再次吸引了C程序员,因为C倾向于紧密地对基础平台进行建模,并且由于平台不同(字的大小?字节顺序),创建完全可移植的C程序需要格外注意。

Java的承诺是不必完成所有这些繁琐的工作,因为平台定义非常明确,并且您知道char是16位等。而且GUI是用Java编写的,并且也是100%可移植的,这意味着您可以该程序可以在您从未听说过的计算机上运行,​​甚至可以正常运行。


6
Python有几个平台独立的图形用户界面的替代品:docs.python.org/faq/...
Joonas Pulakka

Java GUI以无法在各种平台上正确显示而臭名昭著,因此我不会为此而吹嘘。但是,我同意你的其余发言。
愤怒

-4

除了强调Java 不是 WORA。我已经看到Java软件在次要版本号上升级到更高版本后出现故障。恕我直言,WORA只是一种营销头。


1
这实际上不是这个问题的答案。
埃里克·威尔逊

-1是因为Java出于所有实际目的都是WORA。它如果你避免系统特定的黑客和喜欢JNI明显本土的东西的工作。我已经有50,000多个行应用程序在Windows,Mac和Linux上完美运行,并且第一次使用相同的已编译.jar文件进行了更改。如果您坚持使用纯Java,那么一切都将奏效。
mikera 2011年

1
看来您误解了WORA的意思。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.