Steven Schveighoffer wrote:
On Thu, 18 Nov 2010 14:19:12 -0500, Walter Bright <[email protected]> wrote:

Steven Schveighoffer wrote:
My recommendation -- when you are ready, switch wholly to D2. Don't bother with compatibility, it's just not possible.

From what you wrote, it appears that most of the difficulties were in dealing with strings. Might I suggest:

1. Replace all occurrences of char[] with string.

2. Compile to find every place that mutable strings are used.

3. Refactor the code to clearly encapsulate where mutable strings are created and manipulated, and as the last step, cast them to string.

But string is not always what is desired.  It depends on the library.

Right.


Tango uses mutable arrays everywhere because it prefers not to use the heap as much as possible. For example, something might take a char[] buffer, and a function may pass in a stack-allocated array for the buffer. Changing this to string is useless.

That's where refactoring comes in. I haven't looked at the Tango code, but there's a big difference between "using mutable arrays everywhere" and actually needing to mutate them. Only the latter needs to be char[], and the boundaries between the two are bridged with a .idup or a cast(string).

If Tango is relying on string literals to be char[], i.e. be mutable, this is a serious bug and will cause seg faults. So, this issue must have already been dealt with in Tango, and codifying string literal types as "string" rather than "char[]" should not negatively impact it.

And lastly, if there are APIs in tango that accept char[] and leave the caller perplexed about whether the API will mutate the string or not, that is something that using string for the non-mutating ones nicely resolves.

Reply via email to