Der findes forskellige kategorier af makrosprog.
Man kan f.eks. skelne dem på det niveau de fungere på.
- leksikalske makroer (f.eks. CPP - c pre processor)
- syntaktiske makroer (f.eks. lisp, scheme, c++ templates)
- semantiske makroer (kender ikke nogle alm. kendte makrosprog)
CPP fungere ved at udskifte tokens og kender dermed ikke noget til syntaksen af C.
C++ Templates fungere på syntaktisk niveau og dermed har man mulighed for at garantere typesikkerhed.
Denne artikel indeholder et survey af makrosprog. Til artiklen er der også nogle præsentationsslides
http://www.brics.dk/bigwig/publications/macro.pdfhttp://www.brics.dk/~brabrand/aopl/AoPL.pptDenne artikel viser hvordan man kan opnå partiel evaluering med c++ templates.
http://osl.iu.edu/~tveldhui/papers/pepm99/19/01-2006 23:31:03 skriver du om Java templates. Mener du Java generics ?
(Jeg kender ikke til indholdet af Java6-7 og spørger måske dumt..)
Her er et eksempel på partiel evaluering med c++ templates.
#include <iostream>
template<int N> class Fib {
public:
const static int val = Fib<N-1>::val + Fib<N-2>::val;
};
template<> class Fib<2> {
public:
const static int val = 1 ;
};
template<> class Fib<1> {
public:
const static int val = 1 ;
};
int main()
{
std::cout << Fib<30>::val << std::endl;
return 0;
}
På compiletime beregnes det 30'te fibonacci nummer.
(Check evt. selv assembler output :-)