Những ngôn ngữ lập trình nào có tính năng macro vệ sinh (hygienic macros)?
Macro vệ sinh là những macro có việc mở rộng được đảm bảo không gây ra việc bắt giữ định danh ngoài ý muốn. Đây là một tính năng của các ngôn ngữ lập trình như Scheme, Dylan, Rust, Nim và Julia. Vấn đề chung về việc bắt giữ ngoài ý muốn đã được biết đến rộng rãi trong cộng đồng Lisp trước khi macro vệ sinh được giới thiệu. Các lập trình viên viết macro thường sử dụng các tính năng của ngôn ngữ để tạo ra định danh duy nhất (ví dụ: gensym) hoặc sử dụng các định danh được che giấu để tránh vấn đề này. Macro vệ sinh là một giải pháp lập trình cho vấn đề bắt giữ, được tích hợp vào chính bộ mở rộng macro. Thuật ngữ "vệ sinh" được đặt ra trong bài báo năm 1986 của Kohlbecker và cộng sự, người đã giới thiệu việc mở rộng macro vệ sinh, lấy cảm hứng từ thuật ngữ được sử dụng trong toán học.
Một số ngôn ngữ có tính năng macro vệ sinh bao gồm Scheme, Dylan, Rust, Nim và Julia.