On Wednesday, 4 November 2015 at 16:17:29 UTC, Jack Stouffer wrote:
Looking through the source code of std.string, a lot of the functions that allocate have range based non-allocating alternatives that accomplish the same task. I'm wondering if there is any specific reason to keep the allocating versions around? If there are two functions in the same module that perform the same task, why not do the cycle of deprecation->remove docs->remove on the allocating version, as the other function is clearly better. Also, it's more GC handling code that would be removed, which is good for PR reasons.

And why break the code that uses them? They work just fine, and for many programs, the allocation is a non-issue and simply getting a string back rather than a range is more user-friendly. We probably wouldn't add functions like them at this point (particularly if we already had the range-based ones), but I really don't see any point in removing them. And even if it were good PR to remove GC-allocating functions, it's bad PR to break existing code, so it needs to have a solid reason as to why it's worth it, which I don't think that we have in this case. And it's not like we're ever going to remove all of the GC-allocating stuff from Phobos anyway. Some stuff needs it. We just want to make it so that the GC is not required by the code when it's not actually required to do what the code does. And if we have an eager function that allocates and a lazy one which doesn't, we've provided the @nogc option for that functionality already.

- Jonathan M Davis

Reply via email to