Ruby是否与Java一样跨平台?

您可以编译Java应用程序并在Java虚拟机所在的任何计算机上运行它,而与底层硬件无关。

由于Ruby on Rails是基于Ruby构建的,因此我担心在任何环境中使用Ruby构建软件是否相同。 至少存在适用于Windows,Linux和Mac的Ruby版本。

那么,你可以用Ruby应用程序和Java应用程序做同样的事情吗? 换句话说,跨平台如何是Ruby?

编辑:我的意思是Ruby本身,而不是像jRuby中的另一个虚拟机中运行的Ruby。 我是否期望在Ruby中开发比Java更多的跨平台陷阱或两者几乎相同?

Ruby是一种脚本语言,它在运行时由Ruby解释器解释,Ruby代码被解释并转换为机器级语言,即汇编代码。 谈论平台独立性,如果您安装了平台相关的Ruby解释器,您可以在任何平台(如Linux,Windows或Mac)中运行ruby代码。

在Java中,它被编译并转换为中间字节类,并且此字节类由平台相关的JVM(Java虚拟机)解释。

通过这种方式,您可以将Ruby源文件视为可以在任何平台上运行的字节类,只有一个差异字节类已经编译,但ruby源文件将在运行时编译。

Ruby与底层平台紧密相关。 当涉及到进程/线程机制和各种forms的IPC时尤其如此。 与作为目录分隔符的“微不足道的”相比,这些是要克服的更重要的挑战,等等。 我很确定Windows Ruby运行时和Linux Ruby运行时之间没有平价。

使用Java,IPC /进程/线程模型在运行JVM的所有平台上都是相同的。

只要您不接触硬件或线程,Ruby就应该在三个主要操作系统上工作。 对于Web开发,Ruby将在大多数地方工作。 对于更高级的应用程序,不,因为它不提供JVM的抽象(您可能已经考虑过)。

Java是跨平台的。 Ruby不是。 这听起来像是一个事后的想法,“哦,我们有Windows用户,让​​我们尝试让它工作”。

在Java中,经过多年的大量使用,我遇到了不到10个跨平台问题。 它所在的区域显然是非常棘手的区域。 系统/文件系统细节。

在ruby中,即使在执行第一个rails教程时也遇到了问题( https://github.com/twbs/bootstrap-sass/issues/696 )。 我不会考虑ruby跨平台。 该平台依赖于大量的依赖关系,这些依赖关系中的任何一个都可以使用任何特定于平台的东西。 即看到此错误: Windows上的ExecJS :: RuntimeError试图遵循rubytutorial

我还inheritance了一个大的ruby项目,它依赖于capistrano,webkit,bcrypt,这些需要一个开发构建工具包和本机构建。 它不仅起作用。 看到有问题的人在这里: https : //github.com/codahale/bcrypt-ruby/issues/116这很有趣,有一次他们建议有人关注日语post:)

如果不出意外,您可以运行JRuby,一个用Java编写的Ruby解释器。