metaprogramming
Megjelenés
Főnév
metaprogramming (tsz. metaprogrammings)
- (informatika) Metaprogramozás olyan programozási technika, ahol egy program kódot hoz létre, módosít vagy vizsgál más kódot. Másképp: a programok „programozását” végezzük—így rugalmasabb, generikusabb, automatikus kódgenerálásra és konfigurálhatóságra nyílik lehetőség.
1. Két fő formája
- Fordítási időbeli (compile-time) metaprogramozás
- Makrók (C/C++
#define, Lisp makrók): a fordító előfeldolgozója szövegszerűen helyettesít vagy kiterjeszt kódrészleteket. - C++ template metaprogramozás: a fordító sablonokat (template-eket) értékel, ún. Turing-teljes nyelvet adva a fordítás során. Példa:
std::integer_sequence-ekkel számítások, típusok generálása fordításkor.
- Makrók (C/C++
- Futásidőbeli (run-time) metaprogramozás
- Reflectió: a nyelv lehetővé teszi típus- és struktúrainformáció lekérdezését futásidőben (pl. Java
Class<?>, C#System.Reflection). - Eval / code generation: kifejezések karakterláncként állnak elő, majd értékelődnek (pl. JavaScript
eval, Pythonexec). - DSL-ek: beágyazott vagy külső domain‐specific nyelvek építése, amelyeket a host nyelven értelmezünk vagy fordítunk.
- Reflectió: a nyelv lehetővé teszi típus- és struktúrainformáció lekérdezését futásidőben (pl. Java
2. Előnyök és hátrányok
Előnyök
- DRY (Don’t Repeat Yourself): ismétlődő kód generálása egy sablonból, kevesebb kézi másolás.
- Magasabb absztrakciós szint: generikus adatszerkezetek, algoritmusok automatikus testreszabása.
- Konfigurálhatóság: plug‐in rendszerek és moduláris felépítés.
Hátrányok
- Bonyolultság: nehezebb debugolni és érteni a generált kódot.
- Fordítási idő nőhet: különösen C++ template‐eknél.
- Biztonság: rosszul kezelt
eval-ek kódbefecskendezést okozhatnak.
3. Gyakorlati példák
- C++ TMP:
std::enable_if,constexprfüggvények, compile‐time számítások. - Lisp makrók: új nyelvi szerkezetek definiálása, kódkibővítés.
- Python dekorátorok: függvény vagy osztály viselkedésének futásidőbeli módosítása.
- Java Annotation Processing: annotációk alapján forráskód-generálás (pl. Lombok, Dagger DI).
Összefoglalás
Metaprogramozással a kód „önmagát” írja vagy módosítja, így nagyon rugalmas, de bonyolult rendszereket építhetünk. Fontos mérlegelni az egyszerűség, áttekinthetőség és teljesítmény szempontjait, és csak ahol valóban előnyt jelent, alkalmazni ezeket a technikákat.
- metaprogramming - Szótár.net (en-hu)
- metaprogramming - Sztaki (en-hu)
- metaprogramming - Merriam–Webster
- metaprogramming - Cambridge
- metaprogramming - WordNet
- metaprogramming - Яндекс (en-ru)
- metaprogramming - Google (en-hu)
- metaprogramming - Wikidata
- metaprogramming - Wikipédia (angol)