Programiranje

Javine tri vrste prenosljivosti

Java je v programski skupnosti ustvarila veliko navdušenja, ker obljublja prenosni aplikacij in programčkov. Java dejansko ponuja tri različne vrste prenosljivosti: prenosljivost izvorne kode, prenosljivost arhitekture procesorja in prenosljivost OS / GUI. Dejstvo, da obstajajo tri različne vrste prenosljivosti, je ključnega pomena, ker samo ena od teh vrst ogroža Microsoft. Od Microsofta lahko pričakujemo, da bo spodkopaval to vrsto prenosljivosti, medtem ko bo sprejel drugi dve - ves čas pa je trdil, da podpira Javo. Razumevanje treh vrst prenosljivosti in njihovega sodelovanja je ključnega pomena za razumevanje grožnje Microsoftu in možnih Microsoftovih odzivov.

Preden se posvetimo podrobnostim vsake od teh treh vrst prenosljivosti, si oglejmo nekaj temeljnih izrazov.

Opredelitev nekaterih izrazov

V tem članku so uporabljeni naslednji izrazi:

Endianizem
Endianizem se nanaša na vrstni red shranjevanja bajtov v večbajtni količini v danem CPU. Nepodpisani kratki 256 (decimalni) na primer zahteva dva bajta pomnilnika: 0x01 in 0x00. Ta dva bajta lahko shranite v katerem koli vrstnem redu: 0x01, 0x00 ali 0x00, 0x01. Endianizem določa vrstni red shranjevanja obeh bajtov. Za praktične namene je endianizem ponavadi pomemben le, če si morajo CPU z različnimi endianizmi deliti podatke.
Java
Java je več različnih tehnologij, združenih skupaj - programski jezik Java, navidezni stroj Java (JVM) in knjižnice razredov, povezane z jezikom. Ta članek obravnava vse te vidike.
Navidezni stroj Java (JVM)

JVM je namišljeni CPU, za katerega večina prevajalnikov Java oddaja kodo. Podpora za ta namišljeni CPU je tisto, kar omogoča izvajanje programov Java, ne da bi jih bilo treba znova prevesti na različne CPU. Nič v programskem jeziku Java ne zahteva, da se izvorna koda Java prevede v kodo za JVM namesto v izvorno objektno kodo.

Dejansko sta Asymetrix in Microsoft napovedala prevajalnike Java, ki oddajajo izvorne programe Microsoft Windows. (Za dodatne informacije glejte razdelek Viri tega članka.)

J-koda
Koda J je izhod, ki ga oddaja večina prevajalnikov Java v datoteke razredov. Kodo J lahko razumemo kot objektno kodo za navidezni stroj Java.
Prenosljivost
Prenosljivost se nanaša na zmožnost izvajanja programa na različnih strojih. Zagon določenega programa na različnih strojih lahko zahteva različne količine dela (na primer brez kakršnega koli dela, ponovnega prevajanja ali majhnih sprememb izvorne kode). Ko se ljudje nanašajo na programe Java in programčke kot prenosne, ponavadi pomenijo, da se programi in programčki izvajajo na različnih vrstah računalnikov brez sprememb (na primer ponovna kompilacija ali prilagajanje izvorne kode).

Zdaj, ko smo zajeli nekaj bistvenih izrazov, bomo razložili vsako od treh vrst prenosljivosti Java.

Java kot jezik: prenosljivost izvorne kode

Java kot programski jezik zagotavlja najpreprostejšo in najbolj znano obliko prenosljivosti - prenosljivost izvorne kode. Dani program Java bi morali ustvarijo enake rezultate, ne glede na osnovni CPU, operacijski sistem ali prevajalnik Java. Ta ideja ni nova; jeziki, kot sta C in C ++, že vrsto let ponujajo priložnost za to stopnjo prenosljivosti. Vendar pa C in C ++ ponujata tudi številne priložnosti za ustvarjanje neprenosljive kode. Razen če programi, napisani v jeziku C in C ++, od začetka niso zasnovani za prenosljivost, je zmožnost premikanja na različne stroje bolj teoretična kot praktična. C in C ++ puščata nedoločene podrobnosti, kot so velikost in endianism atomskih podatkovnih tipov, vedenje matematike s plavajočo vejico, vrednost neinicializiranih spremenljivk in vedenje pri dostopu do osvobojenega pomnilnika.

Skratka, čeprav je sintaksa C in C ++ dobro opredeljena, semantika ni. Ta pomenska ohlapnost omogoča, da se en blok izvorne kode C ali C ++ prevede v programe, ki dajejo različne rezultate, če se izvajajo na različnih CPU-jih, operacijskih sistemih, prevajalnikih in celo na eni kombinaciji prevajalnika / CPU / OS, odvisno od različnih nastavitev prevajalnika. (Glejte stransko vrstico Sintaksa v primerjavi s semantiko za razpravo o razlikah med semantiko in skladnjo.)

Java je drugačna. Java zagotavlja veliko bolj strogo semantiko in manj prepušča implementatorju. Za razliko od C in C ++ ima Java za atomske tipe določene velikosti in endijanstvo, pa tudi vedenje s plavajočo vejico.

