Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby和Java一样是跨平台的吗?_Java_Ruby On Rails_Ruby - Fatal编程技术网

Ruby和Java一样是跨平台的吗?

Ruby和Java一样是跨平台的吗?,java,ruby-on-rails,ruby,Java,Ruby On Rails,Ruby,您可以编译Java应用程序并在Java虚拟机所在的任何机器上运行它,而不依赖于底层硬件 因为它是基于Ruby构建的,所以我担心在任何环境中用Ruby构建软件是否相同。至少有适用于Windows、Linux和Mac的Ruby版本 那么,对于Ruby应用程序和Java应用程序,您能做同样的事情吗?换句话说,Ruby是如何跨平台的 编辑:我指的是Ruby本身,而不是运行在另一个虚拟机中的Ruby,如。我应该期望Ruby中的跨平台gotchas开发比Java中的更多,还是两者几乎相同?Ruby是一种脚本

您可以编译Java应用程序并在Java虚拟机所在的任何机器上运行它,而不依赖于底层硬件

因为它是基于Ruby构建的,所以我担心在任何环境中用Ruby构建软件是否相同。至少有适用于Windows、Linux和Mac的Ruby版本

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


编辑:我指的是Ruby本身,而不是运行在另一个虚拟机中的Ruby,如。我应该期望Ruby中的跨平台gotchas开发比Java中的更多,还是两者几乎相同?

Ruby是一种脚本语言,它在运行时由Ruby解释器解释,Ruby代码被解释并转换为机器级语言,即汇编代码。说到平台独立性,若您安装了平台相关的ruby解释器,那个么您可以在Linux、Windows或Mac等任何平台上运行ruby代码

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


通过这种方式,您可以将Ruby源文件视为可以在任何平台上运行的字节类,其中一个不同之处是字节类已经编译,但Ruby源文件将在运行时编译。

如果没有其他内容,您可以运行JRuby,一个用Java编写的Ruby解释器。

Ruby与底层平台的绑定相当紧密。当涉及到进程/线程机制和各种形式的IPC时,情况尤其如此。与目录分隔器等“琐碎”挑战相比,这些挑战更需要克服。我很确定,比如说,WindowsRuby运行时和LinuxRuby运行时之间是不对等的


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

只要不涉及硬件或线程,Ruby应该可以在三种主要的操作系统上工作。对于web开发,Ruby在任何地方的工作方式都是一样的。对于更高级的应用程序,没有,因为它不提供JVM的抽象(您可能已经想到了)。Java是跨平台的。Ruby并非如此。它让人感觉就像是“哦,我们有windows用户,让我们试着让它工作吧”

在Java中,我在多年的大量使用中遇到的跨平台问题不到10个。很明显,这是一个棘手的问题。系统/文件系统详细信息

在ruby中,我甚至在编写第一个rails教程时也遇到过问题,就像其他人一样()。我不会考虑Ruby交叉平台。平台依赖于一系列依赖项,其中任何一个依赖项使用特定于平台的任何东西,整个依赖项都会中断。i、 e.查看此错误:

我还继承了一个较大的ruby项目,它依赖于capistrano、webkit、bcrypt,这些都需要开发构建工具包和本机构建。它不仅仅起作用。看看这里有麻烦的人:
有趣的是,在某一点上,他们建议有人关注一篇日本帖子:)

JRuby不会在许多使用旧的、不兼容的Java字节码版本的嵌入式系统上运行。你应该提到的是,你指的是嵌入式系统,在读到第一个答案的评论之前,我从未想过这一点(它们似乎也错过了这些目标平台)你说得对,珍,我被否决了两次,因为这个问题没有提到嵌入式系统,我根据问题回答。你的评论是+1。你是指嵌入式系统吗?为什么这被否决了两次?这个问题充其量是含糊不清的,最坏是一个火爆战发起者。这个答案很好。(我用+1救了你一点。)解释语言(如Ruby)通常在多种不同的平台上都可以使用相同的功能。所有特定于平台的繁重工作都是在移植解释器时完成的,并且脚本可以在任何有解释器的平台上使用相同的功能。最大的警告是库。有些库可能不适用于所有相同的平台Ruby是。因此,如果您使用(例如)Linux专用库,并尝试在Windows机器上运行代码,您的代码将不会真正“跨平台”(尽管这不是语言本身的错)。请提供任何参考资料?