Programmering

Introduktion til scripting i Java, del 1

Uddrag fra Scripting i Java: Sprog, rammer og mønstre.

Af Dejan Bosanac

Udgivet af Addison Wesley Professional

ISBN-10: 0-321-32193-6

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

Indtil for nylig var kun hardcore begejstret for scripting på Java-platformen, men det var før Sun boostede JRE's understøttelse af dynamisk typede sprog som Python, Ruby og JavaScript. I dette todelt uddrag fra den kommende Scripting i Java: Languages, Frameworks and Patterns (Addison Wesley Professional, august 2007) Dejan Bosanac indsnævrer sig i, hvad der adskiller de fleste scriptingsprog fra et programmeringssprog som Java og forklarer derefter, hvorfor scripting er tidsværdig tilføjelse til din Java-programmeringsevne.

Introduktion til scripting i Java: sprog, rammer og mønstre

Hovedemnet i denne bog er synergien mellem scriptingteknologier og Java-platformen. Jeg beskriver projekter, som Java-udviklere kan bruge til at skabe et mere kraftfuldt udviklingsmiljø og nogle af de fremgangsmåder, der gør scripting nyttigt.

Før jeg begynder at diskutere anvendelsen af ​​scripting i Java-verdenen, opsummerer jeg noget af teorien bag scripting generelt og dets anvendelse i informationsteknologiinfrastruktur. Dette er emnet i de to første kapitler i bogen, og det giver os et bedre perspektiv på scripting-teknologi såvel som hvordan denne teknologi kan være nyttig inden for Java-platformen.

Til at begynde med skal vi definere, hvad scriptingsprog er, og beskrive deres egenskaber. Deres egenskaber bestemmer i høj grad de roller, som de kunne (skulle) bruges i. I dette kapitel forklarer jeg, hvad udtrykket er scripting sprog midler og diskutere deres grundlæggende egenskaber.

I slutningen af ​​dette kapitel diskuterer jeg forskellene mellem scripting og systemprogrammeringssprog, og hvordan disse forskelle gør dem egnede til bestemte roller i udviklingen.

Baggrund

Definitionen af ​​et skriptsprog er uklar og undertiden uoverensstemmende med, hvordan man bruger skriptsprog i den virkelige verden, så det er en god idé at sammenfatte nogle af de grundlæggende begreber om programmering og computing generelt. Dette resume er et fundament, der er nødvendigt for at definere scriptingsprog og diskutere deres egenskaber.

Lad os starte fra starten. Processorer udfører maskininstruktioner, der fungerer på data enten i processorregistret eller i ekstern hukommelse. Enkelt sagt består en maskininstruktion af en række binære cifre (0s og 1s) og er specifik for den bestemte processor, som den kører på. Maskininstruktioner består af operationskode fortæller processoren, hvilken operation den skal udføre, og operander repræsenterer de data, som operationen skal udføres på.

Overvej f.eks. Den enkle handling at tilføje en værdi indeholdt i et register til værdien indeholdt i et andet. Lad os forestille os en simpel processor med et 8-bit instruktions sæt, hvor de første 5 bit repræsenterer operationskoden (f.eks. 00111 for tilføjelse af registerværdi), og registre adresseres af et 3-bit mønster. Vi kan skrive dette enkle eksempel som følger:

00111 001 010

I dette eksempel brugte jeg 001 og 010 til at adressere registre nummer et og to (henholdsvis R1 og R2) for processoren.

Denne grundlæggende metode til computing har været kendt i årtier, og jeg er sikker på, at du er fortrolig med den. Forskellige slags processorer har forskellige strategier for, hvordan deres instruktions sæt skal se ud (RISC eller CISC-arkitektur), men set fra softwareudviklerens synspunkt er det eneste vigtige faktum, at processoren kun er i stand til at udføre binære instruktioner. Uanset hvilket programmeringssprog der anvendes, er den resulterende applikation en sekvens af maskininstruktioner, der udføres af processoren.

Hvad der har ændret sig over tid er, hvordan folk opretter den rækkefølge, i hvilken maskinens instruktioner udføres. Denne ordnede rækkefølge af maskininstruktioner kaldes a computerprogram. Da hardware bliver mere overkommelig og mere kraftfuld, stiger brugernes forventninger. Hele formålet med softwareudvikling som en videnskabsdisciplin er at tilvejebringe mekanismer, der gør det muligt for udviklere at skabe mere komplekse applikationer med den samme (eller endnu mindre) indsats som før.

En specifik processors instruktionssæt kaldes dens maskinsprog. Maskinsprog er klassificeret som første generations programmeringssprog. Programmer skrevet på denne måde er normalt meget hurtige, fordi de er optimeret til den specifikke processorarkitektur. Men på trods af denne fordel er det svært (hvis ikke umuligt) for mennesker at skrive store og sikre applikationer på maskinsprog, fordi mennesker ikke er gode til at håndtere store sekvenser på 0 og 1.

I et forsøg på at løse dette problem begyndte udviklere at oprette symboler til visse binære mønstre, og med dette, forsamlingssprog blev introduceret. Forsamlingssprog er anden generations programmeringssprog. Instruktionerne på samlingssprog er kun et niveau over maskininstruktionerne, idet de erstatter binære cifre med let at huske nøgleord som ADD, SUB og så videre. Som sådan kan du omskrive det foregående enkle instruktionseksempel på samlingssprog som følger:

