Tiga jenis mudah alih Java

Java telah menghasilkan banyak kegembiraan dalam komuniti pengaturcaraan kerana menjanjikan aplikasi dan applet mudah alih . Sebenarnya, Java menyediakan tiga jenis portabiliti yang berbeza: portabiliti kod sumber, portabiliti arsitektur CPU, dan portabiliti OS / GUI. Fakta bahawa terdapat tiga jenis mudah alih yang penting, kerana hanya satu dari jenis ini yang menjadi ancaman kepada Microsoft. Microsoft diharapkan dapat melumpuhkan satu jenis portabiliti sambil merangkul dua yang lain - sementara itu mengaku menyokong Java. Memahami tiga jenis mudah alih dan bagaimana mereka bekerjasama sangat penting untuk memahami ancaman terhadap Microsoft, dan kemungkinan tindak balas Microsoft.

Sebelum melihat butiran mengenai ketiga-tiga jenis mudah alih ini, mari kita tinjau beberapa syarat asas.

Mendefinisikan beberapa istilah

Istilah berikut digunakan dalam artikel ini:

Endianisme
Endianisme merujuk kepada susunan penyimpanan byte dalam kuantiti multibait dalam CPU tertentu. Sebagai contoh, pendek 256 yang tidak ditandatangani (perpuluhan) memerlukan dua bait penyimpanan: 0x01 dan 0x00. Kedua-dua bait ini boleh disimpan dalam urutan: 0x01, 0x00atau 0x00, 0x01. Endianisme menentukan susunan di mana kedua-dua bait disimpan. Untuk tujuan praktikal, endianisme biasanya penting hanya apabila CPU yang berlainan endianisme mesti berkongsi data.
Jawa
Java adalah beberapa teknologi yang dikemas bersama - bahasa pengaturcaraan Java, mesin maya Java (JVM), dan perpustakaan kelas yang terkait dengan bahasa tersebut. Artikel ini membincangkan semua aspek ini.
Mesin maya Java (JVM)

JVM adalah CPU khayalan yang mana kebanyakan penyusun Java mengeluarkan kod. Sokongan untuk CPU khayalan inilah yang memungkinkan program Java berjalan tanpa dikompilasi ulang pada CPU yang berlainan. Tidak ada dalam bahasa pengaturcaraan Java yang memerlukan kod sumber Java dikompilasi menjadi kod untuk JVM dan bukannya menjadi kod objek asli.

Sebenarnya, Asymetrix dan Microsoft telah mengumumkan penyusun Java yang memancarkan aplikasi Microsoft Windows asli. (Lihat bahagian Sumber artikel ini untuk maklumat tambahan.)

Kod-J
J-code adalah output yang dikeluarkan oleh kebanyakan penyusun Java ke dalam fail kelas. J-code boleh dianggap sebagai kod objek untuk mesin maya Java.
Kemudahalihan
Kemudahalihan merujuk kepada kemampuan menjalankan program pada mesin yang berbeza. Menjalankan program tertentu pada mesin yang berbeza boleh memerlukan jumlah kerja yang berbeza (misalnya, tidak ada pekerjaan sama sekali, mengompilasi ulang, atau membuat perubahan kecil pada kod sumber). Apabila orang menyebut aplikasi Java dan applet sebagai mudah alih, mereka biasanya bermaksud aplikasi dan applet berjalan pada berbagai jenis mesin tanpa perubahan (seperti penyusunan semula atau penyesuaian pada kod sumber).

Sekarang kita telah merangkumi beberapa syarat penting, kita akan menerangkan setiap tiga jenis kebolehmampuan Java.

Java sebagai bahasa: mudah alih kod sumber

