Summary: Compiler option to port C code or disallow some
                    duplicated C syntax
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: DMD

--- Comment #0 from 2010-08-03 18:12:17 PDT ---
D language is designed to act as (share the same semantics as) C when a syntax
valid in C is used, so you can avoid bad surprises when you port C code to D.

In some situations following this general principle is seen as too much costly,
so in few advantageous cases D doesn't follow it. Such cases have caused me
bugs when I have translated some C code to D. So I'd like something to avoid
similar bugs when I perform similar porting.

In other situations D keeps both the D-style syntax and C-style syntax to
perform something. This double syntax is surely handy when you convert C code
to D, but in normal D programming makes the D language more confusing (because
there is more than on obvious way to do something), more complex, and has other

In the D.learn newsgroup Heywood Floyd has started a short thread about 2D
arrays definition, he finds them confusing, and he currently wants to use the
int marr[3][5]; syntax.

It's bad to have two different syntaxes to define arrays in a language. On the
other hand I have found the C-style syntax useful when I have translated some C
code to D (later once the code works correctly I have replaced the C
definitions with D ones).

To solve this problems I propose a new D compiler option, a possible name is
"-cstyle", but other shorter names are possible. This switch is designed to
help porting of C code to D that warns against:

- usage of global floating point variables/arrays that in some C programs are
used without initialization, assuming they are set to zero (while D initializes
them to NaN). This has caused a slow-to-find bug in one of my programs;
- "cstyle" switches on a compile-time warning against the usage of large
fixed-sized arrays, that are passed around by reference in C and recently by
value in D2. So if they are large the program can get slower in D. (I think D
already guards against some C-style arrays usages that exploit the reference
nature of array arguments).

The purpose of -cstyle is not to split D into two languages, it is to tell
apart two different purposes and allow at the same time a safer porting of C
code to D and give a chance to deprecate and later remove some "bad" C syntax
from normal D syntax.

One more possible purpose for -cstyle: to allow the C-style array definition
syntax. So unless -cstyle is used then:
int marr[3][5];
is a syntax error.
This allows to keep the purpose of C-style array definitions (for porting from
C code) while essentially making it deprecated for normal D programs.

Another possible purpose for -cstyle: to allow the C-style function pointer
syntax. This allows to disallow such syntax in normal D programs. This syntax
is confusing and unreadable and can generate bugs, on this see also bug 4530

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to