Apakah Java (masih) bahasa lintas platform pilihan? [Tutup]

20

Ketika saya mulai menggunakan Java pada tahun sembilan puluhan, itu semua " Tulis sekali, jalankan di mana saja! " Sejak hari pertama. Itu mungkin semua benar saat itu dan saya juga merupakan bagian dari paduan suara.

Saya tidak yakin apa yang harus dipikirkan lagi, mengingat semua bahasa lain menggunakan runtime multi platform (python, flash, perl, html, php ...). Tapi saya masih melihat banyak argumen yang mengatakan Anda harus menggunakan Java karena itu seharusnya lebih baik untuk pengembangan lintas platform.

Jadi, apakah itu masih benar hari ini? Apakah Java masih menjadi bahasa pilihan untuk pengembangan multi platform?

  • Harap spesifik dengan fokus pada aspek lintas platform.
  • Saya tidak meminta perbandingan fitur bahasa secara umum.

Pembaruan: Sejauh ini respons hebat! Sebagian besar jawaban tampaknya lebih menyukai Java atau web. Adakah masukan dari kerumunan skrip?

Martin Wickman
sumber
3
Komentar ini tidak menjawab inti pertanyaan, tetapi merupakan faktor yang perlu dipertimbangkan: aplikasi web berbasis Java yang ditargetkan untuk pengguna Windows adalah sesuatu yang harus dihindari. Oracle JVM untuk Windows telah mengalami banyak masalah keamanan belakangan ini. Dengan demikian, Anda mungkin menemukan bahwa pengguna yang cerdas tidak akan menggunakan aplikasi web berbasis Java karena mereka telah mencopot JVM.
colek
Pertanyaan Anda didasarkan pada asumsi bahwa itu adalah bahasa pilihan lintas platform.
Lucas Ramage

Jawaban:

10

bahasa gaya scripting seperti python juga membuat pengembangan lintas platform lebih mudah. Sekarang, apakah Anda suka Python (atau bahasa lain seperti itu) tergantung pada Anda, dan kami mungkin tidak perlu memulai perdebatan itu di sini.

Java mencoba memaksa Anda untuk menulis kode yang akan berjalan dengan mudah, sementara python memungkinkan Anda untuk menulis kode portabel. Bahasa python yang sebenarnya itu sendiri akan berjalan dengan mudah, tetapi perpustakaan eksternal mungkin atau mungkin tidak. Selain itu, python akan secara bebas memberikan akses ke layanan spesifik platform.

Apakah Java menguntungkan di sana? Saya pikir dalam kedua kasus Anda dapat menulis kode portabel dengan kemudahan yang sama. Artinya, Anda dapat menulis kode dan biasanya akan bekerja pada platform yang berbeda. Tetapi Anda tidak dapat pergi hanya dengan menulis kode dan menganggapnya akan berhasil di mana-mana. Saya telah bekerja pada proyek python yang menghasilkan versi untuk Windows, Linux, dan Mac dan kami mengalami sedikit masalah lintas platform. (Satu-satunya yang saya ingat adalah karena bug di perpustakaan kami menggunakan pygame, yang menyebabkan masalah menggambar di Linux. Ini diperbaiki dengan memutakhirkan versi pygame yang kami gunakan)

Masalah lainnya adalah penyebaran. Jika Anda ingin mendistribusikan program mandiri yang menjalankan kode Anda, Anda harus membuat versi yang berbeda untuk platform yang berbeda. Untuk Java, Anda dapat mendistribusikan satu versi dan menganggap bahwa pengguna telah menginstal Java atau dapat menginstalnya. Dalam hal ini Java mungkin menang dalam kesederhanaan departemen penempatan.

Pada akhirnya, saya pikir itu tergantung pada bahasa apa yang Anda sukai dan dengan penyebaran apa yang perlu Anda lakukan.

Winston Ewert
sumber
18

Meskipun Java mungkin bukan satu -satunya atau alat lintas-platform yang layak , ia memiliki beberapa kekuatan:

  • Ini sangat cepat.
  • Ini sangat kuat.
  • Ini sangat portabel (misalnya bytecode dikompilasi 10 tahun yang lalu di Windows 95 berjalan dengan baik di OS X hari ini).

dan beberapa kelemahan:

  • Pustaka GUI Inti (Ayunan ...) menunjukkan usia mereka (tambahan pihak ketiga membantu di sini).
  • Bahasa itu sendiri bisa jadi kurang verbose (mis. Pengecualian yang diperiksa ...).
  • Waktu mulai bisa lebih cepat (meskipun itu membaik sepanjang waktu).