Sebagai bahasa pengaturcaraan, Java menyediakan bentuk mudah alih yang paling mudah dan biasa - mudah alih kod sumber. Program Java yang diberikan harusmenghasilkan hasil yang serupa tanpa mengira CPU, sistem operasi, atau penyusun Java yang mendasarinya. Idea ini bukanlah perkara baru; bahasa seperti C dan C ++ telah memberi peluang untuk tahap mudah alih ini selama bertahun-tahun. Walau bagaimanapun, C dan C ++ juga memberikan banyak peluang untuk membuat kod yang tidak mudah alih juga. Kecuali program yang ditulis dalam C dan C ++ dirancang agar mudah alih dari awal, kemampuan untuk berpindah ke mesin yang berbeza adalah lebih teori daripada praktikal. C dan C ++ memberikan perincian yang tidak ditentukan seperti ukuran dan endianisme jenis data atom, tingkah laku matematik floating-point, nilai pemboleh ubah yang belum dimulakan, dan tingkah laku ketika memori yang dibebaskan diakses.

Ringkasnya, walaupun sintaks C dan C ++ ditakrifkan dengan baik, semantik tidak. Kelonggaran semantik ini membolehkan satu blok kod sumber C atau C ++ untuk dikompilasi ke program yang memberikan hasil yang berbeza ketika dijalankan pada CPU, sistem operasi, penyusun yang berbeza, dan bahkan pada gabungan penyusun / CPU / OS tunggal, bergantung pada pelbagai tetapan penyusun. (Lihat sintaks bar sisi berbanding semantik untuk perbincangan mengenai perbezaan antara semantik dan sintaks.)

Java berbeza. Java menyediakan semantik yang jauh lebih ketat dan tidak lagi bergantung kepada pelaksana. Tidak seperti C dan C ++, Java mempunyai ukuran dan endianisme yang ditentukan untuk jenis atom, serta tingkah laku floating-point yang ditentukan.

Selain itu, Java mentakrifkan lebih banyak tingkah laku daripada C dan C ++. Di Jawa, memori tidak dibebaskan sehingga tidak dapat diakses lagi, dan bahasa tidak memiliki pemboleh ubah yang belum diinisialisasi. Semua ciri ini membantu mempersempit variasi dalam tingkah laku program Java dari platform ke platform dan pelaksanaan hingga pelaksanaan. Walaupun tanpa JVM, program yang ditulis dalam bahasa Java diharapkan dapat disalurkan (setelah dikompilasi ulang) ke CPU dan sistem operasi yang berbeza jauh lebih baik daripada program C atau C ++ yang setara.

Sayangnya, ciri-ciri yang menjadikan Java begitu mudah alih mempunyai kelemahan. Java menggunakan mesin 32-bit dengan bait 8-bit dan matematik floating-point IEEE754. Mesin yang tidak sesuai dengan model ini, termasuk mikrokontroler 8-bit dan superkomputer Cray, tidak dapat menjalankan Java dengan cekap. Atas sebab ini, kita seharusnya mengharapkan C dan C ++ digunakan pada lebih banyak platform daripada bahasa Java. Kita juga harus mengharapkan program Java lebih mudah daripada C atau C ++ antara platform yang menyokong kedua-duanya.

Java sebagai mesin maya: mudah alih CPU

Sebilangan besar penyusun menghasilkan kod objek yang dijalankan pada satu keluarga CPU (contohnya, keluarga Intel x86). Bahkan penyusun yang menghasilkan kod objek untuk beberapa keluarga CPU yang berbeza (contohnya, x86, MIPS, dan SPARC) hanya menghasilkan kod objek untuk satu jenis CPU pada satu masa; jika anda memerlukan kod objek untuk tiga keluarga CPU yang berbeza, anda mesti menyusun kod sumber anda tiga kali.

Penyusun Java semasa berbeza. Daripada menghasilkan output untuk setiap keluarga CPU yang berbeda di mana program Java dimaksudkan untuk dijalankan, penyusun Java saat ini menghasilkan kod objek (disebut J-code) untuk CPU yang belum ada.

(Sun telah mengumumkan CPU yang akan menjalankan kode-J secara langsung, tetapi menunjukkan sampel pertama cip Java tidak akan muncul hingga paruh kedua tahun ini; pengeluaran penuh cip tersebut akan bermula tahun depan. Teknologi teras picoJavaI Sun Microelectronics akan menjadi inti barisan pemproses microJava milik Sun, yang akan menyasarkan komputer rangkaian. Pemegang lesen seperti LG Semicon, Toshiba Corp, dan Rockwell Collins Inc. juga merancang untuk menghasilkan cip Java berdasarkan inti picoJavaI.)