Poleg tega Java opredeljuje več vedenja kot C in C ++. V Javi se pomnilnik ne sprosti, dokler ni več dostopen do njega in jezik nima neinicializiranih spremenljivk. Vse te funkcije pomagajo zožiti razlike v vedenju programa Java od platforme do platforme in izvedbe do izvedbe. Tudi brez JVM lahko pričakujemo, da se bodo programi, napisani v jeziku Java, veliko bolje priklopili (po ponovnem prevajanju) na različne CPU in operacijske sisteme kot enakovredni programi C ali C ++.

Na žalost imajo funkcije, zaradi katerih je Java tako prenosna, slabost. Java prevzame 32-bitno napravo z 8-bitnimi bajti in matematiko s plavajočo vejico IEEE754. Stroji, ki ne ustrezajo temu modelu, vključno z 8-bitnimi mikrokrmilniki in superračunalniki Cray, ne morejo učinkovito izvajati Jave. Zaradi tega bi morali pričakovati, da se C in C ++ uporabljata na več platformah kot jezik Java. Prav tako bi morali pričakovati, da bodo programi Java lažje prenašali kot C ali C ++ med tistimi platformami, ki podpirajo obe.

Java kot navidezni stroj: prenosljivost procesorja

Večina prevajalnikov proizvaja objektno kodo, ki deluje na eni družini CPU (na primer družina Intel x86). Tudi prevajalniki, ki proizvajajo objektno kodo za več različnih družin CPU (na primer x86, MIPS in SPARC), naenkrat izdelajo le objektno kodo za en tip CPU; če potrebujete objektno kodo za tri različne družine CPU, morate trikrat prevesti izvorno kodo.

Trenutni prevajalniki Java so drugačni. Namesto da bi ustvarili izhodne podatke za vsako različno družino CPU, na kateri naj bi se zagnal program Java, trenutni prevajalniki Java izdelajo objektno kodo (imenovano J-koda) za CPU, ki še ne obstaja.

(Sonce ima napovedal CPU, ki bo izvršil J-kodo neposredno, vendar nakazuje, da se bodo prvi vzorci Java čipov pojavili šele v drugi polovici letošnjega leta; popolna proizvodnja takšnih čipov se bo začela prihodnje leto. Jedrna tehnologija picoJavaI podjetja Sun Microelectronics bo v središču Sunjeve lastne procesorske linije microJava, ki bo namenjena omrežnim računalnikom. Imetniki licenc, kot so LG Semicon, Toshiba Corp. in Rockwell Collins Inc., načrtujejo tudi proizvodnjo čipov Java, ki temeljijo na jedru picoJavaI.)

Za vsak dejanski CPU, na katerem naj bi se izvajali programi Java, interpreter Java ali navidezni stroj "izvrši" kodo J. Ta neobstoječi CPU omogoča, da se ista objektna koda izvaja na katerem koli CPU, za katerega obstaja tolmač Java.

Izdelava izhodnih podatkov za namišljeni CPU pri Javi ni novost: prevajalniki Pascala UCSD (Univerza v Kaliforniji v San Diegu) so pred leti izdelali kodo P; Limbo, novi programski jezik, ki se razvija pri Lucent Technologies, proizvaja objektno kodo za namišljeni CPU; in Perl ustvari vmesno predstavitev programa in izvrši to vmesno predstavitev, namesto da bi ustvaril izvorno izvedljivo kodo. Internetno podkovani JVM se razlikuje od teh drugih virtualnih izvedb CPU s tem, da je namerno zasnovan tako, da omogoča generiranje dokazljivo varne kode brez virusov. Pred internetom virtualnih računalnikov ni bilo treba dokazovati, da so programi varni in brez virusov. Ta varnostna funkcija v kombinaciji z veliko boljšim razumevanjem, kako hitro izvajati programe za namišljene CPU, je privedla do hitrega, širokega sprejemanja JVM. Danes ima večina glavnih operacijskih sistemov, vključno z OS / 2, MacOS, Windows 95 / NT in Novell Netware, vgrajeno podporo za programe s kodo J ali pa se pričakuje, da jih bodo imeli.

JVM, ki je v bistvu namišljen CPU, je neodvisen od jezika izvorne kode. Jezik Java lahko ustvari kodo J. Toda tudi Ada95 lahko. Dejansko so tolmači, ki jih gosti J-koda, napisani za več jezikov, vključno z BASIC, Forth, Lisp in Scheme, in skoraj zagotovo je, da bodo izvedbe drugih jezikov v prihodnosti oddajale J-kodo. Ko je izvorna koda pretvorjena v kodo J, razlagalnik Java ne more ugotoviti, kateri programski jezik je ustvaril kodo J, ki jo izvaja. Rezultat: prenosljivost med različnimi procesorji.

Prednost sestavljanja programov (v katerem koli jeziku) v kodo J je, da ista koda deluje na različnih družinah CPU-jev. Slaba stran je, da J-koda ne deluje tako hitro kot izvorna koda. Za večino aplikacij to ne bo pomembno, toda za najvišje programe višjega razreda - tiste, ki potrebujejo do zadnjega odstotka CPU - stroški delovanja J-kode ne bodo sprejemljivi.

