JVM và Java của WORA khác với các ngôn ngữ cấp cao khác như thế nào?


11

Trong thế giới Java, chúng ta thường nói về JVM và khi Java mới, nó có tính năng được cho là sát thủ của "Viết một lần, chạy mọi nơi".

Từ cách mọi người nói và viết, điều này có vẻ khác với cách mà Python, ví dụ, hoạt động. Tuy nhiên, tôi đã không nhận thức được bất kỳ cách nào mà mã Python mà tôi đã viết sẽ hoạt động khác nhau trên một máy khác. (Mặc dù tôi chưa viết nhiều Python.)

Vậy tôi còn thiếu gì? JVM khác với trình thông dịch Python như thế nào? Có cách nào Python thiếu tính độc lập nền tảng của Java không? Hay đây chỉ là một sự khác biệt văn hóa?


1
Sự khác biệt chính là sự nghiêm ngặt của đặc tả JVM. Nó chỉ đơn giản là được xác định rất rõ cách nó phải (không nên) cư xử.

Câu trả lời:


16

Java thực hiện rất tốt việc cách ly bạn khỏi HĐH cơ bản và cung cấp cho bạn các công cụ chính xác tương tự trên hầu hết các nền tảng mà nó hoạt động để nói chuyện với mọi thứ trong HĐH cơ bản.

Mặt khác, Python không làm tốt công việc trong việc cách ly bạn khỏi HĐH cơ bản, Nó không có cách xử lý tiêu chuẩn giữa các quá trình giao tiếp (nhìn vào sự khác biệt trong mô-đun sys và mô-đun os giữa các cửa sổ và * nix triển khai Python chẳng hạn.)

Tôi đã viết mã bằng python chỉ hoạt động trên hộp * NIX hoặc hộp Windows chỉ sử dụng các lệnh gọi API có sẵn của Python, trong đó trong Java sẽ rất khó để viết mã chỉ là API Java không hoạt động giống nhau trên cả hai Hộp Windows hoặc hộp * NIX


1
Hoàn toàn không khó để viết mã Java chỉ hoạt động trên Windows; chỉ cần mã cứng một đường dẫn tệp Windows như "C: \ MyApp \ data"
kevin cline

@kevincline Đường dẫn mã hóa cứng là một thực tiễn xấu trên bất kỳ hệ điều hành nào. Nhưng Java không yêu cầu bạn làm điều này, vì nó cung cấp các phương thức độc lập với hệ điều hành để lấy các thư mục phổ biến như thư mục người dùng hoặc đường dẫn cài đặt của chương trình hiện tại.
Philipp

3

Về cơ bản và chỉ từ một thời gian chạy ngôn ngữ, có rất ít sự khác biệt. JVM nói riêng được thiết kế không chỉ là trình thông dịch mà còn là trình biên dịch thời gian chạy, suy luận mã, lớp ảo hóa công cụ có thể có các móc động được áp dụng, ngữ nghĩa GC khác nhau và khả năng mô tả công thái học ảo hóa, để đặt tên cho một số. Python có thể chạy trong JVM? Java có thể chạy trong trình thông dịch Python không?

Hầu hết các trình thông dịch là trình thông dịch ngôn ngữ / mã thông báo thời gian chạy, JVM (và các trình thông dịch khác) như bạn biết phiên dịch / biên dịch / chạy mã trung gian. Ví dụ, IBM đã làm điều này trong nhiều thập kỷ bên ngoài Java, nó không có gì mới. Ngay cả VB chạy mã trung gian một thời gian tôi tin?

Bây giờ, WORA chủ yếu là passé vì nhiều ngôn ngữ được dịch chỉ chạy ở mọi nơi không thay đổi.


3

Khi Java còn mới, WORA là thứ để tự hào - cụ thể là bạn có thể biên dịch trên một nền tảng và chạy nó (được biên dịch bởi mã byte) trên các nền tảng khác.

Tất nhiên, các ngôn ngữ thông dịch chạy khá giống nhau bất kể trình thông dịch chạy trên nền tảng nào (miễn là trình thông dịch có sẵn cho nền tảng đó). Tuy nhiên, hệ thống tệp, vấn đề cấp phép, mã hóa, kết thúc dòng và vô số vấn đề nhỏ nhưng khó chịu khác có thể gây đau đầu. Một số thứ phụ thuộc vào nền tảng không dễ dàng trừu tượng hóa.


1

Python có GUI độc lập với nền tảng không?

Dù sao, tính năng WORA là - một lần nữa - để thu hút các lập trình viên C, vì C có xu hướng mô hình hóa nền tảng cơ bản chặt chẽ, và vì các nền tảng khác nhau (kích thước của từ? Endianess?) Tạo ra các chương trình C di động hoàn toàn cần sự quan tâm và chăm sóc tuyệt vời.

Lời hứa của Java là tất cả sự tẻ nhạt này không phải thực hiện, vì nền tảng được xác định rất rõ và bạn BIẾT rằng char là 16 bit, v.v. Ngoài ra GUI được viết bằng Java và cũng có thể di động 100%, có nghĩa là chương trình có thể chạy trên máy tính mà bạn chưa từng nghe đến và thậm chí chạy chính xác.


6
Python có một số lựa chọn thay thế GUI độc lập với nền tảng: docs.python.org/faq/,
Joonas Pulakka

GUI Java nổi tiếng là không hiển thị đúng trên các nền tảng khác nhau, vì vậy tôi sẽ không thực sự tự hào về khía cạnh đó. Tuy nhiên, tôi sẽ đồng ý với phần còn lại của tuyên bố của bạn.
cơn thịnh nộ

-4

Ngoại trừ việc Java rõ ràng không phải là WORA. Tôi đã thấy phần mềm Java bị hỏng sau khi Java được nâng cấp lên phiên bản cao hơn trên số phiên bản nhỏ . IMHO, WORA chỉ là một mánh lới quảng cáo tiếp thị.


1
Đây thực sự không phải là một câu trả lời cho câu hỏi.
Eric Wilson

-1 vì Java là WORA cho tất cả các mục đích thực tế. Nó sẽ hoạt động nếu bạn tránh được các bản hack dành riêng cho hệ thống và rõ ràng là các thứ nguyên gốc như JNI. Tôi đã có hơn 50.000 ứng dụng dòng chạy hoàn hảo trên Windows, Mac và Linux, không có thay đổi, lần đầu tiên, với cùng một tệp .jar được biên dịch. Nếu bạn dính vào Java thuần thì tất cả chỉ hoạt động.
mikera

Có vẻ như bạn đã hiểu nhầm ý của WORA.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.