Skillnaden mellan översatta och tolkade datorspråk ligger i * hur * källkoden (programmet skriven av en människa) körs av datorn. Båda konverterar mänsklig läsbar kod till maskinläsbara instruktioner, men de gör det vid olika tidpunkter och på olika sätt:
Översatt språk (sammanställda språk):
* Översättningsprocess: A * Compiler * tar hela källkodprogrammet som input och översätter det till ett komplett maskinkodprogram (eller en mellanliggande representation som sedan översatts till maskinkod) * innan * programmet körs. Denna process kallas ofta *sammanställning *. Den resulterande maskinkoden är en separat fil (som en ".exe" i Windows eller en körbar fil på andra system).
* exekvering: Den sammanställda maskinkoden körs sedan direkt av datorns processor.
* hastighet: Generellt snabbare exekvering eftersom översättningen görs i förväg och processorn kör optimerad maskinkod direkt.
* feldetektering: Kompileringsfel upptäcks * före * körtid. Kompilatorn kommer att identifiera syntaxfel och några semantiska fel under kompileringsprocessen.
* Portabilitet: Vanligtvis mindre bärbar. Ett sammanställt program för ett operativsystem eller arkitektur kommer vanligtvis inte att köras på en annan utan kompilation.
* Exempel: C, C ++, Go, Rust, Fortran
Tolkade språk:
* Översättningsprocess: En *tolk *tar källkodlinjen för rad (eller ibland i större bitar) och översätter och kör varje bit *omedelbart *. Det finns inget separat sammanställningssteg som producerar en fristående körbar.
* exekvering: Tolkaren läser, översätter och kör koden samtidigt. Den producerar inte en separat maskinkodfil.
* hastighet: Generellt långsammare exekvering på grund av översättningen på flygningen. Varje rad (eller bit) måste tolkas varje gång den körs.
* feldetektering: Fel upptäcks ofta endast under körtid. Tolkaren kanske inte fångar alla fel förrän den problematiska koden har körts.
* Portabilitet: Ofta mer bärbar. Så länge tolkaren är tillgänglig för en viss plattform kan källkoden vanligtvis köras.
* Exempel: Python, JavaScript, Ruby, Perl, PHP
hybridmetoder:
Det är viktigt att notera att skillnaden inte alltid är tydlig. Vissa språk använder en hybridmetod:
* Just-in-Time (JIT) Sammanställning: Språk som Java och C# sammanställer initialt källkoden till en mellanliggande representation (byte -kod). En JIT -kompilator översätter sedan denna mellanliggande representation till maskinkod *under runtime *. Detta kombinerar fördelarna med både tolkade och sammanställda språk:initial portabilitet (som tolkad) och snabbare exekvering av ofta använda kodavsnitt (som sammanställd).
Sammanfattningsvis:Compilation översätter hela programmet på en gång * före * exekvering, vilket leder till snabbare exekvering men mindre portabilitet och upptäckt i förhand. Tolkning översätter och kör kodlinje för rad, vilket ger bättre portabilitet men långsammare exekvering och detektering av runtime -fel. Många moderna språk använder hybridmetoder för att få det bästa av båda världarna.