Fordító és tolmács
Igen, igen. Ez egy újabb kérdés a fordító és a tolmács közötti különbségről. Csak azok a válaszok adják meg, amelyeket általában megadnak.
Általában azt mondják, hogy a fordító valamilyen kernel kódját fordítja le a végrehajtható fájlra, és akkor is, ha végrehajtja, a kódot közvetlenül a processzor hajtja végre. A tolmács esetében a program végrehajtása során egy speciális program-tolmács olvassa le a program soros soros forráskódját és végrehajtja azt. Lépésről lépésre. Azt mondják, hogy nem könnyű írni a fordítóprogramokat.
Valójában ez a kérdés. Ha ennek eredményeképpen a program fut, mi a valójában a különbség végezzük, ha a gépi kódot, vagy az első tolmács csinál valamit a forráskódot, majd később végrehajtani - a végén, a processzor teljesítményét ugyanazon a gépen utasításokat. Mi a különbség? Nyilvánvaló, hogy nem az a tény, hogy a fordító tárolja a gépi kódot a fájlban előre és interpretetor nem) Nos, mondjuk megértem, hogy a tolmács program ha-s egy része soha nem lehet nem hajtották végre, és ezért nem fordította gépi kódra . De aztán megint, valószínűleg nem az a probléma, hogy nehéz lefordítani az összes ha-s számítógépes kódot előre, hogy az, hogy lefordítani a kódot.
Röviden, milyen különbségek és komplikációk vannak a fordító végrehajtásában, ellentétben a tolmácskal?
A tolmács nem generál gépi kódot. Ehelyett minden értelmezett parancsot külön funkciónak (amely a tolmácskód részét képezi) hívja fel, amely minden munkát elvégez.
A fordító (mind a szokásos, mind a JIT) először gépi kódot generál, amelyet a processzor azonnal végrehajtásra késztet.
A fordító minden munkát egyszer (a program építésénél) végez, és a tolmács minden alkalommal, amikor elolvassa a következő utasítást. Vagyis, ha a futásidejű fejléc összeállítása kisebb, és annál magasabb a végső kód sebessége.
Most a fordító végrehajtásának összetettségéről. A tolmács egyszerűen megveszi és végrehajtja a program következő kifejezését; de hogyan kell csinálni - azonnal elfelejti (persze, miután megmentette az eredményt). A fordító arra kényszerül, hogy globálisabban gondolkodjon: léteznek optimalizálások és intermoduláris import / export szervezetek (elvégre a program sok forrásfájlból állhat). Ezenkívül a fordítónak meg kell felelnie bizonyos megállapodásoknak és szabványoknak a más eszközökkel való kölcsönhatás érdekében (pl. Linker); a tolmács egy "dolog önmagában", önállóan végzi az összes munkát.
"fordító és tolmács" nem teljesen helyes kérdés. A dolgok teljesen más. Compiler - átalakítja a forráskódot egy futtatható (gép, amelyet egy processzor által végrehajtott, vagy bármilyen közvetítő, ami fut a virtuális futási környezet). A tolmács végrehajtja a forráskódot is. Látod a különbséget. A fordító átalakítja (összeállítja), és a tolmács végrehajtja (értelmezi). Talán másképp akarta feltenni a kérdést: mi a különbség a összeállított yap és az értelmezett yap között. A különbség nyilvánvaló: a második végrehajtható, és ehhez nincs szükség további eszközökre. Nos, általában megpróbálom összefoglalni: a végén, igen, a végén van egy változás a processzor állapotát a valós fizikai processzor, és ez csökkenti a teljesítményt a programot. De valójában vannak különbségek: 1) összeállított nyelv speciális eszközökre van szükség (fordítóprogramok), a végtermék részben védett és nehezen kap a forráskódot, a végtermék sokkal kompaktabb. mert bináris utasításokból áll, és nem emberi érthető szavakból. A végtermék gyorsabban fut - mert leírja azokat a utasításokat, amelyeket a célplatform közvetlenül támogat. 2) az értelmezett nyelv végrehajtása úgy történik, ahogy nincs - nincs további követelmény. eszközök, amelyek végső állapotba hoznak, nem védettek - bárki ellophat és megváltoztathatja. Megértettem, hogy nyilvánvaló dolgokat írtam. Nem értem, hogy bármi mást szeretne hallani.
Ha a komplexitásról van szó, akkor a fordító és a tolmács egyformán összetett lehet írásban. Ha a nyelv összetett, akkor minden esetben nehezebben értelmezhető a lexémák, függetlenül attól, hogy milyen célból kell végrehajtani vagy összeállítani. Nos, csak az a pillanat, amikor a fordító előtt mindig a feladata lesz, hogy utasításokat adjon neked egy kanonikusnak