Ohjelmointi

Johdanto Java-komentosarjoihin, osa 1

Ote Komentosarjat Java-kielellä: kielet, kehykset ja mallit.

Kirjailija: Dejan Bosanac

Julkaisija Addison Wesley Professional

ISBN-10: 0-321-32193-6

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

Viime aikoihin asti vain vakavimmat olivat innoissaan Java-alustan komentosarjoista, mutta se oli ennen Sun vahvistanut JRE: n tukea dynaamisesti kirjoitetuille kielille, kuten Python, Ruby ja JavaScript. Tässä kaksiosaisessa otteessa tulevasta Java-komentosarjasta: Kielet, kehykset ja mallit (Addison Wesley Professional, elokuu 2007) Dejan Bosanac kertoo, mikä erottaa useimmat komentosarjakielet Java-kaltaisesta ohjelmointikielestä ja selittää sitten miksi komentosarjat ovat ajankohtainen lisäys Java-ohjelmointitaitosi.

Johdatus Java-komentosarjoihin: kielet, kehykset ja mallit

Tämän kirjan pääaihe on komentosarjatekniikoiden ja Java-alustan synergia. Kuvailen projekteja, joita Java-kehittäjät voivat käyttää tehokkaamman kehitysympäristön luomiseen, ja joitain käytäntöjä, jotka tekevät komentosarjoista hyödyllisiä.

Ennen kuin aloitan keskustelun komentosarjojen soveltamisesta Java-maailmassa, esitän yhteenvedon komentosarjojen teoriasta yleensä ja sen käytöstä tietotekniikan infrastruktuurissa. Tämä on kirjan kahden ensimmäisen luvun aihe, ja se antaa meille paremman näkökulman komentosarjatekniikkaan ja kuinka tämä tekniikka voi olla hyödyllinen Java-alustalla.

Aluksi meidän on määriteltävä komentosarjakielet ja kuvattava niiden ominaisuudet. Niiden ominaisuudet määräävät suuresti roolit, joissa niitä voitaisiin (pitäisi) käyttää. Tässä luvussa selitän mitä termi on komentosarjakieli tarkoittaa ja keskustele niiden perusominaisuuksista.

Tämän luvun lopussa keskustelen komentosarjojen ja järjestelmäohjelmointikielten eroista ja siitä, miten nämä erot tekevät niistä sopivia tietyille kehitysrooleille.

Tausta

Komentosarjakielen määritelmä on sumea ja joskus epäjohdonmukainen sen kanssa, miten komentosarjakieliä käytetään todellisessa maailmassa, joten on hyvä tiivistää joitain ohjelmoinnin ja tietojenkäsittelyn peruskäsitteitä yleensä. Tämä yhteenveto tarjoaa perustan, joka on tarpeen määritellä komentosarjakielet ja keskustella niiden ominaisuuksista.

Aloitetaan alusta. Suorittimet suorittavat koneen ohjeet, jotka toimivat joko prosessorin rekistereissä tai ulkoisessa muistissa olevalla datalla. Yksinkertaisesti sanottuna konekäsky koostuu binaaristen numeroiden sekvenssistä (0s ja 1s) ja on erityinen prosessorille, jolla se toimii. Koneen ohjeet koostuvat toimintakoodi kertoa prosessorille, minkä toiminnon sen tulisi suorittaa, ja operandit edustavat tietoja, joille operaatio tulisi suorittaa.

Harkitse esimerkiksi yksinkertaista toimintoa lisätä yhden rekisterin arvo toisen arvon sisältämään arvoon. Kuvitellaan nyt yksinkertainen prosessori, jossa on 8-bittinen käskyjoukko, jossa ensimmäiset 5 bittiä edustavat toimintakoodia (sanotaan 00111 rekisteriarvon lisäykselle) ja rekisterit osoitetaan 3-bittisellä kaavalla. Voimme kirjoittaa tämän yksinkertaisen esimerkin seuraavasti:

00111 001 010

Tässä esimerkissä käytin 001: tä ja 010: tä osoittaakseni prosessorin rekisterit numero yksi ja toinen (vastaavasti R1 ja R2).

