Is there something special required to use Appender.clear

Steven Schveighoffer schveiguy at gmail.com
Thu Jan 24 18:28:02 UTC 2019


On 1/24/19 7:35 AM, FeepingCreature wrote:
> On Tuesday, 27 March 2018 at 12:31:05 UTC, Simen Kjærås wrote:
>> On Tuesday, 27 March 2018 at 12:17:58 UTC, Ellie Harper wrote:
>>> Sorry if this is a stupid question, but is there something special 
>>> required to call Appender.clear?  When I attempt even just a simple 
>>> use I am getting compile errors relating to `template object.clear`.
>>
>> From the documentation for Appender:
>>
>>> Note
>>> clear is disabled for immutable or const element types, due to the 
>>> possibility that Appender might overwrite immutable data.
>>
>> Since string is immutable(char)[], clear() is simply not available for 
>> appender!string.
>>
> 
> Isn't this wrong, though? Appender controls the memory it references. It 
> could just choose to allocate non-immutable memory internally. As long 
> as any const data put into the appender is *returned* as const, there is 
> no chance of immutable memory being overwritten.

Appender is sometimes given a starting array. clear isn't callable in 
that case, and we don't distinguish the difference in the type or at 
runtime.

I did a lot of work on std.array.Appender when I redid the array runtime 
to fix array appending back in 2010 to make it safe. e.g.: 
https://github.com/schveiguy/phobos/commit/7e89201cdae96e71e550afe72b59ef3db145916f

Disabling clear from appender for non-mutable element types was one of 
the changes: 
https://github.com/schveiguy/phobos/commit/6636569318d26545bf7c36ddac029830a6d52531

This is before we were on github, so I don't know if there's any 
discussion of the issues, perhaps on the mailing list, but looking at my 
emails around that time, there are some emails that aren't in the 
mailing list.

A funny thing I wrote to Walter/Sean around that time, when I was just 
getting druntime commit access:

"I don't mind helping out in druntime, but I'm not really any kind of 
expert on the runtime, and I doubt I'll make many contributions besides 
this one without assignment."

;)

FYI, this thread is almost a year old.

-Steve


More information about the Digitalmars-d-learn mailing list