Beta 2.094.0
Paul Backus
snarwin at gmail.com
Sat Sep 12 13:03:29 UTC 2020
On Saturday, 12 September 2020 at 11:43:03 UTC, MoonlightSentinel
wrote:
>
> Currently looking into enabling it by default but it showed an
> interesting side effect. The frontend can now conclude that a
> == b is always true if a and b are instances of an empty struct
> (without custom opEquals).
>
> This caused "unreachable code" warnings for VariantN in Phobos
> and could probably affect other projects as well.
How many improvements does this warning have to block before we
decide its value for the language is net-negative?
GCC doesn't have it. [1] Clang has it, but only if you
specifically ask for it with -Wunreachable-code; it's not part of
-Wall or -Wextra. [2] Rust has it, but lets you turn it off with
an annotation. [3] Java has it, but it explicitly does *not* take
constant-folding into account. [4]
The only language I could find that follows D's approach is C#
[5], and C#'s generics don't get a separate semantic analysis for
each concrete type like D's templates do.
[1] https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
[2]
https://clang.llvm.org/docs/DiagnosticsReference.html#wunreachable-code
[3]
https://doc.rust-lang.org/rust-by-example/attribute/unused.html
[4]
https://docs.oracle.com/javase/specs/jls/se14/html/jls-14.html#jls-14.22
[5] https://docs.microsoft.com/en-us/dotnet/csharp/misc/cs0162
More information about the Digitalmars-d-announce
mailing list