Tango for D2 doesn't exist. D1 has been deprecated. Phobos *is* the standard library.
D takes syntax from multiple languages indeed but it doesn't force you to use a certain syntax.
For instance, here's a code snippet using OpenAL through bindings I made to resemble the C counterpart:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
import std.c.stdio;
import std.c.string;
import AL.al;
import AL.alc;
int main()
{
const(char)* it = alcGetString(null, ALC_DEVICE_SPECIFIER);
while (*it != '\0') {
int n = strlen(it) + 1;
printf("%i ", n);
printf("%s ", it);
printf("%x %x %x\n", *(it+n-2), *(it+n-1), *(it+n));
it += n;
}
return 0;
}
|
As you can see, there's very little difference between the C counterpart and this. However, there are a lot more ways I could create this to be more D savvy and so on.
By default, you cannot use Phobos without using its garbage collector. Thus, if you wish to do something low level such as create an efficient driver, you simply can't without a standard library implementation other than what's provided or making your own i.e. it forces GC onto you. There are ways you can avoid the GC and use phobos but it's super restrictive and error bound. I have no issues with a GC but in a library, I'd like my users to decide what they want. The D language itself doesn't have a lot of restrictions, most of the issues are really in its implementations.
This isn't the purpose of this topic anyways. If you wish to discuss this, I would go onto their mailing lists to see the changes between D1 and D2, and to see what inspired some of the syntax (most of which is answered by their FAQ).