kódgenerálási algoritmusok

Kód generáció programozás Microsoft.NET platform

bevezetés
Kód generáció „a homlokon”
Kód generációs sablonok
Code-termelés XSLT sablonok
Code-termelés ASP.NET
Kódgenerálási több nyelven
Kód generáció több nyelvet CodeDOM sablonok
Kódgenerálási futásidőben

kódgenerálási algoritmusok

Nem titok, hogy néha, amikor a programozás bizonyos feladatokat kell végrehajtania a nagy mennyiségű unalmas rutinmunka, hogy eltűnjön ez a rendszeres segítségével a PFSZ nem sikerül. Sőt, a helyzetet súlyosbítja, hogy nincs generikus típusok a .NET nyelven.

A .NET-keretrendszer kódot generáció is használják elég gyakran. Például a kódgenerátor alapján XSD-fájlt az adatok séma beírt adathalmazok (gépelt adatsorok), Proxy osztályokat létrehozni webes szolgáltatások segítségével a kód generátor. A futási kódot generál a teljesítmény javítása érdekében System.Xml.Serialization.XmlSerializer osztályok, System.Text.RegularExpressions.Regex, System.Web.UI.PageParser.

Kód generáció „a homlokon”

Az első dolog, hogy általában jut eszünkbe -. Generál kódot bármilyen programozási nyelv „közvetlenül” Tegyük fel, hogy szeretne egy bizonyos sor tulajdonságokat leíró generált osztályok. Mi határozza meg a leírás formájában xml-file:

Ezt a leírást az egyik projekt épít, mint erőforrás.

Hogy képviselje az osztály szerkezetét a program létrehoz egy sor osztályok, ami fut kódot algoritmussal. Manuális létrehozása egy objektum ábrázolása XML használja a XmlSerializer osztályban.

A XmlSerializer osztály egy-soros objektumot xml. Ebben az esetben, ellentétben a formátum által kiadott SoapFormatter, ebben az esetben az XML formátum alkalmas arra, hogy egy alaposabb vizsgálatot. Különösen a következő példa erre a name attribútum XmlRoot gyökér címkejellemzőn XmlAttribute adott megőrzése ingatlanok az attribútum értéke a megadott néven, attribútumok és XmlArray XmlArrayItem módon mutatja tömbök és listák.

És bár az „értelmes” funkció nem változott, ez rövidebb lett, és ami még fontosabb, sokkal tisztábban olvasása közben. Azokban az esetekben, ahol sok a statikus szöveget, például abban az esetben, gépelt gyűjtemények, egy ilyen megközelítés sokkal kényelmesebb az első. Azonban a mi példánkban a kódgenerátor meglehetősen sok kézi kódot. Ennek fő oka az, hogy szükség van, hogy végre kézi ismétléseket. Jó lenne az iterációs pont közvetlenül a sablont. Akkor, persze, írja a megfelelő makro processzor, de megyünk a másik irányba. Az általunk használt kész megoldást.

Code-termelés XSLT sablonok

Az egyik kész megoldásokat hozzon létre egy sablon része a szabványos W3C XSL - XSL transzformáció, rövidítve XSLT. Ez a technológia célja, hogy konvertálni xml-fájlt egy másik nézet és nagyon nagy rugalmasság.

XSLT egy optimalizált programozási nyelv az átalakítás harcszabályzattal célkitűzéseit. XSLT-fájl egy sor szabályt említett címkék sablon. Ezzel szemben a klasszikus nyelvek, XSLT ismerteti az átalakulás nem egy műveletsor, valamint egy sor szabályt, hogy alkalmazzák a csomópontok a bemeneti XML. Minden szabály tartalmaz egy logikai függvény, állítmány, gondolván, hogy meg tudja határozni, hogy alkalmas az aktuális csomópontot. Abban az esetben, XSLT leírni ilyen különleges nyelvi funkciók, XPath. Ha az állítmány igazat ad vissza, a tartalmát a szabályok végezzük, amely a statikus szöveget és egy sor címkék hasonlító szintaxis logikai nyelvek - .. Stamp értékek hurok állapot, stb Ezen kívül, a tag apply-templates van megadva beágyazott továbbra feldolgozó csomópontok. Fájl feldolgozást elvégezték, kezdve a gyökér.

Teljes leírás XSLT megtalálható a honlapon World Wide Web Consortium, www.w3c.org

Minden kód generátor készen áll.

Kódgenerálási több nyelven

Microsoft.NET platform támogat programot több nyelven. Ha fontos, hogy ne csak kap a végeredmény, de hogy a forráskód raznyz programozási nyelvek is nagyon kívánatos, hogy támogatja a több nyelven. Azonban a fent említett példák a termelők hozzá a nyelvi támogatás, vagy szükség van egy teljes újraírása, vagy legalábbis teljes megváltoztatását mintákat. Hogy oldja meg ezt a problémát, a Microsoft kínál technológia CodeDOM.

