Why do shift operators undergo integral promotion?
Jonathan M Davis
jmdavisProg at gmx.com
Tue Aug 9 14:08:02 PDT 2011
> On Tue, 09 Aug 2011 23:20:02 +0300, Andrew Wiley
>
> <wiley.andrew.j at gmail.com> wrote:
> >> Can't we finally get rid of this compatibility issue by separating?
> >> . for the whole file which can be enabled with a flag to compiler "dmd
> >> -Cmode ...."
> >
> > That would essentially mean we have two compilers to maintain at the end
> > of
> > the day because the semantics of certain operations would depend
> > entirely on
> > whether the compiler was in C mode or not.
>
> True, but we are now doing something similar (probably something much
> harder) which unlikely produces a positive outcome.
> We say there is a compatibility where there was not (to which extend no
> one knows), on the other hand there are new rules/syntax for the same
> problems in the same language which would create awful amount of
> confusion, not to mention ignoring the solutions to the problems.
>
> On maintaining two compilers, i don't think this is a bigger issue because
> C compiler and spec already here and never changes.
Generally speaking, when C or C++ code compiles as D code, it has identical
behavior (there are a few exceptions - such as passing static arrays - but
it's almost always true). The reason for this is so that you don't end up with
tons of bugs when porting code to D from C or C++. If it weren't for that,
then corner cases such as this wouldn't really matter, and we could just make
D to the smart thing. But because we don't want code which is ported to break
in all kinds of subtle ways, we maintain compatibility with C/C++ as long as
the C/C++ code is valid D code.
There's no reason to have a separate version of the language which is more
compatible with C than another version. It would just complicate things. Not
only would it be a burden on the compiler maintainers, but then you would have
to know whether code was intended to be compiled with the standard D compiler
or with the one which is more compatible with C. It would be a mess for very
little benefit.
The question here is whether we can safely make the change to D's behavior
without breaking code which is ported from C or C++. As long as it is pretty
much a guarantee that any code which relies on the C behavior is buggy, then I
don't see any reason why we can't fix the behavior in D. However, if there are
valid reasons for C code to rely on the C behavior, then we're kind of stuck.
>From what I can see though, it sure looks like any C code which relies on the
C behavior would be buggy.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list