2009-08-21 35 views
7

Bạn có thể biên dịch một ứng dụng Java và chạy nó trong bất kỳ máy nào mà máy ảo Java được đặt, độc lập với phần cứng cơ bản.Ruby có phải là nền tảng chéo như Java không?

Ruby on Rails được xây dựng dựa trên Ruby, tôi lo ngại nếu xây dựng phần mềm trong Ruby ở bất kỳ môi trường nào cũng giống nhau hay không. Có tồn tại các phiên bản của Ruby cho Windows, Linux và Mac ít nhất.

Vì vậy, bạn có thể làm tương tự với ứng dụng Ruby và với ứng dụng Java không? Nói cách khác, Ruby là nền tảng đa nền tảng như thế nào?

EDIT: Ý tôi là Ruby, không phải Ruby đang chạy trong một máy ảo khác như trong jRuby. Tôi có nên mong đợi nhiều sự phát triển gotchas đa nền tảng trong Ruby hơn trong Java hay cả hai đều giống nhau không?

+3

bạn thực sự nên nói rằng bạn có nghĩa là hệ thống nhúng, tôi chưa bao giờ nghĩ về nó trước khi tôi đọc nhận xét trên Câu trả lời đầu tiên (dường như đã bỏ lỡ các nền tảng mục tiêu này) – Jean

+0

Bạn đúng Jean, tôi đã bị bỏ phiếu hai lần vì câu hỏi không đề cập đến các hệ thống nhúng và tôi đã trả lời theo câu hỏi. +1 cho nhận xét của bạn. Ý bạn là hệ thống nhúng? –

Trả lời

13

Ruby là ngôn ngữ kịch bản và được diễn giải tại thời gian chạy bởi trình thông dịch Ruby, mã Ruby được diễn giải và chuyển đổi sang ngôn ngữ cấp máy là mã Assembly. Nói về nền tảng Độc lập, bạn có thể chạy mã ruby ​​trong bất kỳ nền tảng nào như Linux, Windows hoặc Mac nếu bạn có cài đặt Ruby Interpreter phụ thuộc nền tảng.

Ở đâu cũng như trong Java, nó được biên dịch và chuyển đổi thành một lớp byte trung gian và lớp byte này được giải thích bởi JVM phụ thuộc nền tảng (Java Virtual Machine). Theo cách đó bạn có thể nghĩ rằng tệp nguồn Ruby là lớp byte có thể chạy trên bất kỳ nền tảng nào, với một lớp byte khác biệt đã được biên dịch nhưng tệp nguồn ruby ​​sẽ được biên dịch tại thời gian chạy.

+4

Tại sao điều này lại bị bỏ phiếu hai lần? Câu hỏi là mơ hồ lúc tốt nhất và khởi động flamewar tồi tệ nhất. Câu trả lời này là một câu trả lời hay. (Tôi đã giải cứu bạn một chút với +1.) – jdl

+0

Các ngôn ngữ được phiên dịch (như Ruby) thường hoạt động giống nhau trên nhiều nền tảng khác nhau. Tất cả việc nâng hạng nặng cụ thể cho nền tảng được thực hiện khi thông dịch viên được chuyển, và các tập lệnh có thể trông đợi hoạt động giống nhau trên bất kỳ nền tảng nào có sẵn thông dịch viên. Các caveat lớn là thư viện. Một số thư viện có thể không có sẵn cho tất cả các nền tảng giống như Ruby. Do đó, nếu bạn sử dụng thư viện chỉ dành cho Linux và cố gắng chạy mã của bạn trên hộp Windows, mã của bạn sẽ không thực sự là "nền tảng chéo" (mặc dù đây không phải là lỗi của chính ngôn ngữ đó). – bta

+0

Bất kỳ tài liệu tham khảo, xin vui lòng? –

0

Nếu không có gì khác, bạn có thể chạy JRuby, một thông dịch viên Ruby được viết bằng Java.

+1

JRuby sẽ không chạy trên nhiều hệ thống nhúng sử dụng phiên bản Java bytecode cũ hơn, không tương thích. – Imagist

5

Ruby liên kết chặt chẽ với nền tảng cơ bản. Điều này đặc biệt quan trọng khi nói đến các cơ chế xử lý/luồng, và các dạng khác nhau của IPC. Đây là những thách thức đáng kể hơn để vượt qua, so với những thách thức "tầm thường" như là người gửi thư mục, v.v. Tôi khá chắc chắn rằng không có sự tương đương giữa, thời gian chạy Windows Ruby và thời gian chạy Linux Ruby.

Với Java, mô hình IPC/process/thread giống nhau trên tất cả các nền tảng chạy JVM.

3

Miễn là bạn không chạm vào phần cứng hoặc luồng, Ruby sẽ hoạt động trên ba hệ điều hành chính. Để phát triển web, Ruby hầu hết sẽ làm việc ở mọi nơi. Đối với các ứng dụng nâng cao hơn, không, bởi vì nó không cung cấp các trừu tượng của JVM (mà bạn có thể có trong tâm trí).

2

Java là nền tảng chéo. Ruby thì không. Nó cảm thấy rất giống như một suy nghĩ của, "oh chúng tôi có người dùng windows, hãy thử và làm cho nó hoạt động".

Trong Java, tôi đã gặp phải ít hơn 10 vấn đề nền tảng chéo trong nhiều năm sử dụng nhiều. Các khu vực này đã được, rõ ràng là khu vực đó sẽ được khôn lanh. Hệ thống/tệp hệ thống cụ thể.

Trong ruby, tôi đã gặp phải sự cố ngay cả khi thực hiện hướng dẫn đường ray đầu tiên như những người khác (https://github.com/twbs/bootstrap-sass/issues/696). Tôi sẽ không xem xét nền tảng ruby ​​chéo. Nền tảng này dựa trên một loạt các phụ thuộc, trong đó bất cứ lúc nào một trong số chúng sử dụng bất kỳ nền tảng cụ thể nào mà toàn bộ sự cố xảy ra. I E.thấy lỗi này: ExecJS::RuntimeError on Windows trying to follow rubytutorial

Tôi cũng thừa kế một dự án ruby ​​lớn và dựa vào capistrano, webkit, bcrypt và những bộ công cụ xây dựng và bản dựng này. Nó không chỉ hoạt động. Mọi người gặp khó khăn ở đây: https://github.com/codahale/bcrypt-ruby/issues/116 Thật buồn cười, tại một thời điểm họ đề nghị ai đó theo dõi một bài đăng tiếng Nhật :)

Các vấn đề liên quan