Sono dell'opinione che se una lingua ha macro, dovrebbero essere una parte ben pianificata e pianificata della lingua e non del compilatore .
Esempio, il sistema macro di Lisp è una funzionalità di linguaggio integrato molto potente ed è soggetto a tutte le regole e le regole dello stesso Lisp.
Il contro-esempio, il sistema macro C / C ++ è separato dal linguaggio e incorporato nel compilatore. Il risultato è che non sei limitato ai vincoli della tua lingua e puoi creare codice non valido e ridefinire parole chiave specifiche della lingua.
Alla fine della giornata, ci sono diverse lingue che non hanno funzionalità macro - ma quelle fature non sono perse tanto. Tutto dipende da quanto è espressivo un linguaggio e se ha approcci alternativi alla meta-programmazione. La meta-programmazione è solo un modo per garantire che quando fai X, X sia fatto nello stesso modo in tutta l'applicazione.