tulkki

Tulkki on tietokoneohjelma , joka ilmeisesti suorittaa käskysarjan suoraan, muoto ohjeet on määritelty. Tätä varten tulkki lukee yhden tai useamman lähdetiedoston , analysoi ne ja suorittaa ne sitten ohjeiden avulla kääntämällä ne konekoodiksi , jonka tietokonejärjestelmä voi suorittaa suoraan. Tulkit ovat huomattavasti hitaampia kuin kääntäjät , mutta tarjoavat yleensä paremman virheanalyysin.

Tulkkeja käytetään sekä ohjelmointikielissä että tietokoneohjelmissa.

käyttää

ohjelmointi

Ohjelmoinnissa tulkki on melkein aina osa ohjelmistokehitystä .

Puhtaassa muodossa kääntäjät - toisin kuin tulkit - kääntävät lähdetiedostojen ohjeet yhdessä tai useammassa juoksussa konekoodiksi aiemmin määritetylle kohdejärjestelmälle ja luovat siten suoritettavan tietokoneohjelman . Kääntäjä-kääntäjä ja tulkki-kääntäjä on kuitenkin jo erotettu, samoin kuin myös tulkki-tulkki ja kääntäjä-tulkki.

"Jokainen hyvä ohjelmistoinsinööri kertoo sinulle, että kääntäjä ja tulkki ovat keskenään vaihdettavissa."

"Jokainen hyvä ohjelmistokehittäjä kertoo sinulle, että kääntäjät ja tulkit ovat keskenään vaihdettavissa."

- Tim Berners-Lee : Torben Ægidius Mogensen: Johdatus kääntäjän suunnitteluun . Springer Science & Business Media, Lontoo 2011, ISBN 978-0-85729-828-7 (englanti, rajoitettu esikatselu Google- teoshaulla ).

Jos viimeinen vaihe on tulkki, lähdetiedosto käännetään ohjelman ollessa käynnissä .

Ohjelmointikieliä, jotka eivät koota lähdetekstiä, mutta tulkitsevat aina syötteen tai lähdetiedoston, kutsutaan myös "tulkin kieleksi " tai komentokieleksi . Klassisia tulkkikieliä ovat mm. B. BASIC kuten GW-BASIC , Tcl tai JavaScript . Joillekin muille ohjelmointikielille ohjelmoija voi valita tulkin tai kääntäjän välillä. Joillakin ohjelmointikielillä tavukoodi generoidaan myös välikoodina , joka on jo optimoitu, mutta vaatii jälleen kohdejärjestelmässä olevan tulkin suoritettavaksi. Siellä on myös ulkoisesti kehitettyjä kääntäjiä, jotka ovat todella puhtaita tulkkikieliä.

Tietokoneohjelmat

Tulkki suorittaa myös komentorivin tulkkien komentosarjat , kuten eräajotiedostot tai Unix- komentosarjat. Niin että käsikirjoitus ei tarvitse määritelty komentoriviltä parametrin , on ns roska on Unix- järjestelmien ja kuoret  - käsikirjoitus käyttää kuoren soittaa sopiva tulkki itse, niin sanotusti.

Tietokoneohjelmien kohdalla puhutaan tulkeista heti, kun tietokonejärjestelmä ei voi tai ei pitäisi suorittaa koodia suoraan. Tämä on mm. Tämä on myös tapauksessa , jossa emulaattori , joka analysoi ja uudelleenkirjoitussääntö kone koodi muiden tietokonejärjestelmien ja suorittaa sen tulkittu tavalla tietokonejärjestelmässä, johon ne ovat tällä hetkellä käynnissä. Tämä ei kuitenkaan sisällä virtuaalikoneita , koska ne suorittavat suuren osan vierasjärjestelmän konekoodista suoraan isäntäjärjestelmässä tulkitsematta. Myös pelimoottorit voivat olla tulkki, kun todellinen pelidata , yleensä tavukoodina , kulloisellakin alustalla tulkitaan.

ominaisuudet

