On Friday, 25 October 2013 at 14:09:55 UTC, Jakob Ovrum wrote:
On Friday, 25 October 2013 at 12:07:30 UTC, Namespace wrote:
On Friday, 25 October 2013 at 11:21:55 UTC, Jakob Ovrum wrote:
On Friday, 25 October 2013 at 10:02:08 UTC, Namespace wrote:
On Friday, 25 October 2013 at 09:51:40 UTC, Maxim Fomin wrote:
On Friday, 25 October 2013 at 09:37:23 UTC, Namespace wrote:

We would have then the possibility to manage our memory by ourself. One of D's promises is, that the GC can be disabled. Yes, it can, but then we have many many things which do not work. For example built-in arrays.

Not only arrays, but classes, throwables, scope exits, new operator, nested structs, etc.

Thats right.
But I often use temporary arrays, but I still don't like them because they are always consume so much GC memory. But with allocators that would end. Let us hope that Walter has the right intention and that Andrei design the allocators for this purpose.

Why does it have to be the opaque druntime dynamic array? Why can't you use the hypothetical (planned, rather) std.container.Array that supports custom allocators, or a type of your own design?

Because Array!int looks a lot more ugly than such a nice thing as int[].

If the template syntax is too ugly then we've really failed at designing an extensible development platform. Even so, with type inference and aliases, the need to write down involved names is all but eliminated (not that I think Array!int is a particularly involved name).

Not everything belongs in the core language. Conflating slices with garbage collected dynamic arrays is a mistake we have to live with, but let's not make the situation even more complicated.
I don't get your problem.

And if it is possible to change the allocator for some arrays, why shouldn't we implement it?

Because it has a significant cost.
Which cost?


The default allocator would stay the GC allocator. So if you don't want to swap the allocator of your arrays, don't do it.

That's fine as long as you only use the array locally and don't pass it to any code that depends on infinite lifetime semantics. It also enables circumvention of SafeD unless some language rules are changed.
The language cannot protect you from every mistake you can do. You should know what you do. If you don't, don't use such a feature. It's very simple.

Reply via email to