Programiranje

Uvod v skriptiranje v Javi, 1. del

Odlomek iz Skriptiranje v Javi: jeziki, okviri in vzorci.

Avtor Dejan Bosanac

Objavil Addison Wesley Professional

ISBN-10: 0-321-32193-6

ISBN-13: 978-0-321-32193-0

Do nedavnega so bili samo hardcore navdušeni nad skriptiranjem na platformi Java, toda to je bilo še preden je Sun okrepil podporo JRE za dinamično natipkane jezike, kot so Python, Ruby in JavaScript. V tem dvodelnem izvlečku iz prihajajočega skriptiranja v Javi: jeziki, okviri in vzorci (Addison Wesley Professional, avgust 2007) se Dejan Bosanac zoži, kaj razlikuje večino skriptnih jezikov od programskega jezika, kot je Java, nato pa razloži, zakaj je skriptiranje časovno vreden dodatek k vašemu programu programiranja Java.

Uvod v skriptiranje v Javi: jeziki, okviri in vzorci

Glavna tema te knjige je sinergija skriptnih tehnologij in platforme Java. Opisujem projekte, ki jih lahko razvijalci Java uporabljajo za ustvarjanje močnejšega razvojnega okolja, in nekatere prakse, zaradi katerih je skriptiranje uporabno.

Preden začnem razpravljati o uporabi skriptov v svetu Jave, povzamem nekaj teorije skriptov na splošno in njegovo uporabo v infrastrukturi informacijske tehnologije. To je tema prvih dveh poglavij knjige in nam daje boljši pogled na skriptno tehnologijo in na to, kako je ta tehnologija lahko koristna v okviru platforme Java.

Za začetek moramo opredeliti, kaj so skriptni jeziki, in opisati njihove značilnosti. Njihove značilnosti močno določajo vloge, v katerih bi jih lahko (morali) uporabljati. V tem poglavju pojasnjujem, kaj pomeni skriptni jezik sredstva in razpravljali o njihovih osnovnih značilnostih

Na koncu tega poglavja razpravljam o razlikah med skriptnimi in sistemsko programskimi jeziki ter o tem, kako so te razlike primerne za določene vloge v razvoju.

Ozadje

Opredelitev skriptnega jezika je nejasna in včasih v neskladju s tem, kako se skriptni jeziki uporabljajo v resničnem svetu, zato je dobro povzeti nekaj osnovnih konceptov o programiranju in računalništvu na splošno. Ta povzetek predstavlja osnovo, potrebno za opredelitev skriptnih jezikov in razpravo o njihovih značilnostih.

Začnimo od začetka. Procesorji se izvajajo strojna navodila, ki delujejo na podatkih bodisi v registrih procesorjev bodisi v zunanjem pomnilniku. Preprosto povedano, strojno navodilo je sestavljeno iz zaporedja binarnih številk (0 in 1 s) in je specifično za določen procesor, na katerem deluje. Strojna navodila so sestavljena iz operacijska koda - sporočanje procesorju, katero operacijo mora izvesti, in operandi predstavlja podatke, na katerih naj se izvede operacija.

Na primer, razmislite o preprostem postopku dodajanja vrednosti iz enega registra vrednosti, ki je v drugem. Zdaj si predstavljamo preprost procesor z 8-bitnim naborom ukazov, kjer prvih 5 bitov predstavlja operacijsko kodo (recimo 00111 za dodajanje vrednosti registra), registre pa naslavlja 3-bitni vzorec. Ta preprost primer lahko zapišemo na naslednji način:

00111 001 010

V tem primeru sem uporabil 001 in 010 za naslavljanje registrov številka ena in dva (R1 oziroma R2) procesorja.

Ta osnovni način računalništva je dobro znan že desetletja in prepričan sem, da ga poznate. Različne vrste procesorjev imajo različne strategije glede tega, kako bi morali izgledati njihovi nabori ukazov (arhitektura RISC ali CISC), toda z vidika razvijalca programske opreme je edino pomembno dejstvo, da je procesor sposoben izvajati samo binarna navodila. Ne glede na uporabljeni programski jezik je nastala aplikacija zaporedje strojnih navodil, ki jih izvaja procesor.

Sčasoma se je spreminjalo, kako ljudje ustvarjajo vrstni red, v katerem se izvajajo strojna navodila. To urejeno zaporedje strojnih navodil se imenuje a računalniški program. Ker postaja strojna oprema vse bolj dostopna in zmogljivejša, se pričakovanja uporabnikov povečujejo. Celoten namen razvoja programske opreme kot znanstvene discipline je zagotoviti mehanizme, ki razvijalcem omogočajo izdelavo bolj zapletenih aplikacij z enakim (ali celo manj) trudom kot prej.

Nabor navodil določenega procesorja se imenuje njegov strojni jezik. Strojni jeziki so razvrščeni kot programski jeziki prve generacije. Programi, napisani na ta način, so običajno zelo hitri, ker so optimizirani za določeno arhitekturo procesorja. Toda kljub tej prednosti je ljudem težko (če ne celo nemogoče) pisati velike in varne programe v strojnih jezikih, ker se ljudje ne znajo spoprijeti z velikimi zaporedji 0 in 1.

V poskusu rešitve te težave so razvijalci začeli ustvarjati simbole za določene binarne vzorce in s tem montažni jeziki so bili uvedeni. Montažni jeziki so programske jezike druge generacije. Navodila v montažnih jezikih so le eno stopnjo nad strojnimi navodili, saj nadomeščajo binarne števke z lahkopomljivimi ključnimi besedami, kot so ADD, SUB itd. Kot tak lahko prejšnji primer preprostih navodil prepišete v montažnem jeziku, kot sledi:

DODAJ R1, R2