Tulkit ovat enimmäkseen kohdeprosessorin konekielellä , mutta he voivat olla myös itse tulkkikielellä. Suurin haitta on pienempi suoritusnopeus kääntäjään verrattuna. Tämä johtuu siitä, että kääntäjä voi kääntöprosessin aikana käyttää aikaa koodin optimointiin siten, että se suoritetaan nopeammin vastaavassa kohdejärjestelmässä. Tällaiset optimoinnit ovat kuitenkin aikaa vieviä, joten tulkki suorittaa yleensä suoran muunnoksen konekoodiksi, joka on kuitenkin kokonaisuudessaan hitaampi kuin kääntäjän optimoima koodi.

Tulkittu koodi on suunnilleen viisi - 20 kertaa hitaampi kuin koottu koodi.

Paremman virheanalyysin lisäksi tulkitun koodin etuihin kuuluu riippumattomuus aiemmin määritetystä tietokonearkkitehtuurista  - koska tulkittu koodi toimii jokaisessa järjestelmässä, jossa sillä on tulkki.

Nopeus kasvaa

Kompromissiratkaisu on juuri-in-time-kääntäjä (JIT-kääntäjä), jossa ohjelma käännetään konekoodiksi vain ajon aikana , mutta suoraan. Prosessori suorittaa käännetyn koodin suoraan. Konekoodin välitallennuksen vuoksi useita kertoja ajetut ohjelmaosat on käännettävä vain kerran. JIT-kääntäjä mahdollistaa myös binäärikoodin optimoinnin. JIT-kääntäjät voivat kuitenkin toimia vain tietyllä tietokonearkkitehtuurilla, koska ne luovat konekoodia tälle arkkitehtuurille ja vaativat paljon enemmän muistia kuin puhtaat tulkit.

Välitunnus

Toinen välivaihe on tavukooditulkit . Lähdeteksti käännetään (etukäteen tai ajon aikana) yksinkertaiseksi välikoodiksi, jonka sitten suorittaa tulkki - jota usein kutsutaan myös virtuaalikoneeksi. Tämä on esim. Tämä koskee esimerkiksi kanssa Java kautta Java Virtual Machine (JVM). Se vastaa kääntäjä-tulkki-konseptia, koska välikoodi on jo osittain optimoitu (lähdekoodi → kääntäjä → välikoodi tavukoodina → tulkki → suoritus kohdejärjestelmässä).

Varsinkin 1980-luvulla välivaihetta käytettiin komentojen muuntamiseen helpommiksi dekoodattaviksi rahakkeiksi syöttöhetkellä , jotka sitten muunnettiin takaisin pelkkäksi tekstiksi (luettelo) -lähdön aikana. Nopeuden kasvun lisäksi lähdekoodin pakkaus oli painava argumentti. Periaatteessa oli myös mahdollista käyttää natiiviavainsanoja , jos tiedonvaihto tapahtui tokenoidun lähdeohjelman perusteella.

Sekalaiset muodot

Koska JIT-koodi ei ole automaattisesti nopeampi kuin tulkittu koodi, joissakin ajonaikaisissa ympäristöissä käytetään hybridimuotoa. Yksi esimerkki tästä on JVM. JIT-kääntäjää käytetään rinnakkain tulkin kanssa, jolloin nopeampi toteutuspolku "voittaa".

Tulkkien kielet

Ohjelmointikieliä, joiden pää- tai ensimmäinen toteutus on tulkki, kutsutaan usein tulkkikieliksi, päinvastoin kääntäjää (kääntäjän kieltä) käyttävälle ohjelmointikielelle . Pohjimmiltaan ohjelmointikieli ei ole sidottu yhden tyyppiseen toteutukseen, ja kahdesta vastakkaisesta lähestymistavasta on sekamuotoja.

