this post was submitted on 01 Oct 2024
27 points (100.0% liked)

Rust

6034 readers
3 users here now

Welcome to the Rust community! This is a place to discuss about the Rust programming language.

Wormhole

[email protected]

Credits

  • The icon is a modified version of the official rust logo (changing the colors to a gradient and black background)

founded 1 year ago
MODERATORS
 

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.

you are viewing a single comment's thread
view the rest of the comments
[–] BB_C 1 points 1 month ago (1 children)

In Rust, you provide a string — that is injected to be invoked internally. In C++, we’d just provide a callable.

This is because Rust’s attribute grammar can’t support a callable here.

I don't do C++ as a life choice, and thus not 100% sure what the author means here. But I have the feeling that he is wrong, on multiple levels even 😉

[–] [email protected] 2 points 1 month ago* (last edited 1 month ago) (1 children)

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.

Edit: for fun, syn has an example parsing an attribute in an attribute

[–] BB_C 2 points 1 month ago* (last edited 1 month ago)

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 😉