V tem primeru ključna beseda ADD predstavlja operacijsko kodo ukaza, R1 in R2 pa definirata registre, vključene v operacijo. Tudi če opazite le ta preprost primer, je očitno, da so montažni jeziki ljudem olajšali branje programov in s tem omogočili ustvarjanje bolj zapletenih aplikacij.

Čeprav so bolj usmerjeni v človeka, jeziki druge generacije nikakor ne širijo zmogljivosti procesorja.

Enter jezikov na visoki ravni, ki razvijalcem omogočajo, da se izrazijo v semantičnih oblikah na višji ravni. Kot ste morda že slutili, se ti jeziki imenujejo programske jezike tretje generacije. Jeziki na visoki ravni ponujajo različne zmogljive zanke, podatkovne strukture, predmete itd., Kar olajša izdelavo številnih aplikacij z njimi.

Sčasoma je bila uvedena raznolika paleta programskih jezikov na visoki ravni in njihove značilnosti so se zelo razlikovale. Nekatere od teh značilnosti uvrščajo programske jezike v skriptne (ali dinamične) jezike, kot vidimo v naslednjih razdelkih.

Razlika je tudi v izvajanju programskih jezikov na gostiteljskem računalniku. Običajno prevajalci prevesti jezikovne konstrukcije na visoki ravni v strojna navodila, ki so v pomnilniku. Čeprav so bili programi, napisani na ta način, sprva nekoliko manj učinkoviti od programov, napisanih v zbirnem jeziku, zaradi nezmožnosti zgodnjih prevajalnikov, da so sistemske vire učinkovito uporabljali, so se sčasoma prevajalniki in stroji izboljševali, zaradi česar so sistemski programski jeziki boljši od montažnih. Sčasoma so jeziki na visoki ravni postali priljubljeni na številnih razvojnih področjih, od poslovnih aplikacij in iger do komunikacijske programske opreme in implementacij operacijskega sistema.

Toda obstaja še en način za pretvorbo semantičnih konstruktov na visoki ravni v strojna navodila, in sicer za njihovo interpretacijo med izvajanjem. Tako se vaše aplikacije nahajajo v skriptah v njihovi prvotni obliki, konstrukti pa se med izvajanjem pretvorijo s programom, imenovanim tolmač. V bistvu izvajate tolmač, ki bere stavke vaše aplikacije in jih nato izvaja. Klican skriptiranje ali dinamični jeziki, takšni jeziki ponujajo še višjo stopnjo abstrakcije od tiste, ki jo ponujajo sistemski programski jeziki, in o njih bomo podrobneje razpravljali kasneje v tem poglavju.

Jeziki s temi lastnostmi so povsem primerni za nekatere naloge, kot so avtomatizacija procesov, upravljanje sistema in lepljenje obstoječih komponent programske opreme; skratka, kjer koli stroga sintaksa in omejitve, ki jih uvajajo sistemski programski jeziki, ovirajo razvijalce in njihova delovna mesta. Opis običajnih vlog skriptnih jezikov je v središču poglavja 2, "Ustrezne aplikacije za skriptne jezike".

Toda kakšno zvezo ima vse to z vami kot razvijalcem Jave? Da odgovorimo na to vprašanje, najprej na kratko povzemimo zgodovino platforme Java. Ko so platforme postajale bolj raznolike, je razvijalcem postajalo vse težje pisati programsko opremo, ki bi lahko delovala na večini razpoložljivih sistemov. Takrat je Sun razvil Java, ki ponuja preprostost "piši enkrat, zaženi kjer koli".

Glavna ideja platforme Java je bila namestiti virtualni procesor kot programsko komponento, imenovano navidezni stroj. Ko imamo tak navidezni stroj, lahko namesto določene strojne platforme ali operacijskega sistema napišemo in prevedemo kodo za ta procesor. Pokliče se rezultat tega postopka prevajanja bytecodein praktično predstavlja strojno kodo ciljanega navideznega stroja. Ko se aplikacija zažene, se navidezni stroj zažene in interpretira bajt kodo. Očitno je, da se tako razvita aplikacija lahko izvaja na kateri koli platformi z nameščenim ustreznim navideznim strojem. Ta pristop k razvoju programske opreme je našel veliko zanimivih uporab.

Glavna motivacija za izum platforme Java je bila ustvariti okolje za razvoj enostavne, prenosne, omrežno ozaveščene odjemalske programske opreme. Toda predvsem zaradi kazni za delovanje, ki jih uvaja navidezni stroj, je Java zdaj najbolj primerna na področju razvoja strežniške programske opreme. Jasno je, da s povečevanjem hitrosti osebnih računalnikov v Javi piše več namiznih aplikacij. Ta trend se samo nadaljuje.

Ena od osnovnih zahtev skriptnega jezika je imeti tolmač ali nekakšen virtualni stroj. Platforma Java je opremljena z navideznim računalnikom Java (JVM), ki ji omogoča gostovanje različnih skriptnih jezikov. Za to področje je danes v skupnosti Java vse večje zanimanje. Obstaja le nekaj projektov, ki poskušajo razvijalcem Java zagotoviti enako moč, kot jo imajo razvijalci tradicionalnih skriptnih jezikov. Obstaja tudi način, kako obstoječo aplikacijo zagnati v dinamičnem jeziku, kot je Python, znotraj JVM in jo integrirati z drugo aplikacijo ali modulom Java.

O tem razpravljamo v tej knjigi. Pri programiranju uporabljamo skriptni pristop, medtem ko razpravljamo o vseh prednostih in slabostih tega pristopa, o tem, kako najbolje uporabiti skripte v arhitekturi aplikacije in o tem, katera orodja so danes na voljo znotraj JVM.

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