# wg-macros 05 December 2024 Rough agenda - wg-macros history - Project goals ## wg-macros history Vincenzo: About 1 year old, created in https://github.com/rust-lang/compiler-team/issues/637. RfL was considering using macros but there wasn't an obvious expert. Was debating whether to use `syn`, and if so how. Got involved with the edition, pair-programmed `expr_2021` together. Eric: I come from Scheme, so I'm a fan of macros. Rust's macros are great but kind of languishing. Want to help building expertise within the Rust community and also establish a macro vision. Josh: Started in C, but has done other languages with good macro systems. Also, Python decorators are kind of similar. Used Template Haskell and such in a large project. Backwards compatibility is a fun constraint for Rust. Proc macros were a good, powerful first step, but they have a lot of downsides. We can probably do a lot of small improvements to `macro_rules!`. E.g. [proc_macro_rules](https://docs.rs/macro_rules_attribute/latest/macro_rules_attribute/). ## `macro_rules!` improvements, RFCs, project goal Josh: Making it possible to do attributes and derives with `macro_rules!`. Some people will just use that, but... Can we add more control flow besides recursion? `$match`, `$let`, `$for` ```rust ${ for f in st.fields { }} ``` ```rust! $for f in st.fields { } ``` Vincenzo: While working in the kernel I was thinking to somethig like that (https://github.com/rsmicro/kproc-macros/issues/5) ```rust editor!{ @foreach ${attributes} { println!("{}", ${ir}); } } ``` Josh: Can delegate new fragment fields to wg-macros, only use one lang RFC for the general concept of macro fragment fields. In six month, can wg-macros help implement declarative attribute and derive macros, such that we can make a stabilization report in six months? Fragment fields could also be used for a new lint system. ## Next steps Josh to update project goal: - Experimental implementation of attribute and derive https://github.com/rust-lang/rust-project-goals/pull/167