On Apr 19, 2014, at 13:09, Filip Pizlo <fpi...@apple.com> wrote:

> Hey everyone,
> 
> When guarding code with macros that are always defined, such as 
> ASSERT_DISABLED (it's always either 0 or 1), we have a choice between:
> 
>       if (!ASSERT_DISABLED) {
>           // do things
>       }
> 
> and:
> 
> #if !ASSERT_DISABLED
>       // do things
> #endif
> 
> I'd like to propose that anytime the normal if would be semantically 
> equivalent to the preprocessor #if, the normal if should be used.
> 
> We don't lose any compiler optimization, since even at -O0, the compiler will 
> constant fold the normal if.  We do gain a lot of clarity, since the control 
> flow of normal if statements is subject to proper indentation.
> 
> The "semantically equivalent" requirement still allows for #if to be used for 
> thinngs like:
> 
> - Guarding the placement of fields in a class.
> - Guarding the definitions of other macros (in the case of ASSERT_DISABLED, 
> we define ASSERT in different ways guarded by #if's)
> - Guarding the definition/declaration/inclusion of entire functions, classes, 
> and other top-level constructs.
> 
> Thoughts?

It’d be one thing if we could adopt this approach everywhere, but as you note 
there are numerous situations in which it won’t compile. What’s worse is that 
there are situations in which it’ll silently give unintended behavior. It’s not 
clear to me what benefit you see this proposal bringing, and why it’d be worth 
the complexity that it adds. Given the lack of a compelling argument in favor 
of this change I’m firmly against it.

- Mark

_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to