The CAPI Manifesto

Marco Leise Marco.Leise at gmx.de
Mon Oct 24 19:36:52 PDT 2011


Am 21.10.2011, 10:32 Uhr, schrieb Gor Gyolchanyan  
<gor.f.gyolchanyan at gmail.com>:

> That's ALL you can do in C. fill structs and call functions
> (fundamental type manipulation doesn't count).
> My personal research shows the following use cases of C macros (sorted
> by popularity in descending order):
> 1. enum
> 2. alias (most notably, conditionally compiled ones)
> 3. CTFE function
> 4. mixin template
> 5. syntactic alias
> 6. syntactic mixin template
>
> only the last 2 out of 6 cannot be translated to D.
> An example of a syntactic alias is this very common piece of C code:
> #ifdef __VERY_VERY_OLD_C_COMPILER__
>     #define CONST
> #else
>     #define CONST const
> #endif

Maybe these cases can often be solved when, as you say, they are for  
compatibility with other compilers. The header converter would simply  
assume to be the latest and greatest of the known compilers and evaluate  
the code like this:
- there is an #ifdef
- if it a define from the list of "known C compilers with quirks"
   - jump right to the else block
The #define obviously can become more than one thing in the .d file. But  
that is determined by the instantiation site. The above CONST would  
probably be ignored when it is used in a const parameter declaration,  
because of D's transitivity and become 'immutable __gshared' when used on  
a global variable. Do you get the idea?


More information about the Digitalmars-d mailing list