Bagaimana JVM dan WORA Java berbeda dari bahasa tingkat tinggi lainnya?

12

Di dunia Java, kita sering berbicara tentang JVM, dan ketika Java baru, ia memiliki fitur pembunuh yang seharusnya menjadi "Write Once, Run Anywhere."

Dari cara orang berbicara dan menulis, ini tampak berbeda dari cara Python, misalnya, bekerja. Namun saya belum mengetahui bahwa kode Python yang saya tulis akan bekerja secara berbeda pada komputer lain. (Meskipun aku belum menulis Python sebanyak itu.)

Jadi apa yang saya lewatkan? Bagaimana JVM berbeda dari juru bahasa Python? Apakah ada cara yang Python tidak memiliki independensi platform Java? Atau ini hanya perbedaan budaya?

Eric Wilson
sumber
1
Perbedaan utama adalah ketatnya spesifikasi JVM. Ini hanya didefinisikan dengan sangat baik bagaimana harus (tidak seharusnya) berperilaku.

Jawaban:

17

Java melakukan pekerjaan yang sangat baik untuk mengisolasi Anda dari OS yang mendasarinya dan memberi Anda alat yang persis sama pada sebagian besar platform yang berfungsi untuk berbicara tentang hal-hal di OS yang mendasarinya.

Python di sisi lain tidak melakukan pekerjaan yang baik dalam mengisolasi Anda dari OS yang mendasarinya, Python tidak memiliki cara standar untuk menangani antara proses komunikasi (lihat perbedaan dalam modul sys dan modul os antara jendela dan * nix implementasi Python misalnya.)

Saya telah menulis kode dalam python yang hanya akan bekerja pada kotak * NIX atau kotak Windows hanya menggunakan panggilan API Python yang tersedia, di mana di Jawa akan sangat sulit untuk menulis kode yang hanya Java API yang tidak akan bekerja sama pada kedua Kotak Windows atau kotak * NIX

mangga
sumber
1
Sama sekali tidak sulit untuk menulis kode Java yang hanya berfungsi pada Windows; hanya mengkodekan jalur file Windows seperti "C: \ MyApp \ data"
kevin cline
@kevincline Jalur hardcoded adalah praktik buruk pada sistem operasi apa pun. Tetapi Java tidak mengharuskan Anda untuk melakukan ini, karena ia menawarkan metode independen-OS untuk mengambil direktori umum seperti direktori pengguna atau jalur instal program saat ini.
Philipp
3

Secara topikal dan hanya dari runtime bahasa, ada sedikit perbedaan. JVM secara khusus dirancang tidak hanya sebagai juru bahasa tetapi juga kompiler runtime, inferensi kode, lapisan virtualisasi instrumental yang dapat diterapkan kait dinamis, berbagai semantik GC dan kemampuan untuk menggambarkan ergonomi virtualisasi, untuk beberapa nama. Python dapat berjalan di JVM? Bisakah Java dijalankan dalam interpreter Python?

Kebanyakan interpreter adalah runtime language / token interpreter, JVMs (dan lainnya) seperti yang Anda ketahui interpretasikan / kompilasi / jalankan kode perantara. IBM misalnya telah melakukan ini selama beberapa dekade di luar Jawa, itu bukan hal yang baru. Bahkan VB berjalan dalam kode menengah selama beberapa waktu saya percaya?

WORA sebagian besar sudah ketinggalan jaman sekarang karena banyak bahasa yang ditafsirkan berjalan hampir di mana saja tidak berubah.

Jé Queue
sumber
3

Ketika Java masih baru, WORA adalah sesuatu yang bisa dibanggakan - khususnya, bahwa Anda dapat mengkompilasi pada satu platform dan menjalankannya (dikompilasi dengan kode kode) pada platform lain.

Tentu saja, bahasa yang diinterpretasikan berjalan hampir mirip tanpa memandang platform apa yang dijalankan oleh penerjemah (selama penerjemah tersedia untuk platform itu). Namun, sistem file, masalah izin, penyandian, akhir baris dan banyak masalah kecil tapi menjengkelkan lainnya dapat menyebabkan sakit kepala. Beberapa hal yang bergantung pada platform tidak mudah untuk disingkirkan.

Joonas Pulakka
sumber
WORA itu sendiri tidak cukup. Bagian yang sangat penting adalah bahwa ia didefinisikan dengan sangat baik bagaimana ia berjalan di mana-mana, membuatnya tidak penting di mana ia dijalankan.
Thorbjørn Ravn Andersen
1

Apakah Python memiliki platform independen GUI?

Lagi pula, fitur WORA - sekali lagi - untuk memikat programmer C, karena C cenderung memodelkan platform yang mendasarinya secara dekat, dan karena platform berbeda (ukuran kata? Endianess?) Membuat program C yang sepenuhnya portabel membutuhkan perhatian dan perhatian yang besar.

Janji Java adalah bahwa semua kebosanan ini tidak harus dilakukan, karena platform didefinisikan dengan sangat baik dan Anda TAHU bahwa char adalah 16 bit dll. Juga GUI ditulis dalam Java dan juga 100% portabel, yang berarti bahwa Anda Program dapat berjalan di komputer yang belum pernah Anda dengar dan bahkan berjalan dengan benar.


sumber
6
Python memiliki beberapa alternatif platform GUI independen: docs.python.org/faq/…
Joonas Pulakka
Java GUI terkenal karena tidak ditampilkan dengan benar di berbagai platform, jadi saya tidak akan sesumbar tentang aspek itu. Namun, saya akan setuju dengan sisa pernyataan Anda.
Kemarahan
-4

Kecuali bahwa Jawa secara tegas bukan WORA. Saya telah melihat perangkat lunak Java yang rusak setelah Java telah ditingkatkan ke versi yang lebih tinggi pada nomor versi minor . IMHO, WORA hanyalah tipuan pemasaran.

zvrba
sumber
1
Ini sebenarnya bukan jawaban untuk pertanyaan itu.
Eric Wilson
-1 karena Java adalah WORA untuk semua tujuan praktis. Ini akan bekerja jika Anda menghindari peretasan khusus sistem dan hal-hal asli seperti JNI. Saya sudah memiliki 50.000+ aplikasi garis berjalan sempurna di Windows, Mac dan Linux, tidak ada perubahan, pertama kali, dengan file .jar terkompilasi yang sama. Jika Anda tetap menggunakan Java murni, itu semua hanya berfungsi.
mikera
1
Tampaknya Anda salah paham apa yang dimaksud WORA.