Minden írt kódsort le kell fordítani a számítógépe által érthető nyelvre. De hogyan történik ez?

A magas szintű programozási nyelvek, például a PHP, a Swift és a JavaScript forráskódja kissé természetes nyelvnek tűnik. Az ilyen kódokban angol szavakat fog látni, és meg fogja tudni érteni a funkcióinak egy részét, még akkor is, ha magát a nyelvet nem ismeri. De az ilyen forráskódnak géppel olvasható formátumban kell lennie ahhoz, hogy a számítógép futtathassa a végső programot.

Ehhez a gépnek szüksége van egy közvetítőre, aki lefordítja a kódját valami feldolgozhatóvá. Ez a közvetítő lehet tolmács, fordító vagy összeszerelő. Mindannyian hasonlót csinálnak: a forráskódot egy ember által olvasható formából gépi olvasásra fordítják. De hogy csinálják, az egészen más.

Mi az a tolmács?

Egy tolmács egyenként beolvassa a kód minden sorát, és futás közben azonnal végrehajtja. A tolmács nem várja meg, hogy a teljes forráskód gépi kóddá alakuljon, mielőtt elküldi a CPU-nak. Ehelyett minden kódsort értelmező-specifikus bájtkóddá alakít, és minden utasítást végrehajt a fordítás során. Míg a végrehajtási feladat közvetlenül a tolmácsra támaszkodik, a CPU magát a tolmácsot látja el energiával.

instagram viewer

Mivel az egyes sorokat egyszerre elemzi és futtatja, a folyamat gyakran viszonylag lassabb. Ezt szem előtt tartva az értelmezett programozási nyelvek hibáit könnyű észrevenni, mivel azonnali visszajelzést adnak minden kódsorhoz.

Ennek a viselkedésnek a hátulütője azonban az, hogy egy futásidejű hiba összeomlik a program végrehajtása közben, ami rossz felhasználói élményt eredményez, különösen akkor, ha a projekt nem rendelkezik megfelelő teszteléssel.

Mi az a fordító?

Egy fordító beolvassa a forráskódot, és lefordítja azt gépi olvasható futtatható fájllá. Az interpreterrel ellentétben a teljes forráskódot egy mozdulattal beolvassa, gépi kódot generálva a későbbi CPU általi feldolgozáshoz. Mivel a fordító ezt a feladatot csak egyszer hajtja végre, a lefordított programok általában gyorsabbak és memóriatakarékosabbak.

A fordító azonban nem veszi figyelembe a futásidejű hibákat. Ehelyett fordításkor jelez bizonyos hibákat, ami általában jobb. Ez a fajta hiba a fejlesztés során jelenik meg, nem a program futása közben. Ne feledje azonban, hogy futásidejű hibák továbbra is lehetségesek, még a lefordított programokban is.

A legfontosabb különbségek

A tolmácsok és a fordítók egyaránt gyakoriak, ezért hasznos tudni a köztük lévő fő különbségeket.

Kódvégrehajtás: Bemeneti és kimeneti feldolgozás

Egy tolmács csak soronként gyűjthet össze, fordíthat le és hajthat végre minden bemenetet. A forráskód minden sorát szekvenciálisan futtatja, ahogy jön, és a végső kimenet attól függ, hogy az egyes sorok mit adnak ki a végrehajtás során.

A fordító a teljes forráskódot összecsomagolja, és csak egyszer fordítja le. Tehát a teljes forráskódot használja bemenetként, amelyet átalakít, és elküld a CPU-nak, hogy kimenetet kapjon.

Hibakeresés és hibakövethetőség

Az értelmezett kód esetében a hibák jobban nyomon követhetők, mivel az értelmező közvetlenül az eredeti forrásra hivatkozva jelentheti azokat. Ha azonban hiba történik a végrehajtás bármely pontján, a tolmács leáll. Tehát a hibakeresési hibák egy kicsit kihívást jelenthetnek, mivel futás közben kell reprodukálni őket. Még rosszabb is lehet, ha nem megfelelő a futásidejű naplózás.

Másrészt a futásidejű hibákat egy lefordított nyelven nehezebb lehet nyomon követni, mivel nincs értelmező, aki jelentést készítene róluk. De a fordításkor felfedezett hibákat általában könnyebb kezelni, mivel a fordító következetesen azonosítja őket.

A legtöbb lefordított nyelv rendelkezik a nem használt változók, a típus-inkompatibilitás és a hibás szintaxis észlelésére szolgáló mechanizmussal is, így korán megelőzi az ilyen jellegű hibákat.

