Översättare - ett program eller tekniskt verktyg som utför översättningen av programmet [1] [2] .
Översättning av ett program är omvandlingen av ett program som presenteras på ett av programmeringsspråken till ett program skrivet på ett annat språk. Översättaren utför vanligtvis också feldiagnostik, genererar ordböcker med identifierare, skriver ut programtexten etc. [1]
Språket som inmatningsprogrammet presenteras på kallas källspråk och själva programmet kallas källkoden . Utdataspråket kallas målspråket .
I det allmänna fallet gäller begreppet översättning inte bara för programmeringsspråk, utan också för andra språk - både formella datorspråk (som HTML - markeringsspråk ) och naturliga språk ( ryska , engelska , etc.) [ 3] [4] .
Det finns flera typer av översättare [2] .
Syftet med översättningen är att konvertera text från ett språk till ett språk som är förståeligt för adressaten. Vid sändning av ett datorprogram kan adressaten vara:
Sändningstyper:
Språket för processorn (enhet, maskin) kallas maskinspråk, maskinkod . Maskinspråkskoden exekveras av processorn. Vanligtvis är maskinspråk ett lågnivåspråk, men det finns processorer som använder högnivåspråk (till exempel iAPX-432 [5] ). Sådana processorer har dock inte fått någon distribution på grund av deras komplexitet och höga kostnad.
En kompilator är en sorts översättare som konverterar källkod från ett programmeringsspråk till maskinspråk [6] .
Sammanställningsprocessen består vanligtvis av flera steg:
Programmet kan använda tjänster som tillhandahålls av operativsystemet och tredjepartsbibliotek (till exempel bibliotek för att arbeta med filer och bibliotek för att skapa ett grafiskt gränssnitt) . Länkning eller länkning utförs för att lägga till maskinkod från andra objektfiler (kod för statiska bibliotek ) och information om dynamiska bibliotek till en objektfil . Länkning eller länkning görs av länken eller länken . Länkaren kan vara ett fristående program eller en del av en kompilator . Länkaren skapar en körbar fil . Den körbara filen (programmet) startas enligt följande:
Sammanställningsfördelar:
Nackdelar med sammanställning:
En assembler är en kompilator som konverterar text från assemblerspråk till maskinspråk . Assembly språk är ett språk nära maskinspråk , ett lågnivåspråk .
Tolkning är processen att läsa och exekvera källkod . Genomförs av ett tolkprogram .
Tolken kan arbeta på två sätt:
I det första fallet används inte översättning och i det andra fallet används översättning av källkoden till mellankoden.
Stadier av tolken:
Tolken modellerar en maskin ( virtuell maskin ), implementerar en cykel för hämtning av maskinkommandon. Maskinkommandon skrivs inte på maskinspråk, utan på ett högnivåspråk . En tolk kan kallas en virtuell maskinspråksexekutor .
Ren tolkning tillämpas vanligtvis på språk med en enkel struktur, såsom skriptspråk , APL och Lisp .
Exempel på tolkar som producerar bytekod : Perl , PHP , Python , Erlang .
Fördelar med tolkar framför kompilatorer:
Nackdelar med tolkar jämfört med kompilatorer:
Jämförelse mellan en ren tolk och en bytekodgenererande tolk :
Dynamisk eller JIT-kompilering - översättning, där käll- eller mellankoden konverteras (kompileras) till maskinkod direkt vid körning, "on the fly" ( engelska just in time , JIT ). Varje kodstycke kompileras endast en gång; kompilerad kod cachelagras och återanvänds vid behov.
Fördelar med dynamisk kompilering jämfört med kompilering:
Nackdelar med dynamisk sammanställning jämfört med sammanställning och ren tolkning:
Dynamisk kompilering är väl lämpad för webbapplikationer .
Dynamisk kompilering dök upp och stöds till viss del i implementeringar av Java , .NET Framework , Perl , Python .
Begreppen "översättning" och "tolkning" är olika. Under översättningen konverteras programkoden från ett språk till ett annat. Under tolkning exekveras programmet.
Eftersom syftet med översättning vanligtvis är att förbereda för tolkning, betraktas dessa processer tillsammans. Till exempel karakteriseras programmeringsspråk ofta som "kompilerade" eller "tolkade" beroende på om språket används på ett övervägande sätt: kompilering eller tolkning. Dessutom kompileras nästan alla lågnivå- och tredjegenerationsspråk , som assembler , C eller Modula-2 , och språk på högre nivå , som Python eller SQL , tolkas.
Å andra sidan finns det en interpenetration av översättnings- och tolkningsprocesser: tolkar kan kompilera (inklusive dynamisk kompilering), och översättare kan behöva tolkning för att implementera metaprogrammering (till exempel för makron i assemblerspråk , villkorlig kompilering i C eller mallar i C++ ).
Dessutom kan samma programmeringsspråk både översättas och tolkas, och i båda fallen måste det finnas gemensamma stadier av analys och igenkänning av konstruktioner och direktiv för källspråket. Detta gäller både mjukvaru- och hårdvaruimplementationer - till exempel x86 - familjens processorer, innan de exekverar maskinspråksinstruktioner , avkodar dem, markerar operandfält i opkoder ( indikerar register , minnesadresser , konstanter ), bitdjup etc., och i In Pentium processorer med NetBurst - arkitekturen översätts samma maskinkod dessutom till en sekvens av mikrooperationer innan den lagras i den interna cachen .
Ordböcker och uppslagsverk |
---|