Hvordan gjorde kompilatorer datamaskiner til massenes verktøy?

I dette blogginnlegget skal vi se på hvordan kompilatorer bygde bro mellom maskinspråk og høynivåspråk, og dermed gjorde datamaskiner til et verktøy for massene.

 

I 1942 ble Atanasoff-Berry-datamaskinen, menneskehetens første elektroniske datamaskin, ferdigstilt. Siden den gang har datamaskiner fortsatt å utvikle seg, til det punktet hvor det er vanskelig å finne noen som ikke bruker en. I fremtiden vil vi leve i en usynlig elektromagnetisk jungel kalt Tingenes Internett, hvor objekter vil være koblet til hverandre i et internettnettverk for å utveksle informasjon. Da datamaskiner først dukket opp, lurte folk på: «Hvorfor bygge et så dyrt og klumpete stykke skrapmetall for å gjøre beregninger som mennesker enkelt kan gjøre?» Men i moderne tid har datamaskiner blitt så viktige at verden ikke ville fungert uten dem. Et av de viktigste verktøyene som har bidratt til utviklingen av datamaskiner er kompilatoren. Uten kompilatorer kan datamaskiner fortsatt være noe du bare ser i store forskningsanlegg som kjernefusjonsreaktorer og partikkelakseleratorer, langt fra massene.
Så hva er egentlig kompilatorer, og hvorfor oppsto de? Generelt sett er en kompilator et verktøy som oversetter menneskelig språk til maskinspråk. Maskinspråk er bokstavelig talt et språk som maskiner kan forstå. Maskinspråk er imidlertid vanligvis representert i binært format, med 0er og 1er, som en elektrisk enhet som er på eller av, eller strøm som er tilstede eller fraværende. For eksempel representerer 01100001 (97 i desimal) bokstaven 'a'. Som du kan se, er maskinspråk svært upraktisk å lese og skrive, så i de tidlige stadiene av datautvikling ble et mer intuitivt, menneskelig forståelig språk kalt assemblerspråk brukt i stedet for maskinspråk. Imidlertid oppsto et problem da programmer ble flyttet til andre datamaskiner. Fordi maskinspråk er et språk som er spesifikt for en maskin, kan det ikke brukes på en annen maskin. Assembler er en menneskelig forståelig oversettelse av maskinspråk, så det har en én-til-én-korrespondanse med maskinspråk. Så hvis du byttet maskin, måtte du skrive om titusenvis av linjer med kode fra bunnen av. Høynivåspråk dukket opp for å løse dette problemet. Høynivåspråk er maskinuavhengige, noe som betyr at de ikke inneholder maskinspesifikke setninger, så de har samme betydning uansett hvilken maskin de kjøres på. Problemet med dette er at maskiner ikke kan forstå dem. Det er her kompilatorer kommer inn i bildet. Kompilatorer tar seg av oversettelsen til maskinspråk, slik at programmerere kan skrive programmer på ett felles høynivåspråk, selv om det finnes mange forskjellige typer maskiner. Mens det tidligere trengtes 10,000 100 programmer for å bli skrevet for at 100 datamaskiner skulle utføre 100 oppgaver, kreves det nå bare 100 kompilatorer og XNUMX programmer.
Den første kompilatoren ble utviklet av Dr. Grace Hopper for å oversette A-0 til maskinspråk. Dette var første gang begrepet «kompilator» ble brukt. Over tid ble imidlertid et verktøy for å oversette til maskinspråk og en kompilator ikke synonymt. I vid forstand gjør en kompilator ganske enkelt ett språk om til noe annet. Semantikken må selvfølgelig bevares. For eksempel kalles et verktøy som gjør et maskinspråk om igjen til et høynivåspråk en dekompilator. Det kan konvertere et høynivåspråk til et annet høynivåspråk, eller det kan konvertere maskinspråk til et annet maskinspråk. I JAVA-språket oversetter kompilatoren høynivåspråk til bytekode som verken er maskin- eller høynivåspråk. Det er til og med mulig å gjøre høynivåspråk om til en bildefil, så lenge det gir mening når det tolkes. En kompilator som oversetter språk A til språk A er også en kompilator hvis den kan bevare semantikken nøyaktig. Dette kan høres litt rart ut. For eksempel har du aldri hørt om en oversetter som oversetter koreansk til koreansk.
For å forstå dette må du vite om en av hovedfunksjonene til en kompilator: optimalisering. La oss for eksempel si at du må levere en pakke, og du må gå til hver etasje fra første til tiende én gang. Du kan starte fra første etasje og gå opp til tiende etasje, eller du kan gå ned fra tiende etasje til første etasje. Men hvis du går i sikksakk, som å gå til tiende etasje, deretter ned til første etasje, og deretter tilbake opp til niende etasje, kan du fortsatt levere pakken fra første etasje til tiende etasje. På samme måte har programmeringskode utallige måter å fullføre en bestemt oppgave på, men ikke alle garanterer best mulig ytelse, og det er derfor det er viktig for kompilatorer å gjøre ineffektivt skrevet kildekode om til effektiv kode. Hvis kompilatorer mellom forskjellige språk er «oversettelser», er kompilatorer mellom samme språk mer en «redigerings-» eller «pensjonerings-» oppgave. Den første komplette kompilatoren regnes som Fortran-kompilatoren utviklet av John Backus i 10. Disse optimaliseringene gir mening for kompilatorer som oversetter et bestemt språk til det spesifikke språket. I de fleste tilfeller vil vi imidlertid aldri se den transformerte formen av språket, og det vil bli kompilert direkte til maskinspråk. Denne mellomformen mellom input og output i oversettelsesprosessen kalles en "mellomrepresentasjon". Hvis vi for eksempel oversetter et høynivåspråk til en assembler og deretter tilbake til maskinspråk, er assembleren den mellomliggende representasjonen.
En av grunnene til å uttrykke ting på samme språk er også lesbarhet. Uansett hvor gode optimaliseringene er, avhenger ytelsen til et program av programmererens ferdigheter. God kode er imidlertid ikke nødvendigvis lett å lese. Kode skrives ikke én gang og er ferdig; den må vedlikeholdes etter hvert som ting endrer seg. Hvis du ikke kan huske hundretusenvis av kodelinjer, må du lese og tolke den på nytt hver gang, og kode med kompleks logikk er ikke bare vanskelig å tolke, men feil i tolkningen kan føre til fatale feil i programmet ditt. Så det er viktig å gjøre det lettere for mennesker å forstå, ikke maskiner.

 

Om forfatteren

Forfatter

Jeg er en «kattedetektiv» og hjelper til med å gjenforene bortkomne katter med familiene deres.
Jeg lader opp med en kopp café latte, liker å gå turer og reise, og utvider tankene mine gjennom skriving. Ved å observere verden nøye og følge min intellektuelle nysgjerrighet som bloggskribent, håper jeg at ordene mine kan gi hjelp og trøst til andre.