Hi Rust devs!

First of all, thank you for putting so much effort into creating this promising 
language!

I would be glad to hear your thoughts on some minor bikeshedding before the 1.0 
release. From what I can see, the conditional compilation in Rust shares a 
weakness with the C preprocessor. The problem is lacking checks against 
misspelled identifiers, as in this example:

#[cfg(target_oss="dragon_fly")]
fn foo() { syntaxError }

Here, target_oss has an extra "s", and dragon_fly should not have the "_". 
However, the compiler will compile the code without notifying the programmer 
that anything is wrong. I propose that cfg-identifiers should be treated 
similarly to other identifiers, so that they can trigger unresolved errors.

One way I see to implement this for custom cfg identifiers specified on the 
command line is going from

$ rustc --cfg some_condition

to

$ rustc --cfg some_condition=true

And then the code would look like

#[cfg(some_condition=true)]
fn conditional_function() { }

Instead of just

#[cfg(possibly_correct_name)]
fn conditional_function() { }

Alone, this change would require the programmer to always specify all values of 
all custom cfg identifiers when building code that uses them. To avoid that, it 
would be good to be able to define default values of identifiers in .rs files. 
There could even be .rs files distributed with rustc which contain 
specifications of all built-in cfg identifiers (and possibly also lists of 
their allowed values).

(There's also the inconsistency in "=" vs "==" equality operators between 
cfg-expressions and regular Rust expressions, an inconsistency C does not 
share, but that is not a big concern).

Thanks for reading this far,
Chris
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to