Java kot navidezni OS in GUI: prenosljivost OS

Večina programov Microsoft Windows, napisanih v jeziku C ali C ++, se tudi po ponovnem prevajanju ne prenese zlahka v okolja Macintosh ali Unix. Tudi če programerji še posebej pazijo na semantične pomanjkljivosti v C ali C ++, je vrata težko. Ta težava se pojavi, tudi če vrata v operacijski sistem, ki ni Windows, potekajo brez spreminjanja CPU-jev. Zakaj težava?

Po odpravi semantičnih težav v C in C ++ in težavah s prenosom CPU se morajo programerji še vedno spoprijeti z različnimi operacijskimi sistemi in različnimi klici API-ja GUI.

Programi Windows operacijski sistem zelo različno kličejo kot Macintosh in Unix. Ti klici so ključnega pomena za pisanje netrivialnih programov, zato bo prenos še vedno težaven, dokler se ne reši ta težava s prenosljivostjo.

Java reši to težavo z zagotavljanjem nabora knjižničnih funkcij (ki jih vsebujejo knjižnice, ki jih dobavlja Java, kot je awt, util, in lang), ki govorijo z namišljenim OS in namišljenim GUI. Tako kot JVM predstavlja navidezni CPU, tudi knjižnice Java predstavljajo navidezni OS / GUI. Vsaka implementacija Java ponuja knjižnice, ki izvajajo ta navidezni OS / GUI. Programi Java, ki uporabljajo te knjižnice za dokaj enostavno zagotavljanje potrebnih funkcijskih vrat OS in GUI.

Uporaba knjižnice prenosljivosti namesto izvornih klicev OS / GUI ni nova ideja. Izdelki, kot sta programska oprema Galaxy Visix in Zinc Protools Software, zagotavljajo to zmožnost za C in C ++. Drug pristop, ki mu Java ne sledi, je, da za glavnega izberete en OS / GUI in zagotovite knjižnice ovojnic, ki podpirajo ta glavni OS / GUI na vseh računalnikih, na katere želite pristati. Težava pri pristopu glavnega OS / GUI je, da so prenesene aplikacije na drugih strojih pogosto videti tuje. Uporabniki sistema Macintosh so se na primer pritoževali nad najnovejšo različico programa Microsoft Word za Macintosh, ker je bil videti in se obnašal kot program Windows, ne kot program Macintosh. Na žalost ima tudi pristop Java težave.

Java je v svojih knjižnicah OS / GUI zagotovila najmanj skupni imenovalec. Funkcije, ki so na voljo samo v enem OS / GUI, na primer pogovorna okna z zavihki, so bile izpuščene. Prednost tega pristopa je v tem, da je preslikava skupne funkcionalnosti v domači OS / GUI dokaj enostavna in lahko s skrbnostjo zagotavlja aplikacije, ki delujejo po pričakovanjih na večini OS / GUI. Pomanjkljivost je, da bo aplikacijam v domačem načinu na voljo funkcionalnost, ki aplikacijam Java ni na voljo. Včasih se bodo razvijalci lahko izognili temu s podaljšanjem AWT; drugič ne bodo. V tistih primerih, ko je zaželena funkcionalnost z rešitvami nedosegljiva, se razvijalci najverjetneje odločijo za pisanje neprenosne kode.

Koga briga prenosljivost?

Tri glavne volilne enote skrbijo za prenosljivost: razvijalci, končni uporabniki in oddelki za informacijski sistem.

Razvijalci: Priložnosti in grožnje so velike

Razvijalci so v veliki meri zainteresirani za ustvarjanje prenosne programske opreme. Prenosna programska oprema jim omogoča, da podpirajo več platform, kar vodi do večje baze potencialnih kupcev. Vendar pa enaka prenosljivost, ki razvijalcem omogoča ciljanje na nove trge, tudi konkurentom omogoča, da ciljajo na njihov trg.

Na kratko, prenosljivost Java potiska trg aplikacijske programske opreme stran od ločenih trgov, ki temeljijo na različnih operacijskih sistemih in grafičnih uporabniških vmesnikih, na en velik trg. Na trenutnem trgu programske opreme je Microsoft na primer sila primeren za trge aplikacijske programske opreme Windows in Macintosh, vendar skoraj ni prisoten na trgih OS / 2 in Unix. Ta razdelitev podjetjem na trgih OS / 2 in Unix omogoča, da Microsofta ne upoštevajo kot konkurenta. Java tem podjetjem olajša konkuriranje na trgu Windows, hkrati pa Microsoftu omogoča lažji vstop na trge OS / 2 in Unix.

Uporabniki: posredni upravičenci do prenosljivosti

Uporabnikom je vseeno za prenosljivost. Če je zaradi prenosljivosti njihovo življenje lažje in prijetnejše, potem so vsi za to; če ne, niso. Prenosljivost sicer ima nekaj pozitivnih učinkov za uporabnike, vendar so nekoliko posredni. Pozitivni učinki:

$config[zx-auto] not found$config[zx-overlay] not found