Conditional assembly allows you to control which code gets assembled as part of your application, allowing you to produce variants. Macros and loops automate repetetive tasks, such as constructing tables or duplicating code.