toString refactor in druntime

Steven Schveighoffer via Digitalmars-d digitalmars-d at puremagic.com
Mon Nov 3 17:41:20 PST 2014


On 11/3/14 8:09 PM, Walter Bright wrote:
> On 11/3/2014 2:28 PM, Steven Schveighoffer wrote:
>> I had a very nasty experience with using a template-based API. I vowed
>> to avoid
>> it wherever possible.
>>
>> The culprit was std::string -- it changed something internally from
>> one version
>> of libc++ to the next on Linux. So I had to recompile everything, but
>> the whole
>> system I was using was with .so objects.
>>
>> templates do NOT make good API types IMO.
>
> It seems this is blaming templates for a different problem.
>
> If I have:
>
>    struct S { int x; };
>
> in my C .h file, and I change it to:
>
>    struct S { int x,y; };
>
> Then all my API functions that take S as a value argument will require
> recompilation of any code that uses it.
>
> Would you conclude that C sux for making APIs? Of course not. You'd say
> that a stable API should use reference types, not value types.

a string is a reference type, the data is on the heap.

But that is not the issue. The issue is that it's IMPOSSIBLE for me to 
ensure std::string remains stable, because it's necessarily completely 
exposed. There is no encapsulation.

Even if I used a pointer to a std::string, the implementation change is 
going to cause issues.

On the contrary, having C-strings as a parameter type has never broken 
for me. In later projects, I have added simple "immutable string" type 
modeled after D, which works so much better :)

-Steve


More information about the Digitalmars-d mailing list