A folyamat kódgenerálást használja ezt a technológiát a következő. Először épített fa általános szintaxis a nyelv, amelyet azután CodeDOM szolgáltató-specifikus nyelv alakítjuk az eredeti szöveg.

Hagyja végre kód generátor az első példa segítségével CodeDOM.

Kódgenerátor Visual Basic.NET hozna be az alábbi kódot:

De ez könnyű észrevenni, hogy csak a fenti példában ugyanaz hátránya, amellyel küzdött az egész cikket, nevezetesen a generációs statikus (változatlan) a kód egy részét. Sajnos, ezek a megközelítések, hogy szoktuk ez a hiányosság, abban az esetben a többnyelvű konfiguráció már nem alkalmas.

Kód generáció több nyelvet CodeDOM sablonok

Nyilvánvaló, hogy ebben az esetben a sablon létrehozásához be kell mutatni, mint egy CodeDOM-fa. A kérdés csak az, hogyan lehet ez. Akkor, persze, hogy szedje szét a forráskód a C # ugyanaz, de az ilyen nyelvi elemzés - nem könnyű, és nem minden tervez a C # lehet kifejezni a CodeDOM.

Ezért, mint a leíró nyelv CodeDOM használható sablon nyelv értelmező kész - XML.

Sajnos, ez a cikk nem valósítható meg a leírása XML-elemző CodeDOM minden jellemzőjét, így végrehajtása csak az a része, ami szükséges, hogy végre egy példát. Végrehajtására használható ugyanúgy, letöltöttük a nyers adatokat, azaz a XmlSerializer. A osztályok, amelyek képviselik a minta elem határozza meg egy absztrakt alap osztály:

Ez akkor nyilvánítja egy virtuális módszer, amely visszaadja az elem megfelelő elem minta CodeDom. A teljes forráskódját az osztályokat betölteni az XML tartalmazza a magazin CD-n.

Most végre a sablont. Mivel mind a bemeneti és kimeneti adatot az XML, majd XSLT transzformáció.

Hasonló technikával, lehetséges, hogy egy igen hatékony algoritmusok vannak optimalizálva specifikus adat. Teljesítmény az illetékes végrehajtását kódgenerálást összehasonlítható teljes manuális végrehajtása algoritmusok konkrét adatokat. Például, deserializing sebesség XmlSerializer fa struktúra lényegében azonos, mint a kézi leolvasás a XMLReader, és jelentősen (2-3-szoros) nagyobb SoapFormatter sebesség alkalmazásával univerzális algoritmus és a mechanizmus a reflexió (visszaverődés). A sebesség az ASP.NET, egy kódgenerálást komplex algoritmusok lényegesen nagyobb sebességgel ASP segítségével értelmezni.

Ugyanakkor ott van a példa, és az egyetlen hátránya, hogy bizonyos esetekben jelentősen. Összeállítása forráskód - ez egy nagyon lassú folyamat. Meg lehet jegyezni, például úgy, hogy jelentős késéssel aspx oldalas terhelés, amikor módosítjuk. De ebben az esetben, van egy módja - .NET Framework lehetővé teszi, hogy hozzon létre egy összeállítást közvetlenül az IL-kódokat.

Ha csak a kirakás közben teljes domain generációs szerelés kirak a memóriából. Ezért, amikor a gyakori regenerálás szerelvény jobb lesz külön domaint és kirakott, hogy a domain amint a szükségességét, hogy eltűnik.

Kódgenerálást közvetlenül az IL-kódot

Létrehozásához részegységek „on the fly” gondolkodási mechanizmust biztosít egy sor lehetőséget azonosított System.Reflection.Emit névtérben. Próbáljuk generálni osztályok egyszer a közgyűlés, megakadályozva, hogy a forráskódot és fordítsd.

következtetés

A fenti példák azt mutatják, hogyan kell használni kódgenerálást építeni a leginkább rugalmas és alkalmazkodó rendszerek nélkül élő használt nyelv.

Sajnos kódgenerálási van egy komoly hátránya - az eredmény a kódot generáció nem lehet megváltoztatni. Az utóbbi időben azonban a piacon vannak olyan rendszerek, amelyek nem csak generálni kódot az adatszerkezetet, hanem átalakítani a kódot vissza az eredeti adatokat. Ezt úgy érjük el, elemzés a generált kódot, és összehasonlítva az eredeti struktúrák és a fák származó érzékelési kézzel változik, hogy később, a következő generáció, figyelembe veszi ezeket a változásokat. A legvalószínűbb, az szereti a jövőbeni rendszerek.

Kapcsolódó cikkek