Ketika berbicara secara khusus tentang platform Java , ada satu hal lagi:

  • Ada beberapa bahasa yang berjalan di JVM dan beroperasi dengan Java.
Joonas Pulakka
sumber
19
Sangat cepat? Dibandingkan dengan apa?
HardCode
18
@HardCode: Dibandingkan dengan bahasa apa pun yang ditafsirkan atau sebagian besar bahasa yang dikompilasi. C dan C ++ dapat dibuat lebih cepat dalam beberapa kasus tetapi sulit, dan terus semakin sulit ketika jumlah core bertambah. Dengan Java concurrency (memanfaatkan beberapa inti secara efisien) adalah cara yang lebih mudah untuk dicapai dalam praktik.
Joonas Pulakka
5
@HardCode, rupanya JVM adalah runtime tercepat yang tersedia untuk hampir semua bahasa yang ditafsirkan (berbeda dengan bahasa yang dibuat oleh peretas sendiri)
14

Itu sama benarnya hari ini seperti dulu - artinya tidak sepenuhnya. Java ditulis sekali, tes dan debug di mana-mana. Tentu itu jauh lebih sedikit pekerjaan daripada port yang benar-benar segar tetapi umumnya lebih banyak pekerjaan daripada sensasi awal yang kita yakini.

Produk kami memiliki server Java yang akan berjalan pada Windows atau Linux tetapi kami telah melihat masalah spesifik OS dengannya dan memastikan kami memiliki server Linux dan Windows yang tersedia untuk dukungan / pengujian jika diperlukan. Java UI cenderung memiliki lebih banyak masalah daripada server (meskipun banyak yang kosmetik dan karena itu berpotensi dapat diabaikan tergantung pada aplikasi).

Meskipun bukan sepenuhnya bahasa bagi saya web adalah platform lintas platform pilihan. Ujung depan HTML / JavaScript berarti bahwa aplikasi Anda akan berjalan pada hampir semua platform klien dan dalam banyak kasus itu adalah tujuan sebenarnya - tidak perlu khawatir apakah itu Mac atau PC, versi OS dan sebagainya.

Tentu saja Anda secara umum masih akan mendikte platform server tetapi ketika orang-orang menjadi jauh lebih fleksibel, terutama hari-hari ini ketika sebagian besar perusahaan sudah mendukung campuran server Windows dan Linux.

Jon Hopkins
sumber
8
Jawaban yang bagus. Tentu saja, memastikan aplikasi Anda berfungsi dengan benar di semua versi peramban yang berbeda bisa membuat Anda pusing.
Tim Goodman
5
@Tim: Poin bagus. Saya percaya aplikasi browser jauh lebih "uji dan debug di mana-mana" daripada aplikasi desktop Java.
Joonas Pulakka
5
@Tim: +1. Mendapatkan aplikasi webapp untuk bekerja sama di semua browser utama sama sulitnya dengan mendapatkan aplikasi Java untuk bekerja sama di beberapa OS.
Yevgeniy Brikman
3
"tulis sekali, debug di mana-mana" tidak benar dalam pengalaman saya. selama Anda masuk akal dan menghindari dependensi platform-spesifik, saya tidak punya masalah menjalankan kode Java yang sama pada beberapa platform (termasuk yang GUI). Ya tentu saja Anda harus mengujinya, tetapi saya pikir dalam hampir 15 tahun pengkodean Java, saya hanya sekali memiliki masalah portabilitas yang nyata (yang merupakan kesalahan saya sendiri untuk pemisah direktori Windows hard-coding daripada menggunakan File.pathSeparator Java yang membantu lintas platform. !)
mikera
2
@mikera - Kami telah melihat masalah antara Linux dan Windows yang tidak ada hubungannya dengan kode kami. Mereka jarang tetapi mereka memang ada.
Jon Hopkins
9

