Forskjeller mellom kompilatorer og tolker

Før Java og C # programmeringsspråk dukket opp, dataprogrammer var bare kompilert eller tolket. Språk som Assembly Language, C, C ++, Fortran, Pascal ble nesten alltid samlet til maskinkode. Språk som Basic, VbScript og JavaScript ble vanligvis tolket.

Så hva er forskjellen mellom et kompilert program og et tolket program?

kompilering

Slik skriver du et program:

  1. Rediger programmet
  2. Sett sammen programmet i maskinkodefiler.
  3. Koble maskinens kodefiler til et kjørbart program (også kjent som en exe).
  4. Feilsøk eller kjør programmet

Med noen språk som Turbo Pascal er Delphi trinn 2 og 3 kombinert.

Maskinkodefiler er selvstendige moduler med maskinkode som krever kobling sammen for å bygge det endelige programmet. Årsaken til å ha separate maskinkodefiler er effektivitet; kompilatorer trenger bare å kompilere på nytt kildekode som har endret seg. Maskinkodefilene fra uendrede moduler gjenbrukes. Dette er kjent som å lage applikasjonen. Hvis du ønsker å kompilere og gjenoppbygge all kildekode, kalles det Build.

instagram viewer

Kobling er en teknisk komplisert prosess der alle funksjonssamtaler mellom forskjellige moduler er koblet sammen, hvor minneplasseringer blir tildelt variabler og all koden er lagt ut i minnet, deretter skrevet til disk som et komplett program. Dette er ofte et tregere trinn enn å kompilere, da alle maskinkodefilene må leses i minnet og kobles sammen.

tolke

Trinnene for å kjøre et program via en tolk er

  1. Rediger programmet
  2. Feilsøk eller kjør programmet

Dette er en langt raskere prosess, og det hjelper nybegynnere som programmerer å redigere og teste koden deres raskere enn å bruke en kompilator. Ulempen er at tolkede programmer går mye saktere enn kompilerte programmer. Så mye som 5-10 ganger saktere som hver kodelinje må leses på nytt og deretter behandles på nytt.

Skriv inn Java og C #

Begge disse språkene er semikompilert. De genererer en mellomkode som er optimalisert for tolkning. Dette mellomspråket er uavhengig av den underliggende maskinvaren, og dette gjør det enklere å port programmer skrevet i enten til andre prosessorer, så lenge det er skrevet tolk for det maskinvare.

Java produserer, når den er satt sammen, bytekode som tolkes under kjøring av en Java Virtual Machine (JVM). Mange JVM-er bruker en Just-In-Time-kompilator som konverterer bytekode til egen maskinkode og deretter kjører denne koden for å øke tolkningshastigheten. Faktisk blir Java-kildekoden kompilert i en totrinns prosess.

C # er satt sammen til Common Intermediate Language (CIL, som tidligere var kjent som Microsoft Intermediate Language MSIL). Dette drives av Common Language Runtime (CLR), som er en del av .NET-rammeverket, et miljø som tilbyr støttetjenester som søppelinnsamling og Just-In-Time-kompilering.

Både Java og C # bruker speedup-teknikker, så den effektive hastigheten er nesten like rask som et rent sammenstilt språk. Hvis applikasjonen bruker mye tid på input og output som å lese diskfiler eller kjøre database spørsmål, så er hastighetsforskjellen knapt merkbar.

Hva betyr dette for meg?

Med mindre du har et veldig spesifikt behov for hastighet og må øke bildefrekvensen med et par bilder per sekund, kan du glemme hastigheten. Noen av C, C ++ eller C # vil gi tilstrekkelig hastighet for spill, kompilatorer og operativsystemer.