Welcome to the D 2.0 port of tango. THIS BRANCH IS VERY EXPERIMENTAL Don't expect everything to work. D 2.0 has radical changes from D 1.x, so there are many things that will not be backwards compatible. The most obvious of these is the new const system. CONST You might notice the proliferation of constness everywhere. As const is in a state of flux over at digitalmars, we have defined some really ugly looking aliases for const string types. Notably Cutf8, Cutf16, and Cutf32. Phobos defines invariant versions of strings as string, wstring, and dstring, but does not define const versions. As of now, we are not using invariant anywhere in our code explicitly, so we use const versions. The purpose of using such ugly names are so we can rename them later at will. Doing a global search/replace will be easy because who in their right mind would use such names for anything else? So please use CutfXX if you are adding code to tango, or if you want to do a search and replace on your own code once the names are solidified. To do a const string in a template based on the char type, use const(T)[]. You also might notice that we do not use invariant types anywhere explicitly. This is because we are not sure how invariant is going to end up being used by the D compiler. For example, it uses invariant to represent string constants, but not other array constants. Both invariant and mutable types can be implicitly casted to const, so we use const wherever it makes sense. Once invariant becomes more solidified, it might be used in special cases where compiler optimizations would be useful. Finally, a note on const functions. Const functions are not enforcable because there is a bug that allows derived classes to override a const function with a non-const function. If you override a const function, REMEMBER to specify the function as const, or your code will not only be incorrect, but will not compile once this bug is fixed. Don't use the bug as a way to implement head-const! PLATFORMS We have been testing the work done so far on Windows and Linux. Any help for other platforms is much appreciated. COMPILERS We have only been testing with dmd. If someone wants to test with gdc, we would love to add that capability! ISSUES If you find a problem, and you think it is a bug, please create a ticket and set the version to D2.0_branch. If you're not sure, post it to the forums. KNOWN COMPILER BUGS dmd has some bugs that currently make compilation of tango difficult. These bugs have been filed with digitalmars, and this list will be updated as new ones are found, or old ones are fixed. 1. dmd -H does not generate .di files properly when dealing with function pointers. Because of this, you must edit the following files after they are generated before installing tango: tango/core/Thread.di tango/core/Runtime.di Replace any instance of function(...)* with function(...) Bug id=1651 2. delegates are not recognized without a qualifying 'this'. For example, if you want to create a thread from a method delegate in a class: this() { mythread = new Thread(&run); } This won't compile, you must do: mythread = new Thread(&this.run); Bug id=1646