2009-08-21 56 views
7

您可以编译Java应用程序并在Java虚拟机所在的任何计算机上运行它,而不依赖于底层硬件。Ruby和Java一样是跨平台的吗?

由于Ruby on Rails是基于Ruby的建成,我很担心,如果在任何环境下构建软件在Ruby是相同或不。至少存在用于Windows,Linux和Mac的Ruby版本。

那么,您可以对Ruby应用程序和Java应用程序执行相同的操作吗?换句话说,Ruby如何跨平台?

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

+3

你其实应该提到,你的意思是嵌入式系统,我从来没有想过这个问题之前,我读了评论第一个答案(这似乎也错过了这些目标平台) – Jean 2009-08-21 07:56:23

+0

你是对的让,我被两次downvoted,因为这个问题不提及嵌入式系统,我根据问题回答。为您的评论+1。你是不是指嵌入式系统? – 2009-08-21 08:05:32

回答

13

Ruby是一种脚本语言,它是在由Ruby解释的运行时间解释,该Ruby代码被解释并转换成机器语言级即汇编代码。谈论独立平台,如果您安装了平台依赖的Ruby解释器,您可以在任何Linux,Windows或Mac平台上运行Ruby代码。

凡为在Java中,它被编译并转换为一个中间字节类和这个字节类是由依赖于平台的JVM(Java虚拟机)的解释。

这样一来,你可以认为你Ruby源文件可以在任何平台上运行,但有一点不同字节类已经被编译,但Ruby源代码文件将在运行时编译字节级。

+4

为什么这次投了两次?这个问题最多含糊不清,最糟糕的是一个火焰战士首发。这个答案是一个很好的答案。 (我用+1救了你一些。) – jdl 2009-08-21 14:21:05

+0

解释型语言(如Ruby)通常在多种不同的平台上具有相同的功能。所有平台特定的繁重工作都是在解释器移植时完成的,脚本可以在任何可以使用解释器的平台上运行。最重要的警告是图书馆。某些库可能不适用于所有与Ruby相同的平台。因此,如果您使用(例如)仅限于Linux的库并尝试在Windows机器上运行您的代码,那么您的代码将不是真正的“跨平台”(尽管这不是语言本身的错误)。 – bta 2010-02-26 21:01:41

+0

有没有参考资料? – 2017-03-14 19:30:47

0

如果没有别的,你可以运行JRuby,一个用Java编写的Ruby解释器。

+1

JRuby不能运行在许多嵌入式系统上,这些嵌入式系统使用较老的不兼容的Java字节码版本。 – Imagist 2009-08-21 05:36:25

5

Ruby与底层平台的绑定非常紧密。当涉及到进程/线程机制以及各种形式的IPC时,情况尤其如此。与作为目录分隔符的“平凡的”相比,这些是要克服的更重要的挑战,等等。我很确定,在Windows Ruby运行时和Linux Ruby运行时间之间不存在平衡。

在Java中,IPC /进程/线程模型是运行在JVM所有平台一样。

3

只要你不碰硬件或线程,Ruby应该可以在三大操作系统上工作。对于Web开发,Ruby在大多数情况下的工作原理都是一样的对于更高级的应用程序,不,因为它不提供JVM的抽象(您可能想到的)。

2

Java是跨平台的。 Ruby不是。非常感觉就像是一个事后的“哦,我们有Windows用户,让​​我们试着让它工作”。

在Java中,在大量使用的年份中,我经历了少于10次的跨平台问题。这个领域显然是很棘手的领域。系统/文件系统的细节。

在Ruby中,我已经做了第一轨教程,即使遇到问题,因为有其他(https://github.com/twbs/bootstrap-sass/issues/696)。我不会考虑ruby跨平台。该平台依赖于大量的依赖关系,任何时候他们中的任何一个都会使用特定于平台的任何平台来破解整个事件。即看到此错误: ExecJS::RuntimeError on Windows trying to follow rubytutorial

我也继承了一个相当大的红宝石项目,它依赖于Capistrano的,WebKit的,bcrypt这些需要开发构建套件和本地建立。它不只是工作。见有困难的人在这里: https://github.com/codahale/bcrypt-ruby/issues/116 这很有趣,在一个点上,他们认为有人通过日本后:)