On Monday, 2 January 2017 at 21:23:19 UTC, Andrei Alexandrescu wrote:

No worries, I'll make a pass (a rewrite, really) taking all feedback into account.

Are all the proposals mutually exclusive? When it comes to declarations, the DIP actually won me over! However I was hoping for it to solve a different issue inside the body with local imports. I tend to write short helper functions, with the result that in the common case, an imported symbol is often used only once per function.

Currently I consider it good style to list all imports in the beginning of a scope, but based on past experience with C89, this is not entirely optimal, however Timon Gehr's proposal could solve it.

import and directly invoke:
import std.traits : isArray(...)

=======================================================
[Proposed Style - analogous to C99]
body
{
  static if(...)
    import std.range : zip(...);
  static if(import std.traits : isArray(...)))
    import std.range : join(...);
}
=======================================================
[Old Style - analogous to C89 - Suffers from "unused" imports]
body
{
  import std.range : zip, join;
  import std.traits : isArray;

  static if(...)
    zip(...)
  static if(isArray(...)))
    join(...)
}
=======================================================
[Alternate Style - Suffers from DRY and can't limit scope of isArray]
body
{
  import std.traits : isArray;

  static if(...)
  {
    import std.range : zip;
    zip(...);
  }
  static if(is(isArray(...)))
  {
    import std.range : join;
    join(...);
  }
}

C89 vs C99 style I was referring to if it wasn't clear.
=======================================================
[C89]
void foo(void)
{
#ifdef ... /* needed to silence unused variable warnings */
  int x;
#endif
... lots of code ...
#ifdef ...
  x = bar();
#endif
}

[C99]
void foo(void)
{
#ifdef ...
  int x = bar();
#endif
}
=======================================================

Reply via email to