Untuk setiap CPU nyata di mana program Java dimaksudkan untuk dijalankan, juru bahasa Java, atau mesin maya, "mengeksekusi" kod-J. CPU yang tidak ada ini membolehkan kod objek yang sama berjalan pada CPU mana pun yang ada jurubahasa Java.

Menghasilkan output untuk khayalan CPU bukanlah perkara baru dengan Java: Penyusun Pascal UCSD (University of California di San Diego) menghasilkan kod-P tahun lalu; Limbo, bahasa pengaturcaraan baru yang sedang dikembangkan di Lucent Technologies, menghasilkan kod objek untuk CPU khayalan; dan Perl membuat perwakilan program perantaraan dan melaksanakan perwakilan perantaraan ini dan bukannya membuat kod asli yang dapat dilaksanakan. JVM yang mahir Internet membezakan dirinya dari implementasi CPU maya yang lain dengan sengaja dirancang untuk membolehkan penjanaan kod yang selamat dan bebas virus. Sebelum Internet, tidak perlu mesin maya membuktikan program selamat dan bebas virus. Ciri keselamatan ini, digabungkan dengan pemahaman yang jauh lebih baik tentang bagaimana melaksanakan program untuk CPU khayalan dengan cepat, telah menyebabkan cepat,penerimaan JVM secara meluas. Hari ini, kebanyakan sistem operasi utama, termasuk OS / 2, MacOS, Windows 95 / NT, dan Novell Netware, sama ada mempunyai, atau dijangka mempunyai, sokongan terbina dalam untuk program kod J.

JVM, yang pada dasarnya merupakan CPU khayalan, tidak bergantung pada bahasa kod sumber. Bahasa Java dapat menghasilkan kod-J. Tetapi ada Ada95. Sebenarnya, jurubahasa yang dihoskan oleh kod J telah ditulis untuk beberapa bahasa, termasuk BASIC, Forth, Lisp, dan Skema, dan hampir pasti bahawa pelaksanaan bahasa lain akan mengeluarkan kod-J di masa depan. Setelah kod sumber telah diubah menjadi kod-J, jurubahasa Java tidak dapat mengetahui bahasa pengaturcaraan apa yang membuat kod-J yang dijalankannya. Hasilnya: mudah alih antara CPU yang berbeza.

Manfaat untuk menyusun program (dalam bahasa apa pun) ke kod J adalah bahawa kod yang sama dijalankan pada keluarga CPU yang berbeza. Kelemahannya adalah bahawa J-code tidak berjalan secepat kod asli. Untuk kebanyakan aplikasi, ini tidak akan menjadi masalah, tetapi untuk program kelas atas tertinggi - yang memerlukan setiap peratus terakhir CPU - kos prestasi kod-J tidak akan diterima.

Java sebagai OS maya dan GUI: mudah alih OS

Sebilangan besar program Microsoft Windows yang ditulis dalam C atau C ++ tidak mudah dibawa ke persekitaran Macintosh atau Unix, walaupun setelah dikompilasi ulang. Walaupun pengaturcara berhati-hati untuk menangani kelemahan semantik dalam C atau C ++, portnya sukar. Kesukaran ini berlaku walaupun port ke sistem operasi bukan Windows berlaku tanpa menukar CPU. Mengapa kesukaran itu?

Setelah menghilangkan masalah semantik dalam C dan C ++ dan masalah port CPU, pengaturcara masih harus menangani sistem operasi yang berbeza dan panggilan API GUI yang berbeza.

Program Windows membuat panggilan yang sangat berbeza ke sistem operasi daripada program Macintosh dan Unix. Panggilan ini sangat penting untuk menulis program yang tidak remeh, jadi sehingga masalah mudah alih ini ditangani, penghantaran akan tetap sukar.