Tämä laskentamenetelmä on ollut tiedossa jo vuosikymmenien ajan, ja olet varma, että tunnet sen. Erilaisilla prosessoreilla on erilaiset strategiat siitä, kuinka heidän komentosarjansa pitäisi näyttää (RISC- tai CISC-arkkitehtuuri), mutta ohjelmistokehittäjän näkökulmasta ainoa tärkeä tosiasia on, että prosessori pystyy suorittamaan vain binaarikäskyjä. Riippumatta siitä, mitä ohjelmointikieliä käytetään, tuloksena oleva sovellus on sarja prosessorin suorittamia koneohjeita.

Ajan myötä on muuttunut se, miten ihmiset luovat järjestyksen, jossa koneohjeet suoritetaan. Tätä järjestettyä koneohjeiden sarjaa kutsutaan a tietokoneohjelma. Kun laitteisto on yhä edullisempaa ja tehokkaampaa, käyttäjien odotukset kasvavat. Ohjelmistokehityksen tarkoituksena tieteenalana on tarjota mekanismeja, joiden avulla kehittäjät voivat kehittää monimutkaisempia sovelluksia samalla (tai jopa vähemmän) vaivalla kuin aiemmin.

Tiettyä prosessorin käskyjoukkoa kutsutaan sen konekieli. Konekielet luokitellaan ensimmäisen sukupolven ohjelmointikieliksi. Tällä tavalla kirjoitetut ohjelmat ovat yleensä erittäin nopeita, koska ne on optimoitu tietyn prosessorin arkkitehtuuriin. Tästä edusta huolimatta ihmisten on vaikea (ellei mahdotonta) kirjoittaa suuria ja turvallisia sovelluksia konekielillä, koska ihmiset eivät osaa käsitellä suuria 0- ja 1-sekvenssejä.

Yrittäessään ratkaista tämän ongelman kehittäjät alkoivat luoda symboleja tietyille binaarimalleille, ja tämän myötä kokoonpanokielet otettiin käyttöön. Kokoonpanokielet ovat toisen sukupolven ohjelmointikielet. Kokoonpanokielien ohjeet ovat vain yhden tason koneen ohjeiden yläpuolella, sillä ne korvaavat binääriluvut helposti muistettavilla avainsanoilla, kuten ADD, SUB ja niin edelleen. Sellaisena voit kirjoittaa edellisen yksinkertaisen käskyesimerkin kokoonpanokielellä seuraavasti:

LISÄÄ R1, R2

Tässä esimerkissä ADD-avainsana edustaa käskyn toimintakoodia, ja R1 ja R2 määrittelevät operaatioon liittyvät rekisterit. Vaikka havaitsisitkin vain tämän yksinkertaisen esimerkin, on selvää, että kokoonpanokielet tekivät ohjelmista helpommin luettavia ja mahdollistivat monimutkaisempien sovellusten luomisen.

Vaikka ne ovat enemmän ihmislähtöisiä, toisen sukupolven kielet eivät kuitenkaan laajenna prosessorin ominaisuuksia millään tavalla.

Tulla sisään korkean tason kielet, joiden avulla kehittäjät voivat ilmaista itseään korkeamman tason semanttisissa muodoissa. Kuten olet ehkä arvannut, näihin kieliin viitataan kolmannen sukupolven ohjelmointikielet. Korkean tason kielet tarjoavat erilaisia ​​tehokkaita silmukoita, tietorakenteita, objekteja ja niin edelleen, mikä helpottaa monien sovellusten luomista heidän kanssaan.

Ajan myötä otettiin käyttöön monipuolinen joukko korkean tason ohjelmointikieliä, ja niiden ominaisuudet vaihtelivat paljon. Jotkut näistä ominaisuuksista luokittelevat ohjelmointikielet komentosarjakieliksi (tai dynaamisiksi), kuten näemme tulevista osioista.

Lisäksi on eroa siinä, miten ohjelmointikielet suoritetaan isäntäkoneessa. Yleensä, kääntäjät kääntää korkean tason kielirakenteet koneen ohjeiksi, jotka ovat muistissa. Vaikka tällä tavalla kirjoitetut ohjelmat olivat alun perin hieman vähemmän tehokkaita kuin kokoonpanokielellä kirjoitetut ohjelmat, koska varhaiset kääntäjät eivät kyenneet käyttämään järjestelmäresursseja tehokkaasti, ajan mittaan kääntäjät ja koneet paransivat, mikä teki järjestelmäohjelmointikielistä parempia kuin kokoonpanokielet. Lopulta korkean tason kielet tulivat suosituiksi monilla kehitysalueilla, liike-elämän sovelluksista ja peleistä viestintäohjelmistoihin ja käyttöjärjestelmien toteutuksiin.

