On Thu, 11 Nov 2010 15:33:41 -0500, Eric Desbiens <olace.m...@gmail.com> wrote:

Hello,

If I create an appender for a string, I cannot call the funtion clear or
shrinkTo. For example:

    auto strAppender = appender!string();
    strAppender.clear();
    strAppender.shrinkTo();

gives compilation error. In std.array source code, it seems that it allows those function to work only on types that are not immutable. But on a normal
string, I can change the length with no problem or reinitialize it.

I am pretty new to D and I just want to be sure that this is a bug before
reporting it in bugzilla or if this is by design.

It's not a bug, it's to prevent immutable data from being mutated.

When you shrink the length of a builtin string, it does work, but any appending from that point will create a copy of that string to append to. Appender is built for appending and so is more focused on appending in-place. Therefore, clear and shrinkTo allow you to overwrite the data that had already been valid. This is no good with immutable data.

As a solution, you can simply create a new appender:

strAppender = strAppender.init;

However, that seems limited, now that I look at it. It may be better to allow clear at least to simply reset the appended-to array to null, and allow you to start appending again.

Go ahead and file a bug, and mark it as an enhancement.

-Steve

Reply via email to