Makra sa vacsinou pouzivaju na to, aby programatori mohli pouzivat nie zrovna zrejme konstrukcie, ktore sa ani nemusia podobat povodnemu jazyku. Clovek neznaly, ake makra tam niekno naprplal vidi kod a ide si oci vyocit, ze ako to dofrasa moze vobec fungovat . Nebodaj, ked je este v makre chyba... Zly koncept na urovni copy-paste programovania.
Proto jsem psal, že jsou makra nebezpečná - spousta lidí se jejich silou nechá zlákat a řeší jimi buď vůbec neexistující problémy nebo věci, které by se daly řešit jinak. Rule of thumb je, že makro by se mělo použít jenom tam, kde řešení pomocí funkcí neexistuje, nebo by bylo výrazně míň elegantní.
Ale není pravda, že makra jsou zlo. Naopak, často významně chybí. Například ve staticky typovaných jazycích, které nemají makra ani dostatečně flexibilní/efektivní/elegantní pozdní vazbu je problém s RPC. Tak se to řeší tím, že se napíše úplně standalone "generátor stubu", což je de facto ad hoc vytvořený macro processor, který se dá použít jenom na ten jeden účel. Čili výrazně horší řešení než obecná makra, použitelná i na cokoli jiného.
Makra se dají použít i na optimalizaci - pokud vím, že něco platí v době běhu, můžu toho využít a např. nějaký kód pomocí makra nahradit NOOPem apod.
Překladač Elixiru zas dělal (nevím, jestli to ještě platí) takovou srandičku, že jakousi funkci zpracovávající unicode při překladu generoval přímo z aktuální specifikace. Prostě se při překladu stáhlo nějaké specifikační XMLko nebo co a na základě něj se vytvořila funkce pattern-matchující jednotlivé znaky (skupiny znaků? detaily si nepamatuju). Čili při překladu vznikl superaktuální kód, efektivnější než kdyby se v tom XMLku vyhledávalo za běhu. A to bez jakýchkoli
berliček typu "generátor unicode stubu".
...protože správně použitá makra nejsou žádné berličky, právě naopak - pokud je nemám a hodila by se mi, musím se k nějaké berličce uchýlit.