TILFØJ R1, R2

I dette eksempel repræsenterer ADD-nøgleordet instruktionens operationskode, og R1 og R2 definerer de registre, der er involveret i operationen. Selvom du kun observerer dette enkle eksempel, er det indlysende forsamlingssprog, der gjorde programmer lettere for mennesker at læse og således muliggjorde oprettelse af mere komplekse applikationer.

Selvom de er mere menneskelige, udvider anden generations sprog imidlertid ikke processorkapaciteterne på nogen måde.

Gå ind sprog på højt niveau, som tillader udviklere at udtrykke sig i semantiske former på højere niveau. Som du måske har gættet, omtales disse sprog som tredje generations programmeringssprog. Sprog på højt niveau giver forskellige kraftfulde sløjfer, datastrukturer, objekter osv., Hvilket gør det meget nemmere at lave mange applikationer med dem.

Over tid blev en række forskellige programmeringssprog på højt niveau introduceret, og deres karakteristika varierede meget. Nogle af disse egenskaber kategoriserer programmeringssprog som scripting (eller dynamiske) sprog, som vi ser i de kommende afsnit.

Der er også en forskel i, hvordan programmeringssprog udføres på værtsmaskinen. Som regel, kompilatorer oversætte sprogkonstruktioner på højt niveau til maskininstruktioner, der findes i hukommelsen. Selvom programmer skrevet på denne måde oprindeligt var lidt mindre effektive end programmer skrevet på forsamlingssprog på grund af tidlige kompilators manglende evne til at bruge systemressourcer effektivt, efterhånden som tiden gik, blev kompilatorer og maskiner forbedret, hvilket gjorde systemprogrammeringssprog bedre end monteringssprog. Til sidst blev sprog på højt niveau populære i en lang række udviklingsområder, lige fra forretningsapplikationer og spil til kommunikationssoftware og operativsystemimplementeringer.

Men der er en anden måde at omdanne semantiske konstruktioner på højt niveau til maskininstruktioner, og det er at fortolke dem, når de udføres. På denne måde ligger dine applikationer i scripts i deres oprindelige form, og konstruktionerne transformeres ved kørsel af et program kaldet en tolk. Dybest set udfører du tolken, der læser udsagn om din ansøgning og derefter udfører dem. Hedder scripting eller dynamiske sprog, sådanne sprog tilbyder et endnu højere abstraktionsniveau end det, der tilbydes af systemprogrammeringssprog, og vi diskuterer dem detaljeret senere i dette kapitel.

Sprog med disse karakteristika er en naturlig pasform til visse opgaver, såsom procesautomatisering, systemadministration og limning af eksisterende softwarekomponenter; kort sagt, hvor som helst de strenge syntaks og begrænsninger, der blev introduceret af systemprogrammeringssprog, kom i vejen mellem udviklere og deres job. En beskrivelse af de almindelige roller for scripting-sprog er et fokus i kapitel 2, "Passende applikationer til scripting-sprog."

Men hvad har alt dette at gøre med dig som Java-udvikler? For at besvare dette spørgsmål, lad os først kort opsummere Java-platformens historie. Da platforme blev mere forskellige, blev det stadig sværere for udviklere at skrive software, der kan køre på de fleste tilgængelige systemer. Dette er, når Sun udviklede Java, der tilbyder "skriv en gang, kør hvor som helst" enkelhed.

Hovedideen bag Java-platformen var at implementere en virtuel processor som en softwarekomponent, kaldet a virtuel maskine. Når vi har en sådan virtuel maskine, kan vi skrive og kompilere koden til den pågældende processor i stedet for den specifikke hardwareplatform eller operativsystem. Outputtet fra denne kompileringsproces kaldes bytecode, og det repræsenterer praktisk taget maskinkoden for den målrettede virtuelle maskine. Når applikationen udføres, startes den virtuelle maskine, og bytekoden fortolkes. Det er indlysende, at en applikation, der er udviklet på denne måde, kan køre på enhver platform med en passende virtuel maskine installeret. Denne tilgang til softwareudvikling fandt mange interessante anvendelser.

Hovedmotivationen til opfindelsen af ​​Java-platformen var at skabe et miljø til udvikling af nem, bærbar, netværksbevidst klientsoftware. Men hovedsagelig på grund af præstationsstraffe introduceret af den virtuelle maskine er Java nu bedst egnet inden for udvikling af serversoftware. Det er klart, da personlige computere øges i hastighed, flere desktop-applikationer skrives i Java. Denne tendens fortsætter kun.

Et af de grundlæggende krav til et skriptsprog er at have en tolk eller en slags virtuel maskine. Java-platformen leveres med Java Virtual Machine (JVM), som gør det muligt at være vært for forskellige script-sprog. Der er en voksende interesse for dette område i dag i Java-samfundet. Der er få projekter, der forsøger at give Java-udviklere de samme strømudviklere som traditionelle script-sprog. Der er også en måde at udføre din eksisterende applikation skrevet på et dynamisk sprog som Python inde i JVM og integrere det med et andet Java-program eller modul.

Dette er hvad vi diskuterer i denne bog. Vi tager en scripting tilgang til programmering, mens vi diskuterer alle styrker og svagheder ved denne tilgang, hvordan man bedst bruger scripts i en applikationsarkitektur, og hvilke værktøjer der er tilgængelige i dag i JVM.