Der er mange måder at skelne mellem programmeringssprog på. Til at begynde med falder de ind i forskellige paradigmer: funktionelle, objektorienterede og mere.
Du kan også klassificere et programmeringssprog efter dets oversættelsesmetode, noget der har en stor effekt på et sprogs ydeevne. Kompilerede programmeringssprog er normalt hurtigere end fortolkede. Så i situationer som spiludvikling, der kræver hastighed, har udviklere en tendens til at bruge kompilerede sprog.
Hvad er oversættelse?
Oversættelsesprocessen konverterer kode skrevet af en programmør til maskinkode, som en computer kan udføre. Maskinkode er en type sprog på lavt niveau, som har etere og nuller. Så det, oversætteren gør, er at konvertere den højniveaukode, du opretter i et programmeringssprog, til maskinkode.
Uden oversættere ville du skulle kode på maskinsprog. Hvert programmeringssprog på højt niveau, som du kender, bruger en af tre oversættelsesmetoder: en compiler, en fortolker eller en hybrid af de to.
Hvad er en compiler?
En compiler er software, der konverterer kildekode skrevet på et højt niveau sprog til lavt niveau kode til udførelse.
Diagrammet ovenfor repræsenterer en compiler i sin mest grundlæggende form. Compileren har flere faser. Hver fase transformerer koden fra en tilstand til en anden. Målet med hver kompileringsfase er at skabe et output, der er lettere for den efterfølgende fase at manipulere. Den generelle struktur af en compiler er som følger:
- Scanner: denne fase tager en strøm af tegn og grupperer dem i tokens, der repræsenterer identifikatorer, strenge bogstaver og så videre.
- Parser: denne fase grupperer tokens baseret på grammatikken for kildeprogrammeringssproget. Det skaber et abstrakt syntakstræ, som er en samling af udtryk, der udgør programmet.
- Semantik: Denne fase udfører en semantisk analyse på det abstrakte syntakstræ (AST). Den bruger kildesprogets regler til at tilføje betydning ved at tildele typer til AST-udtrykkene og kontrollere deres gyldighed. AST bliver så en mellemrepræsentation.
- Mellemrepræsentation (IR): denne fase konverterer det originale programs kildekode til maskinkode. Det producerer en forenklet version af monteringskoden. IR'en bruger en eller flere optimeringsprogrammer til at forbedre IR-koden og til at indsamle information om den maskine, den kører på. En optimizer kan gøre et program mere effektivt, hurtigere eller endnu mindre.
- Kodegenerator: denne fase forbruger den optimerede IR-kode og konverterer den til maskinkode.
Hvilke programmeringssprog bruger kompilatorer?
Nogle populære kompilerede programmeringssprog inkluderer:
- C
- C++
- Gå
- Ada
- Fortran
- COBOL
- Lisp
- Mål-C
- Swift
En fordel ved at bruge et kompileret sprog er, at det identificerer fejl under kompilering. Dette lader dig rette sådanne fejl og derefter prøve at kompilere programmet igen. Kompilerede sprog er mindre tilbøjelige til at fejle, når de begynder at udføre. Disse sprog vil ikke engang generere et program til at køre, hvis kildekoden har syntaksfejl. Men semantiske fejl og andre former for runtime-fejl vil komme forbi det.
Kompilerede sprog udføres også meget hurtigt, efter at de kompilerede.
Hvad er en tolk?
En tolk er et program, der oversætter og udfører en enkelt linje kode ad gangen. Denne proces gentages, indtil tolken kommer til den sidste kodelinje i det givne program eller script.
Som du kan se af diagrammet ovenfor, tager en tolk to input. Først tager det hele kildekoden (programmet). Den læser derefter den første linje i programmet (som input), oversætter og udfører den. Hvis den linje udføres korrekt, går den videre til næste linje i programmet eller scriptet.
I modsætning til en compiler oversætter en tolk ikke et helt program til maskinkode. I stedet analyserer og analyserer den en given kodelinje, før den udføres. En tolk bør begynde at køre et program – især et større – før en compiler overhovedet er færdig med at oversætte det.
Hvilke programmeringssprog bruger tolke?
Nogle populære fortolkede programmeringssprog inkluderer:
- Python
- JavaScript
- Perl
- MATLAB
- GRUNDLÆGGENDE
Selvom en tolk begynder at udføre kode hurtigere, vil den stadig fejle, hvis den støder på en fejl. Som programmør skal du rette en sådan fejl og genstarte programmet. Denne hændelse opstår, hver gang tolken støder på en ny fejl. Nogle fejl kan ligge i dvale, hvis de vedrører et sjældent sæt omstændigheder. I sådanne tilfælde, test er vigtigere end nogensinde.
Tolke er normalt nemmere at udvikle end compilere, og deres programmer er mere bærbare af design.
Hvad er hybrid oversættelse?
Hybrid oversættelse anvender en compiler og en tolk. Hybrid oversættelse kompilerer kildekode på højt niveau til en form på lavere niveau, såsom bytekode. Den bruger derefter en fortolker til at køre den bytekode.
Hybrid oversættelse kan variere fra et programmeringssprog til et andet, men vil bruge denne generelle struktur. Et af de mere populære programmeringssprog, der bruger hybrid oversættelse, er Java. Java-kompileren oversætter sin kildekode til Java Virtual Machine (JVM) bytekode. Fortolkeren oversætter derefter JVM-bytekoden til maskinkode.
Hvilke programmeringssprog bruger hybrid oversættelse?
Nogle populære hybridprogrammeringssprog inkluderer:
- Java
- C#
- Visual Basic
- Erlang
- F#
Med hybrid oversættelse får du det bedste fra begge verdener. At kompilere koden først giver dig mulighed for at løse fejl ved den tidligste lejlighed. Bytekoden, som hybride compilere opretter, er lettere at fortolke end en programkildekode på højt niveau.
Værdien af at kende de forskellige oversættelsesmetoder
Du bør forstå den specifikke oversættelsesmetode, som et sprog bruger, især hvis du bruger det til et nyt projekt. En sprogoversættelsesmetode er en vigtig del af et programmeringssprogs identitet. Det kan påvirke, hvordan du distribuerer dit program, og hvordan brugerne vil køre det.
Hver oversættelsestilgang har sine egne fordele. Topprogrammeringssprog som C++, Python og Java bruger alle forskellige oversættelsesmetoder. Ved siden af et sprogs paradigme er dets oversættelsesmetode en af de vigtigste egenskaber, du bør være opmærksom på.
Der er flere paradigmer, som et programmeringssprog kan bruge. De fleste af de bedste programmeringssprog er multi-paradigme sprog; de understøtter brugen af to eller flere forskellige paradigmer. Tre af de mest populære paradigmer er imperativ, objektorienteret og funktionel programmering.