Thread overview
Guideline for D1/2 compatible code?
Jan 17, 2009
Trass3r
Jan 17, 2009
Stewart Gordon
Jan 18, 2009
Trass3r
Jan 18, 2009
Stewart Gordon
January 17, 2009
Are there any guidelines for writing code compilable with both dmd 1.x and 2.x?
January 17, 2009
Trass3r wrote:
> Are there any guidelines for writing code compilable with both dmd 1.x and 2.x?

This is to make a library usable by users of either, I presume?

I can give a few:

- Have a module to define types for such things as pointers/arrays that will be const in D2.

- Use version(D_Version2) for bits of code that need to be different between the two.

- Use string mixins to include D2 code that is syntactically illegal under D1.

This is the approach used by SDWF.
http://pr.stewartsplace.org.uk/d/sdwf/

Note also if you're compiling a Windows GUI app, that WinMain will need to be defined differently.  Again, a dual-mode WinMain is bundled with SDWF.
http://d.puremagic.com/issues/show_bug.cgi?id=2580


Stewart.
January 18, 2009
Am 17.01.2009, 23:19 Uhr, schrieb Stewart Gordon <smjg_1998@yahoo.com>:

> Trass3r wrote:
>> Are there any guidelines for writing code compilable with both dmd 1.x and 2.x?
>
> This is to make a library usable by users of either, I presume?
>

Yes.


> - Have a module to define types for such things as pointers/arrays that will be const in D2.
>

Yeah, using the following atm:
	alias char[] string;
	alias const(char)[] cstring;
	alias invariant(char)[] istring;


> - Use version(D_Version2) for bits of code that need to be different between the two.
>
> - Use string mixins to include D2 code that is syntactically illegal under D1.
>

I'd like to use "alias char[] string", but dmd complains about conflicts with the builtin "alias invariant(char)[] string"

Is there any way to redefine string in the scope of the library?
I know I could simply use another name or use char[] but if it's possible to redefine it, I'd love to do that.
January 18, 2009
Trass3r wrote:
<snip>
> I'd like to use "alias char[] string", but dmd complains about conflicts with the builtin "alias invariant(char)[] string"
> 
> Is there any way to redefine string in the scope of the library?

I don't think so.

> I know I could simply use another name or use char[] but if it's possible to redefine it, I'd love to do that.

You're best off not trying to mess with type definitions like this.  It would confuse anybody who tries to use your library.  Just use char[] as it is - it'll be understood by everyone and keeps things simple.

Stewart.