Mutta on toinen tapa muuntaa korkean tason semanttiset rakenteet koneohjeiksi, ja se on tulkita ne suoritettaessa. Tällä tavalla sovelluksesi sijaitsevat skripteinä alkuperäisessä muodossaan ja rakenteet muunnetaan ajon aikana ohjelmalla nimeltä tulkki. Pohjimmiltaan suoritat tulkin, joka lukee sovelluksesi lauseet ja suorittaa ne sitten. Olla nimeltään komentosarjat tai dynaamiset kielet, tällaiset kielet tarjoavat jopa korkeamman abstraktiotason kuin järjestelmä-ohjelmointikielet, ja keskustelemme niistä yksityiskohtaisesti myöhemmin tässä luvussa.

Kielet, joilla on nämä ominaisuudet, sopivat luonnollisesti tiettyihin tehtäviin, kuten prosessiautomaatioon, järjestelmän hallintaan ja olemassa olevien ohjelmistokomponenttien liimaamiseen; Lyhyesti sanottuna missä tahansa järjestelmän ohjelmointikielten tiukka syntaksi ja rajoitteet olivat tiellä kehittäjien ja heidän työpaikkojensa välillä. Komentosarjakielien tavallisten roolien kuvaus on kohdassa Luku 2 "Soveltuvat komentosarjakielet".

Mutta mitä kaikkea tällä on tekemistä sinun Java-kehittäjänä? Vastataksemme tähän kysymykseen, tiivistetään ensin lyhyesti Java-alustan historia. Alustojen monipuolistuessa kehittäjien oli yhä vaikeampaa kirjoittaa ohjelmistoja, jotka voivat toimia suurimmalla osalla käytettävissä olevista järjestelmistä. Tällöin Sun kehitti Java: n, joka tarjoaa "kirjoita kerran, suorita minne tahansa" -ominaisuuden.

Java-alustan pääidea oli toteuttaa virtuaalinen prosessori ohjelmistokomponenttina, nimeltään a virtuaalikone. Kun meillä on tällainen virtuaalikone, voimme kirjoittaa ja koota prosessorin koodin tietyn laitteistoalustan tai käyttöjärjestelmän sijaan. Tämän kokoamisprosessin ulostuloa kutsutaan tavukoodi, ja se edustaa käytännössä kohdennetun virtuaalikoneen konekoodia. Kun sovellus on suoritettu, virtuaalikone käynnistetään ja tavukoodi tulkitaan. On selvää, että tällä tavalla kehitetty sovellus voi toimia millä tahansa alustalla, johon on asennettu sopiva virtuaalikone. Tämä ohjelmistokehitystapa löysi monia mielenkiintoisia käyttötarkoituksia.

Tärkein motiivi Java-alustan keksinnölle oli luoda ympäristö helppokäyttöisen, kannettavan, verkkotietoisen asiakasohjelmiston kehittämiselle. Mutta lähinnä virtuaalikoneen käyttöön ottamien rangaistusten vuoksi Java soveltuu nyt parhaiten palvelinohjelmistojen kehittämiseen. On selvää, kun henkilökohtaisten tietokoneiden nopeus kasvaa, lisää työpöytäsovelluksia kirjoitetaan Java-muodossa. Tämä suuntaus jatkuu vain.

Yksi skriptikielen perusvaatimuksista on tulkin tai jonkinlainen virtuaalikone. Java-alustan mukana tulee Java Virtual Machine (JVM), jonka avulla se voi olla isäntä useille komentosarjakielille. Java-yhteisö kiinnostaa tätä aluetta nykyään yhä enemmän. Muutama projekti on olemassa, jotka yrittävät tarjota Java-kehittäjille samat tehokehittäjät kuin perinteisillä komentosarjakielillä. Lisäksi on tapa suorittaa olemassa oleva sovellus, joka on kirjoitettu dynaamisella kielellä, kuten Python, JVM: n sisällä ja integroida se toiseen Java-sovellukseen tai -moduuliin.

Tästä keskustelemme tässä kirjassa. Otamme komentosarjat ohjelmointiin ja keskustelemme tämän lähestymistavan kaikista vahvuuksista ja heikkouksista, siitä, miten komentosarjoja voidaan parhaiten käyttää sovellusarkkitehtuurissa ja mitä työkaluja on nykyään saatavilla JVM: ssä.

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