Java menyelesaikan masalah ini dengan menyediakan satu set fungsi perpustakaan (yang terkandung di perpustakaan Java yang dibekalkan seperti awt, util, dan lang) yang bercakap kepada OS khayalan dan GUI khayalan. Sama seperti JVM menghadirkan CPU maya, perpustakaan Java menyajikan OS / GUI maya. Setiap pelaksanaan Java menyediakan perpustakaan yang menerapkan OS / GUI maya ini. Program Java yang menggunakan perpustakaan ini untuk menyediakan port fungsi OS dan GUI yang diperlukan dengan mudah.

Menggunakan perpustakaan portabiliti dan bukannya panggilan OS / GUI asli bukanlah idea baru. Produk seperti Visix Software's Galaxy dan Protools Software's Zinc menyediakan kemampuan ini untuk C dan C ++. Pendekatan lain, yang tidak diikuti oleh Java, adalah memilih OS / GUI tunggal sebagai induk dan menyediakan perpustakaan pembungkus yang menyokong OS / GUI induk ini pada semua mesin yang ingin anda port. Masalah dengan pendekatan master OS / GUI adalah bahawa aplikasi port sering kelihatan asing pada mesin lain. Pengguna Macintosh, misalnya, mengeluh tentang versi Microsoft Word untuk Macintosh baru-baru ini kerana ia kelihatan dan berkelakuan seperti program Windows, bukan seperti program Macintosh. Sayangnya, pendekatan yang diambil Java juga mempunyai masalah.

Java telah menyediakan fungsi penyebut paling umum dalam perpustakaan OS / GUI. Ciri yang tersedia hanya pada satu OS / GUI, seperti kotak dialog bertab, dihilangkan. Kelebihan pendekatan ini adalah memetakan fungsi umum ke OS / GUI asli cukup mudah dan, dengan berhati-hati, dapat menyediakan aplikasi yang berfungsi seperti yang diharapkan pada kebanyakan OS / GUI. Kelemahannya ialah terdapat fungsi yang tersedia untuk aplikasi mod asli yang tidak tersedia untuk aplikasi Java. Kadang kala pembangun dapat menyelesaikannya dengan memperluas AWT; lain kali mereka tidak akan. Dalam keadaan di mana fungsi yang diinginkan tidak dapat dicapai dengan penyelesaian, pemaju kemungkinan besar akan memilih untuk menulis kod yang tidak mudah alih.

Siapa yang mengambil berat tentang mudah alih?

Tiga konstituen utama mementingkan kebolehkerjaan: pemaju, pengguna akhir, dan jabatan MIS.

Pembangun: Peluang dan ancaman semakin besar

Pembangun mempunyai kepentingan untuk membuat perisian mudah alih. Sebaliknya, perisian mudah alih membolehkan mereka menyokong lebih banyak platform, yang membawa kepada jumlah pelanggan berpotensi yang lebih besar. Walau bagaimanapun, kemudahan yang sama yang membolehkan pemaju menargetkan pasaran baru juga membolehkan pesaing mensasarkan pasaran mereka.

Singkatnya, portabilitas Java mendorong pasar perisian aplikasi dari pasar terpisah berdasarkan berbagai OS dan GUI dan menuju ke satu pasar besar. Di pasar perisian semasa, misalnya, Microsoft adalah kekuatan yang harus diperhitungkan di pasar perisian aplikasi Windows dan Macintosh, tetapi hampir tidak ada di pasar OS / 2 dan Unix. Pemisahan ini membolehkan syarikat di pasaran OS / 2 dan Unix mengabaikan Microsoft sebagai pesaing. Java mempermudah syarikat-syarikat ini untuk bersaing di pasar Windows, tetapi juga memungkinkan Microsoft masuk lebih mudah ke pasar OS / 2 dan Unix.

Pengguna: Penerima kemudahan mudah alih tidak langsung

Pengguna tidak peduli dengan mudah dibawa, Sekiranya mudah dibawa menjadikan hidup mereka lebih mudah dan menyenangkan, maka semuanya sesuai untuk mereka; jika tidak, mereka tidak. Kemudahalihan mempunyai beberapa kesan positif bagi pengguna, tetapi ini agak tidak langsung. Kesan positif: