Re:Announcing Rust 1.30
by steveklabnik on Thursday October 25, 2018 @01:31PM
(#18302664)
I read the parent as suggesting that you could call it as
_async(true)No, this isn't what I meant to imply (though I understand your confusion). I didn't realize (or understand) that the syntax is meant to facilitate interoperability between different versions of Rust.
Re:Announcing Rust 1.30
by shepmaster on Thursday October 25, 2018 @01:35PM
(#18302713)
Ah. If that's the case, as you point out people might have already been using a leading underscore (although they shouldn't for idiomatic reasons), leading to ambiguity around
2015 code:
fn async(enabled: bool) {}
fn _async(enabled: bool) {}
2018 code calling that: _async(true); // Which is this calling?
For example, my 2015 crate might have a function `fn async(enabled: bool)` that I need to call from 2015. I could call it as `r#async(true)`.
This follows the existing syntax of `r"foo"` / `r###"foo"###` for raw strings as well as raw byte literals: `br##"HELO"##`;
Another use case will be for libraries like Diesel [0], a SQL query builder. People want to be able to search the documentation for SQL's `WHERE`, but `where` is keyword in Rust. They could choose to add a method called `r#where` to allow this kind of discoverability.
[0]: https://diesel.rs/