std.allocator ready for some abuse
Dmitry Olshansky
dmitry.olsh at gmail.com
Fri Oct 25 12:03:09 PDT 2013
25-Oct-2013 22:41, Namespace пишет:
> On Friday, 25 October 2013 at 17:57:23 UTC, Dmitry Olshansky wrote:
>> 25-Oct-2013 16:52, Jacob Carlborg пишет:
>>> On 2013-10-25 02:01, Andrei Alexandrescu wrote:
>>>
>>>> Oddly enough this can be actually done.
>>>>
>>>> with (setAllocator!Mallocator)
>>>> {
>>>> ...
>>>> }
>>>>
>>>> setAllcator returns an rvalue that changes the global allocator to the
>>>> Mallocator in the constructor, and restores it to whatever it was in
>>>> the
>>>> destructor.
>>>
>>> Wouldn't this be very unsafe? Say you call another function inside the
>>> with-statement and that function assumes the standard GC for allocating
>>> memory.
>>>
>>
>> Very true. To put it simply it's a disastrous idea that sadly is too
>> easy to be ignored.
>>
>> IMHO we'd better start with containers and refitting Phobos from
>> built-in AA/arrays to user-defined containers. One interesting way
>> there is to accept/adopt containers as OutputRange.
> Did you mean to get rid of built-in arrays / kill int[] and replace it
> with Array!T?
Hm, arrays? Kill? No, they are incredibly nice for prototyping + they
are very useful even as just slices.
What I mean is to make it easy to use Phobos stuff with other containers
in place of built-ins, basically no hard-codding behind the scenes.
Typical offender is Appender - it's rigid, has dangerous API and doesn't
support building anything but T[]. For this particular case see:
http://d.puremagic.com/issues/show_bug.cgi?id=11138
Another one:
http://dlang.org/phobos/std_array.html#.array
It's trivially expendable to any other Array-like type, yet ATM it's
hardwired.
O.T. I'd gladly kill built-in AA though just to save people a lot of
time spent on debugging that crap. More precisely I'd keep AA _literals_
and give the user the means to construct any type of Key-->Value store
out of it. It's too late probably.
--
Dmitry Olshansky
More information about the Digitalmars-d
mailing list