On kuitenkin myös ohjelmointikieliä, jotka on suunniteltu myöhempää toteutusta ajatellen; tämä näkyy edelleen joillakin vanhemmilla kielillä. Aikaisempien tietokoneiden heikon suorituskyvyn takia tulkit oli pidettävä mahdollisimman yksinkertaisina ja pieninä, jotta ei tarvitsisi liikaa laskenta-aikaa ja muistia. Kääntäjät puolestaan ​​voisivat kuluttaa paljon laskenta-aikaa ja myös paljon RAM-muistia, koska ohjelman ollessa käynnissä he eivät enää olleet aktiivisia. Tästä syystä kielet, joiden piti tulkita, suunniteltiin siten, että ne oli helppo analysoida ja suorittaa, kun taas käännettäväksi tarkoitetut kielet saattoivat sisältää myös rakenteita, jotka olivat työläitä analysoida ja käsitellä. Nykyään tällä on merkitystä vain hyvin harvinaisissa tapauksissa ohjelmointikielen suunnittelussa.

Joillekin kielille on olemassa erilaisia ​​toteutuksia. Scheme- kieli erottuu tästä, jota varten on olemassa suuri määrä toteutuksia, jotka perustuvat moniin eri käsitteisiin. Tässä on toinen esimerkki: Ohjelmointikieli C on hyvin suunniteltu käännettäväksi. Mutta tälle kielelle on edelleen tulkkeja, kuten CINT ja Ch, vaikka C mainitaan usein erinomaisena esimerkkinä kielestä, joka ei ole "tulkin kieli", vaan "kääntäjä".

APL , BASIC , Forth , Perl , Python , Ruby , PHP ja monet muut tunnetaan tulkkikielinä . Komentosarjakielet mainitaan joskus tulkin kielten ala- tai aihekategoriana .

Tunnettuja ohjelmointikieliä, jotka yleensä käännetään tavukoodeiksi, ovat Java , C # , Perl ja Python.

Joillekin kielille (kuten Smalltalk ) on tulkkia, tulkkia, tavukooditulkkeja, JIT-kääntäjiä tai kääntäjiä muilla kielillä (esim. C: lle tai .NET: lle ) palveluntarjoajasta riippuen .

Siirtyminen puhtaan tulkin ja puhtaan kääntäjän välillä on sujuvaa.

Yksittäiset todisteet

  1. ^ A b Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman: Koostaja: periaatteet, tekniikat ja työkalut . Pearson Deutschland GmbH, 2008, ISBN 978-3-8273-7097-6 , s. 1253 ( rajoitettu esikatselu Google-teoshaulla).
  2. ^ Julius T. Tou: Ohjelmistotuotanto . Proceedings of the Third Symposium on Computer and Information Sciences, joka pidettiin Miami Beachissä Floridassa joulukuussa 1969. Academic Press, New York, Lontoo 1970, ISBN 978-0-323-15744-5 , s. 288 (englanti, rajoitettu esikatselu Google-teoshaulla).
  3. Mikä on tulkki? ”XOVI. Haettu 29. toukokuuta 2019 .
  4. B a b Michael Bürger: Tulkit. Haettu 29. toukokuuta 2019 .
  5. ^ A b David A. Watt: Kääntäjän rakentaminen . 9. kansainvälinen konferenssi, CC 2000. julkaisussa: Lecture Notes in Computer Science, osa 1781 . Springer-Verlag, Berliini, Heidelberg, New York 2000, ISBN 978-3-540-67263-0 , s. 300 (englanti, rajoitettu esikatselu Google-teoshaulla).
  6. R. Nageswara Rao, Kogent Solutions Inc.: Java-ydin: integroitu lähestymistapa . Kattaa käsitteet, ohjelmat ja haastattelukysymykset. Dreamtech Press, New Delhi 2008, ISBN 978-81-7722-836-6 , s. 664 (englanti, rajoitettu esikatselu Google-teoshaulla).
  7. ^ Christian Wagenknecht, Michael Hielscher: Muodolliset kielet, abstraktit automaatit ja kääntäjät . Oppikirja ja työkirja perusopintoja ja jatkokoulutusta varten. Springer-Verlag, 2009, ISBN 3-8348-0624-2 ( rajoitettu esikatselu Google- teoshaulla ).