Metaprogramozás

A metaprogramozás  olyan programozási típus , amely olyan programok létrehozásához kapcsolódik, amelyek munkájuk eredményeként más programokat generálnak [ 1] (különösen a forráskódjuk fordításának szakaszában ), vagy olyan programokat, amelyek futás közben változnak ( önmódosító kód ) ). Az első lehetővé teszi, hogy kevesebb idővel és erőfeszítéssel kapjon programokat a kódoláshoz, mintha a programozó teljesen kézzel írta volna őket, a második pedig a kód tulajdonságainak (méretének és sebességének) javítását teszi lehetővé.

Kódgenerálás

Ezzel a megközelítéssel a programkódot nem manuálisan írják, hanem egy másik programon alapuló generátorprogram automatikusan létrehozza.

Ennek a megközelítésnek akkor van értelme, ha a programozás során különféle kiegészítő szabályokat dolgoznak ki (magasabb szintű paradigmák , külső könyvtárak követelményeinek teljesítése, sztereotip módszerek bizonyos funkciók megvalósítására stb.). Ebben az esetben a kód (vagy adat) egy része elveszti értelmes jelentését, és csak a szabályok mechanikus megvalósításává válik. Amikor ez a rész jelentőssé válik, felmerül az ötlet, hogy csak a tartalmi részt állítsuk be kézzel, a többit pedig automatikusan adjuk hozzá. Ezt csinálja a generátor.

A kódgenerálásnak két alapvetően különböző típusa van:

  1. a generátor egy fizikailag különálló bináris program, amely nem feltétlenül a célnyelven van megírva.
  2. a célnyelv egyben a generátor implementációjának nyelve is, így a metaprogram egyetlen egészet alkot a célprogrammal.

Az első eset leggyakoribb és legnyilvánvalóbb példája a GUI builders , ahol a metaprogram a felhasználói programozást célozza meg , lehetővé téve, hogy a nem programozó ergonómusok közvetlenül részt vegyenek a szoftvertermékek fejlesztésében. Ebben az esetben a metaprogram nyilvánvalóan sokkal bonyolultabbnak, nagyobb és időigényesebbnek bizonyul, mint az általa generált kód, fejlesztését pedig használatának gyakorisága indokolja. Meg kell jegyezni, hogy a gyakorlatban általában (de nem feltétlenül) az ilyen metaprogramokat kötelező nyelveken írják a kötelező nyelveken való használatra, és lefordított formában szállítják. Ennek a módszernek az a hátránya, hogy új, összetettebb metaprogramok fejlesztése során nem lehet újra felhasználni a metaprogram kódját.

További példák az elemző és lexer generátorok , mint például a Lex , YACC , ANTLR , bison .

A második eset a nyelvi beágyazás , és három statikus módszerrel valósítják meg nyelvi makrók vagy tiszta beágyazás használatával. Ebben az esetben a metaprogramok fejlesztése során felhalmozott tapasztalatok intenzíven újrahasznosíthatók a jövőben új metaprogramok fejlesztéséhez [2] .

Egyéb példák:

Önmódosító kód

Az a képesség, hogy futás közben módosítani vagy hozzáadni tudja a programot, virtuális géppé varázsolja a programot . Bár egy ilyen lehetőség hosszú ideig létezett a gépi kódok szintjén (és aktívan használták például polimorf vírusok létrehozásakor ), a metaprogramozás általában az ilyen technológiák magas szintű nyelvekre történő átviteléhez kapcsolódik.

Főbb megvalósítási módok:

Lehetővé teszi a típusdefiníciók, a hívási verem megtekintését, létrehozását és módosítását futás közben , a változók dinamikusan kapott névvel való elérését stb.

A Prolog nyelvben a metaprogramozás lehetővé teszi a Prolog programok fejlesztésének és ellenőrzésének (tulajdonságok ellenőrzésének) automatizálását. A metaprogramok a Prolog programokat terminusnak tekintik, és lehetővé teszik tulajdonságaik és kapcsolataik elemzését, programok létrehozását más Prolog programok vezérlésére [4] .

Lásd még

Jegyzetek

  1. Jonathan Bartlett, A metaprogramozás művészete, 1. rész: Bevezetés a metaprogramozásba . Letöltve: 2012. október 4. Az eredetiből archiválva : 2013. december 24..
  2. Hudak Pál. Moduláris tartományspecifikus nyelvek és eszközök . — IEEE Computer Society Press, Department of Computer Science, Yale University, 1998. Archiválva az eredetiből 2013. október 17-én.
  3. Lingua::Romana::Perligata - search.cpan.org
  4. Metakides, G. és Nerode, A. (1998): A logika és a logikai programozás alapelvei (román nyelvű fordítás). Műszaki Könyvkiadó, Bukarest.

Linkek