Futásidejű fordítás

A Wikipédiából, a szabad enciklopédiából

A futásidejű fordítás (angolul just-in-time compilation, JIT), a bájtkód-fordított rendszerek teljesítményének növelésére szolgáló technika. A bájtkódot futási időben fordítja natív kódra. A futásidejű fordításhoz két korábbi futtató környezet adta az ötletet: a bájtkódfordítás (bytecode compilation) és a dinamikus fordítás (dynamic compilation).

Egy bájtkódfordított rendszerben (ilyen a Java, a .NET nyelvek, Perl, a GNU CLISP) a forráskódot egy köztes kódba fordítják, amit bájtkódnak neveznek. A bájtkód nem gépi kód egy adott processzorra, így hordozható a különböző számítógép-architektúrák között. A bájtkódot aztán értelmezik vagy egy virtuális gépen futtatják.

A dinamikus fordítókörnyezetben a fordító futás közben végzi feladatát. Például a legtöbb Common Lisp rendszer rendelkezik egy compile függvénnyel, ami képes a futás közben keletkezett új függvények lefordítására. Az előnye az interaktív hibakeresés, viszont ez az előny kész rendszerek esetén nem túl hasznos.

Egy JIT környezetben a bájtkódra fordítás az első lépés, azaz a forráskód hordozható és optimalizálható köztes reprezentációra alakítása. A bájtkódot telepítik a célrendszerre. A kód végrehajtása során a futtatókörnyezet fordítója fordítja azt natív gépi kódra. Ezt meg lehet fájl vagy függvény alapon tenni: a függvényeket csak végrehajtáskor szükséges lefordítani, (innen jön a „just-in-time”, éppen időben kifejezés).

A cél a natív- és a bájtkódfordítás előnyeinek egyesítése. Az eredeti forráskód feldolgozása és az alapvető optimalizálás fordítási időben történik, jóval a futtatás előtt – a bájtkódról gépi kódra történő fordítás jóval gyorsabb, mint forráskódról. A keletkezett bájtkód hordozható, nem úgy, mint az architektúrához kötött gépi kód. A bájtkódról gépi kódra fordítók megírása is egyszerűbb, mivel a bájtkódfordító elvégzi a munka nehezét.

Történelem[szerkesztés | forrásszöveg szerkesztése]

A dinamikus fordítás úttörője egy kereskedelmi Smalltalk-implementáció volt a 80-as évek elején, ami ma VisualWorks néven ismert.

A Sun HotSpot Java virtuális gép implementációja a sikeres JIT-implementáció egy példája.[1] Két részből áll:

  • Egy „kliens” fordító, ami gyors fordítási sebességet biztosít a rövid életű alkalmazások számára,
  • Egy „szerver” fordítót, ami erősen optimalizált kódot állít elő hosszú életű alkalmazások számára.

A felhasználó választhat a dinamikus fordítók közül az adott alkalmazás sajátosságainak megfelelően.

A Microsoft is egy JIT-alapú rendszert választott a .NET-környezet számára, valamint a Crusoe processzor is hasonló módszert használ hardver szinten. A Parrot virtuális gép is JIT-et használ. A Psyco egy Python JIT-fordító.

Lásd még[szerkesztés | forrásszöveg szerkesztése]

Jegyzetek[szerkesztés | forrásszöveg szerkesztése]

Források[szerkesztés | forrásszöveg szerkesztése]