One of the things I like to do is compare how different languages solve the same problem — especially when they end up having very different approaches. It’s always educational. In this case, a bunch of us have been working hard on trying to get reflection — a really transformative language feature ...
This is a blog post that really is about C++, but with a look at how Rust does things. So, this is an interesting C++/Rust comparison for once.
Correct - Rust's attribute grammar allows any parseable sequence of tokens enclosed in #[attr ...] basically. Serde specifically requires things to be in strings, but this is not a requirement of modern Rust or modern versions of syn (if you're comfortable writing your own parser for the meta).
The author is not a Rust expert though, so I'm not surprised to see this assumption. It doesn't take away from the article though.
Not only that. We don't just "inject" raw strings with the syn/quote duality. Stringified or not, the token tree will be parse-checked into the expected syn type before being used in generated code.
So the distinction is both wrong and irrelevant. This is what I meant by wrong on multiple levels/layers 😉