Tôi có ý kiến rằng nếu một ngôn ngữ có macro, thì chúng phải là một phần được lập kế hoạch tốt và là một phần không thể thiếu của ngôn ngữ chứ không phải của trình biên dịch .
Ví dụ, hệ thống vĩ mô của Lisp là một tính năng ngôn ngữ tích hợp rất mạnh mẽ và tuân theo tất cả các quy tắc và quy định của chính Lisp.
Ví dụ ngược lại, hệ thống macro C / C ++ tách biệt với ngôn ngữ và được tích hợp vào trình biên dịch. Kết quả là bạn không bị giới hạn trong các ràng buộc của ngôn ngữ của mình và có thể tạo mã không hợp lệ và xác định lại các từ khóa cụ thể của ngôn ngữ.
Vào cuối ngày, có một số ngôn ngữ không có tính năng vĩ mô - nhưng những ngôn ngữ đó không bị bỏ sót nhiều. Tất cả phụ thuộc vào mức độ biểu cảm của một ngôn ngữ và liệu nó có cách tiếp cận thay thế cho lập trình meta hay không. Lập trình meta chỉ là một cách để đảm bảo rằng khi bạn thực hiện X, X được thực hiện theo cùng một cách trong suốt ứng dụng.