On 8/27/10 7:44 PDT, Pillsy wrote:
dsimcha Wrote:
[...]
I'd like any comments anyone might have on to what extent
arbitrarily expensive postblits should be considered in the
design of Phobos.

I agree with you: expensive post-blits just don't seem sufficiently
necessary in D to warp the design of the standard library around
them, and have a distinctly anti-patternish feel to them. You have
too many other options, like straight reference semantics, copy-on-
write, and (with immutability and GC) safely shared structure.

The last can be an incredibly useful technique for reducing the
cost of copying, because it allows you to treat an immutable
reference type exactly like a value type.

Cheers,
Pillsy

Clearly immutable sharing helps, and clearly reference counting and COW are valid techniques. However, the situation is not as cut and dried.

The problem with RC/COW is that they reduce exception safety essentially _everywhere_ else but the copy constructor. Once you have a type using RC/COW, any mutation of that object, even one that ostensibly doesn't cause resource allocation, might have arbitrary cost or fail. This was the experience with std::string in C++ - its creators did everything they could to enable reference counting, and the outcome was quite unpleasant.

Add to this the implementation annoyance of checking for aliasing in _every_ single method of the type. RefCounted in phobos can help with that, but not without a cost.

So I'm not sure it's as simple a decision as it might sound.


Andrei

Reply via email to