Az informatika térhódításával egyre nagyobb szerephez jutnak a magasabb szintű fejlesztési környezetek, mint a .NET és a Java. Eme platformokon a fejlesztés egyszerűbb, kényelmesebb, gyorsabb, ezekből kifolyólag pedig olcsóbb is. Ezzel párhuzamosan háttérbe szorul az optimalizáció, a menedzselt virtuális gépben történő futtatás teljesítménye gyengébb, mint egy natív alkalmazásé.
Mind a fejlesztő, mint a fordító viszonylag kevés hatással van a program sebességére, gyakori, hogy a fejlesztők profilerek segítségére szorulnak egy‐egy szűk keresztmetszet elhárításakor. Sok esetben a teljesítménybeli hátrány nem probléma, mivel a processzorok is egyre gyorsabbak, illetve az igazán sebességkritikus alkalmazások még mindig C/C++ nyelven íródnak, de ez változni látszik. Létezik már .NET‐re írt operációs rendszer (Singularity) és Java bájtkódot futtató processzor is.
Időszerű tehát, hogy olyan újabb optimalizációs módszerek után kutassunk, amik a menedzselt platformokon is életképesek. Egy ilyen módszer a kódgenerálás, ami azt jelenti, hogy egy általános érvényű algoritmusból futtatás előtt egy optimálisabb verziót generálunk úgy, hogy adott paraméterek konkrét értékeit vagy egyéb extra tudást is figyelembe veszünk. A mai fordítók egy forráskódból egy binárist készítenek, viszont ha megengedjük, hogy eltérő feltételekhez, argumentumokhoz alkalmazkodva több példány létezzen, amelyeket dinamikusan, igény szerint generálunk és használunk, korábban nem tapasztalt előnyökhöz jutunk. Már létező implementációk vizsgálata alapján nagyon sok utasítást, feltételes elágazást megspórolhatunk, ez menedzselt esetben is számottevő, és ha egy generált példányt elég sokszor felhasználunk, akkor hosszú távon fél vagy akár egy nagyságrendnyi gyorsulást is elérhetünk. A kódgenerálás nyilvánvaló hátránya, hogy a program mérete a többszörösére növekszik, de ez nem probléma, hiszen a tárhely jelenleg sokkal olcsóbb, mint a számítási teljesítmény. Az igazi probléma, hogy még csak nagyon specifikus, egyedi implementációk léteznek, és ezek bonyolultak, nehezen karbantarthatóak: főleg assembly szinten vagy stringben tárolt kódsablonok alapján dolgoznak, és az ilyen kódokat nagyon nehéz elkészíteni, verifikálni, tesztelni és módosítani is.
Célom egy olyan szoftver alapvető funkcionalitású kísérleti verziójának elkészítése, ami képes automatizálni ezt a kódtranszformációt a .NET platformon. A szoftvernek képesnek kell lennie arra, hogy beolvasson egy függvényt, és a fejlesztő‐felhasználó irányításával elvégezze a különböző transzformációs és optimalizációs műveleteket. Egy ilyen alkalmazás teljesen felváltja az egyedi megoldásokat, a probléma magas szintű kezelésével a karbantarthatóság többé nem akadály, hiszen a fejlesztő a hagyományos fejlesztési modellt követi, csak egy általános érvényű algoritmust kell implementálnia, minden más automatikus. A szoftver fejlettebb verzióitól még az eddigi egyedi megoldásoknál is nagyobb mértékű gyorsulást várhatunk.


Szólj hozzá!