Jsem už moc starej, když mi makra a metadata-atributy přijdou jako zvrhlost? Ještě tak metadata-atributy pro testování a vývoj, ale řídit tím nějakou produkční logiku... A makra... copak se to nedá řešit pomocí objektů/struktur?
"makra... copak se to nedá řešit pomocí objektů/struktur"
Nedá, Rust nemá runtime (a jeho tvůrci se tím ještě chlubí), proto se kód musí prošpikovat makry. Ono to nemusí být na škodu, některé věci je lepší řešit v době překladu. V Rustu jsou makra a atributy v postatě generátory kódu zabudované do překladače.
No nevím, jak s tím runtimem, ale nejčastější makra, se kterými se zřejmě uživatel Rustu potká od samého začátku, jsou println!, format! apod., to znamená formátování řetězce s kontrolou právě v době překladu. Málokterý jazyk má tohle vyřešeno tak inteligentně a bez maker by to podle mě nešlo jinak, než nějakou ad hoc jednoúčelovou magií.
Vtip vidím v tom, že makro většina programátorů nemusí nikdy napsat a přesto z něj má velký užitek. Těch příkladů je celá řada.
Já jen, že nejsem velký příznivec maker, ale makra asi jak byla prezentována v C, tedy jako něco, co pracuje s textem bez znalosti kontextu daného jazyka.
A to je asi nejvíc evil na makrech v jazycích C a C++ (speciálně tam).
Nevím, jak je to s makry v Rustu, já jen že při slově makro se mi otevírá nůž v kapse :-)
Při psaní maker v Rustu se přímo manipuluje syntax tree jazyka. Není to jen tupý generátor textu. Navíc jsou makra psaná opět v Rustu, není pro to potřeba žádná speciální syntax jako v C.
Pro začínajícího programátora může být psaní maker (hlavně procedurálních maker) poměrně strašidelné, ale výhody v DRY které to někdy poskytuje jsou neskutečné. Osobně mám třeba napsanou knihovnu s makry, které z jednoduše abstrahované specifikace celkem složitého protokolu s desítkami objektů vygeneruje veškerý kód rozsáhlé api knihovny, všechny settery, testy, dokumentaci… Psát to ručně, zblázním se z toho :)
Makra v Ruste si netreba predstvovat ako tie v C, alebo ako templaty v C++. Tu su na uplne inej urovni a robi sa s nimi naozaj dobre. Nie je to hlupe replacovanie textu, ale skutocna sucast jazyka a mainpoulacia s AST. navyse Rust s nimi vie aj perfektne zobrazit chyby... takze ziadne hladanie chyby v niecom co ani v zdrojakoch nie je.
Plní víceméně podobnou funkci, ale není. Viz https://doc.rust-lang.org/reference/attributes/derive.html a odkazy na derive macros apod.