2009-08-21 59 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 這很有趣,在一個點上,他們認爲有人通過日本後:)