Wat is metaprogrammering?
Metaprogramming is het schrijven van computerprogramma's die op hun beurt andere programma's schrijven. Het metaprogrammeringsproces biedt computerprogrammeurs meer flexibiliteit omdat werk dat meestal tijdens de runtime wordt gedaan, wordt toegewezen aan de compilatieperiode. Dit proces maakt de programmeur tijd vrij om zich op andere taken te concentreren, omdat het de tijd verkort die nodig is om handmatig een programmacode te schrijven. Hercompilatie is niet nodig omdat metaprogrammering programma's in staat stelt nieuwe situaties efficiënter aan te pakken. "Metaaltaal" is de term die wordt gegeven aan de computertaal die het metaprogramma gebruikt.
Objecttaal is de computertaal van die programma's die zijn geschreven door het metaprogrammeerproces. Reflexiviteit is een term die wordt gegeven aan metaaltaal, die ook metaprogrammering kan veroorzaken. Metaprogrammering werkt op verschillende manieren. Een manier is dat de applicatie-programmeerinterface de programmeercode toegang geeft tot de binnenkant van de runtime-engine.
Een andere manier waarop metaprogrammering werkt, is door programma's andere programma's te laten schrijven via het dynamische uitvoeringsproces. In dit geval worden stringuitdrukkingen gebruikt in dit proces. Hoewel dezelfde taal kan worden gebruikt in deze twee processen, is het niet ongebruikelijk dat de talen het ene proces verkiezen boven het andere.
Metaprogrammering werkt ook door de taal te omzeilen. Hiermee kunnen talen worden gewijzigd via programmatransformatiesystemen. Deze procedure geeft metaprogrammering de vrijheid om talen te gebruiken, zelfs als de taal geen metaprogrammeringskenmerken gebruikt.
Een broncode is niet nodig voor metaprogrammering. Het kan worden gedaan door een incrementele compilatie of door runtime-veranderlijke programma's. De computer langaugae Lisp is de favoriete taal voor het metaprogrammeringproces. Dit komt door de eenvoud van dit type computertaal en de kracht ervan.
Metaprogrammering die de Lisp-taal gebruikt, werkt door de code te evalueren tijdens de programmadefinitieperiode, in tegenstelling tot de runtime-periode. Dit proces geeft de metaprogrammeringstaal en de host-programmeertaal hetzelfde. Wanneer dit gebeurt, kunnen deze Lisp-routines worden gerecycled voor het metaprogrammeringproces.
Andere talen hebben dit exacte proces gebruikt met de integratie van een programma-interpreter. Deze tolk werkt met de gegevens in het programma. Domeinspecifieke programmeertalen bij metaprogrammering zijn een andere vorm die parsers en lexicale analyzers maakt. Hiermee kan de gebruiker reguliere expressies gebruiken om de taal te definiëren.