Secara pribadi, saya akan mengatakan bahwa Java masih merupakan bahasa pilihan lintas platform, dan kemungkinan akan tetap ada untuk beberapa waktu (bersama aplikasi web). Saya menulis lebih banyak tentang topik dalam posting ini di Jawa sebagai platform pilihan , tetapi pada bagian depan platform silang khususnya:

  • Selama Anda berhati-hati dengan dependensi Anda (mis. Menghindari perpustakaan yang menggunakan JNI untuk berinteraksi dengan kode asli) maka Java dapat ditulis dijalankan tanpa dimodifikasi pada semua platform JVM utama

  • Beacuse Java biasanya didistribusikan sebagai bytecode bebas mesin, Anda dapat menjalankan tanpa kompilasi ulang pada JVM apa pun (karena JVM lokal itu sendiri menangani kompilasi JIT ke kode asli). Sebagai contoh, saya telah berhasil mendapatkan aplikasi GUI kompleks yang masuk akal untuk dijalankan pertama kali pada Mac setelah berkembang di Windows - dengan file jar yang sama . Bandingkan dengan sebagian besar bahasa lintas platform lainnya, yang biasanya memerlukan pustaka yang berbeda atau kompilasi ulang untuk platform yang berbeda.

  • Banyak pustaka inti yang Anda butuhkan (GUI, jaringan, IO, dll.) Adalah bagian dari runtime standar dan ditulis dengan cara lintas platform. Jadi Anda tidak perlu berburu dan menguji pustaka lintas-platform, Anda dijamin bahwa semua yang Anda butuhkan sudah ada di lingkungan runtime.

mikera
sumber
3

Saya pikir Anda punya pilihan itu:

1) gunakan salah satu a

  • dikompilasi atau
  • bahasa yang ditafsirkan.

2) Bagaimana Anda akan mengemas dan mengirimkan kode Anda?

  • Satu "front-end", satu biner / skrip?
  • Satu "front-end", banyak binari / skrip?
  • Banyak "ujung depan", banyak binari / skrip?

Pilihan-pilihan itu memengaruhi kinerja, visibilitas dan distribusi kode sumber.

Apakah Anda keberatan memberikan kode sumber Anda? Bahasa yang dikompilasi mungkin cocok untuk Anda. Bahasa yang dikompilasi tampaknya berkinerja lebih baik dalam tolok ukur mikro daripada bahasa yang ditafsirkan (bahkan JIT). Juga jika Anda bergantung pada lingkungan runtime seperti Java, Python, Ruby dll kode Anda mungkin lebih sulit untuk didistribusikan.

Saya menemukan bahwa aplikasi desktop lintas platform paling populer digunakan untuk "Satu front-end, banyak biner" menggunakan C / C ++ dan perpustakaan widget lintas platform, mis. Kapasitas, Blender, Firefox, Google Earth, OpenOffice, Skype, Songbird, Stellarium, VLC.

Program Lenny
sumber
Anda membuat kesalahan saat mendaftar Skype dalam contoh Anda, tetapi aplikasi yang sangat populer ini sebenarnya dimulai dengan Delphi / Pascal di Windows dan porting dengan C / C ++ di linux dan Objective-C di MacOS / iPhone
Maksee
Saya pikir dikotomi dikompilasi / ditafsirkan sedikit menyesatkan - Jawa dalam beberapa hal juga tidak karena dikompilasi ke bytecode mesin-independen untuk distribusi (yaitu tidak lagi dalam bentuk sumber), dan kemudian JIT dikompilasi kemudian ke kode asli pada mesin apa pun yang Anda jalankan. Ini sepenuhnya lintas platform, tetapi juga memberi Anda kinerja asli, ditambah Anda tidak harus mendistribusikan sumber Anda jika Anda tidak mau. win / win / win.
mikera
0

Saya akan bilang tidak. python dan ruby ​​banyak digunakan dan begitu juga javascript untuk sisi klien dan server. Saya pribadi menggunakan .NET dan tidak punya masalah menjalankannya di mac dan linux (sambil mengembangkan di windows)

-edit- Saya mendengar LLVM menjadi populer tetapi masih sangat kecil. Itu akan memungkinkan Anda untuk menggunakan lintas platform C ++ dalam satu biner. Tampaknya itu akan dieksekusi pada browser tetapi saya belum melihat contoh di mana itu memungkinkan Anda untuk mengubah dom atau memanggil javascript.


sumber
LLVM bukan tentang berjalan di browser ... Apakah Anda berbicara tentang emscripten?
Camilo Martin
periksa tanggalnya. 4 tahun lalu emscripten tidak ada. NativeClient seharusnya berfungsi (dan sudah menjalankan malapetaka) tetapi tidak.
Sekarang saya melihat tanggalnya, tetapi tetap saja, LLVM tidak pernah secara khusus tentang browser, bukan?
Camilo Martin
1
Nggak. Meskipun saya berharap saya bisa menulis C ++ atau dukungan LLVM bahasa lain alih-alih JS ...
Dalam hal itu ...
Camilo Martin
-1

Jika Anda membawa platform seluler ke dalam campuran, maka setidaknya Anda juga harus memasukkan kompilasi ulang. Misalnya android, j2me.

Conor
sumber