Teljesítmény és sebesség

Ahogy az várható volt, egy fordító segít a gépnek gyorsabban futtatni a programkódot, mivel a CPU csak egyszer dolgozza fel a kódot. Ez nem így van a tolmácsoknál, amelyek futásidőben fordítanak le minden sort.

Bár vannak programozási elveket használhat Az értelmezett kód optimalizálása érdekében az értelmező továbbra is időt tölt az egyes sorok elemzésével és végrehajtásával, mielőtt a következőre lépne. Az értelmezett nyelvek gyorsabbá tételéhez azonban fordítósegítők állnak rendelkezésre.

Például a Chrome böngésző a V8-as motor segítségével dolgozza fel a JavaScriptet; ez a Just-In-Time (JIT) fordítón fut. A Pyinstaller modul egy másik segédprogram, amely egy Python-szkriptet köt össze és futtatható csomagba fordít.

Noha ezek a segítők hasznosak egy tolmácsolt nyelv fordítóprogramba történő összevonásához, ez nem változtat azon a tényen, hogy az alapfordító továbbra is tolmács.

Memóriahasználat

Az értelmező és a fordító memóriahasználati viselkedése relatív, és gyakran a forráskódtól és egyéb tényezőktől függ. Míg egyes programozók azzal érvelnek, hogy a kódfeldarabolás a tolmácsokban csökkenti a memóriahasználatot, a tolmácsok az összesített memóriahasználatot is rögzítik.

Például amikor megvizsgálja a Python kódjának memóriahasználati profilja, az általa fogyasztott memória mennyisége meglepheti Önt.

Általánosságban elmondható, hogy a lefordított programok kevesebb futásidejű memóriát igényelnek. Mivel a teljes forráskódot előre gépi olvasásra alakítják át, kevesebb munkát adnak a CPU-nak. Ez ellentétben áll a tolmácsokkal, amelyek csak futásidőben fordítják le a kódot.

Programozási nyelv támogatás

A tolmácsnak és a fordítónak tisztességes része van programozási nyelv elosztása. Néhány népszerű lefordított nyelv a C, C#, Rust és Golang. Az értelmezett nyelvek is népszerűek, köztük a Python, a JavaScript és a PHP.

Több programozó inkább az értelmezett nyelveket részesíti előnyben. Míg a JavaScript és a Python tolmácsokat használ, összességében ezek a két legkeresettebb nyelvek 2023-as Stack Overflow fejlesztői felmérés. A Rust és a C# az ötödik és hatodik helyen álló csoportokat képviseli.

Ahol az értelmezett nyelvek ragyognak

A tolmácsok ezeken a területeken ragyognak:

  • Könnyű hibakövetést tesznek lehetővé, mivel az értelmező minden kódsort külön hajt végre.
  • Az értelmezett nyelvekkel gyakran gyorsabb egy minimális életképes termék elérése korábban, mivel ezek szintaxisa kevésbé bonyolult a lefordított nyelvekhez képest.
  • A statikusan tipizált fordított nyelvekkel ellentétben az értelmezett nyelvek dinamikus gépelést használnak, csökkentve a kód bonyolultságát és javítva az olvashatóságot.

Ahol a fordított nyelvek nyernek

Mi a helyzet a fordítókkal? Íme néhány szempont, amiben a nyelvük bizonyos erősséget mutat:

  • A lefordított nyelvek általában gyorsabban futnak le, és kevesebb futásidejű memóriát igényelnek, mivel a kódfordítás csak egyszer történik előre.
  • A fordítás utáni végrehajtás segít a hiba korai felismerésében. A fordító biztosítja, hogy a központi telepítés sikertelen legyen, ha hiba történik. Ez jobb, mint a hibák elkapása futás közben.
  • Bár statikusan írják, a lefordított nyelvek egyértelműen meghatározzák a változók és a függvények szándékait, így dokumentáltabbak.

A megfelelő fordító kiválasztása projektjéhez

Amint láthattad, a fordítónak és a tolmácsnak megvannak a saját területei, ahol kiemelkednek. Míg egyes programozók azt állítják, hogy a lefordított nyelvek összességében gyorsabbak és jobbak, mások azzal érvelnek, hogy a teljesítmény a kódszerkezettől és a platformtól függ.

De még ennél is fontosabb, hogy a fordító kiválasztása a technikai mechanizmusokon kívül számos más tényezőtől is függjön. A tanulás könnyedsége, a közösség és a projekt szándéka azon tényezők közé tartozik, amelyeket figyelembe kell venni az értelmezett és a lefordított nyelvek közötti választás során.