On Wednesday, 17 June 2015 at 06:08:57 UTC, Andrei Alexandrescu wrote:
Even if we implement the change to be memory-safe, there's still changes in semantics (e.g. the behavior of orphan ranges changes). And even if we change behavior that wasn't specified explicitly in the docs, it's still a change in behavior. The same goes for other functions that remove elements from containers.

std.container.gc and std.container.rc?


Oh, and one more thing I noticed:

* The documentation is appallingly bad, making std.container worse than non-existent. We have a liability squared to deal with here. I've pretended to myself I hadn't implemented SList and it was nigh impossible to use it competently from documentation alone, let alone understand the deeper architectural underpinnings that apply to other containers. This is another manifestation of the systemic problem of our community that's been discussed here in the past - there are matters that greatly affect negatively the uptake of D, yet they stay unresolved for literally months and years in spite of being trivially simple. For a potential user who sees today "std.container" in the library offering list, the subsequent click will lead almost by necessity to a vote of non-confidence.

I will take a look at the docs over the next couple of days and see if I can improve them.


Regarding compatibility, I see three possibilities:

1. Just keep the current spec and deal with it. Some containers are and will remain garbage collected because they started as such. Add new containers that are better alongside them.

2. Do break compatibility of containers, mainly by taking advantage of them being under-documented. In a way we wouldn't break much because not much has been specified. There are, however, parts where we'd need to change specification.

3. Leave std.container alone and move forward with std.experimental.collection. I am confident the language and its endorsed idioms have reached enough maturity to not make this addition into a regular event.

3 seems to be the best option, or 1 in a pinch. I don't think 2 is really necessary if std.container is separated into GC'd and RC'd containers.


As an aside, I've only used std.container once, to port some trivial Java code to D. I ended up spending far more time than was necessary trying to get my code to even compile, due to issues such as RedBlackTree!(int, (a, b) => a < b) and RedBlackTree(int, (a, b) => a < b) being two different types. It did not leave me with a good impression of std.container.

Reply via email to