Saya berpendapat bahwa jika suatu bahasa memiliki makro, mereka harus direncanakan dengan baik dan bagian yang tidak terpisahkan dari bahasa dan bukan dari kompiler .
Contoh, sistem makro Lisp adalah fitur bahasa terintegrasi yang sangat kuat dan tunduk pada semua aturan dan peraturan Lisp itu sendiri.
Contoh tandingan, sistem makro C / C ++ terpisah dari bahasa dan dibangun ke dalam kompiler. Hasilnya adalah Anda tidak terbatas pada kendala bahasa Anda dan dapat membuat kode yang tidak valid dan mendefinisikan kembali kata kunci spesifik bahasa.
Pada akhirnya, ada beberapa bahasa yang tidak memiliki fitur makro - tetapi fitur-fitur itu tidak terlalu dilewatkan. Itu semua tergantung pada seberapa ekspresif suatu bahasa, dan apakah ia memiliki pendekatan alternatif untuk meta-pemrograman. Meta-pemrograman hanyalah cara untuk memastikan bahwa ketika Anda melakukan X, X dilakukan dengan cara yang sama di seluruh aplikasi.