Smooth transition to D2 for Tango users?

Mosfet mosfet at anonymous.org
Tue Sep 23 08:21:47 PDT 2008


Denis Koroskin wrote:
> On Tue, 23 Sep 2008 02:00:36 +0400, Steven Schveighoffer 
> <schveiguy at yahoo.com> wrote:
> 
>>
>> "Sergey Gromov" wrote
>>> Bruce Adams <tortoise_74 at yeah.who.co.uk> wrote:
>>>> I don't think its unreasonable to expect that braces will be balanced
>>>> in all future versions of the language.
>>>
>>> Braces can be in strings or comments.  It's quite likely to have braces
>>> in strings in many kinds of parser programs.
>>>
>>> If you want code hidden from a compiler, put it in a string and mix in.
>>>
>>> enum veryD2Code = `
>>>  auto foo(T)(T x) if (__traits(hasMember, "opCall"))
>>>  {
>>>    return x();
>>>  }
>>> `;
>>>
>>> version (D_Version2)
>>> {
>>>  mixin(veryD2Code);
>>> }
>>>
>>> In D2 you can use token strings for that purpose, so that the code will
>>> even be highlighted in your editor, but will not interfere with the
>>> compiler.
>>
>> oops, D1 doesn't support that type of enum ;)
>>
>> If the problem can't be solved with the current compilers, then the 
>> solution
>> provided to make it work should be easy to use.  I don't see this type of
>> solution as easy to use, nor the 'version(D2)' type of solution.  What if
>> you have const member functions?  If we had a preprocessor...
> 
> We do have some kind of it:
> 
> #!/usr/bin/dmd -run
> #line 42 "foo.d"
> #pragma(msg, "bar");
> ...
> 
> C# has also support for the following "preprocessor" directives 
> (although it doesn't have a preprocessor):
> 
> #if
> #else
> #elif
> #endif
> #warning
> #error
> #line
> #region
> #endregion
> #define
> #undef
> 
> These are widely known and understandable to many programmers, so D 
> could extend the preprocessor directives list with some of them.
> 
> An import point is that unlike C and C++, you cannot use these 
> directives to create macros!
> 
> D ought to have a way to mark some section of code so that it won't get 
> parsed and semantically analyzed. Balancing of the curly braces is one 
> of the solutions:
> 
> version (Dv2) {
>     const int f()
> } else {
>     int f()
> }
> 
> #if/#else/#elif/#endif is another, also a good one:
> 
>>
>> #ifdef Dv2
>>    const int f()
>> #else
>>    int f()
>> #endif
>>
Personaly it would be simpler to use some kind of directives, I like the 
way C# handle it and the other proposal looks like bad hack.



More information about the Digitalmars-d mailing list