Hidden allocations (Was: Array literals REALLY should be immutable )
Denis Koroskin
2korden at gmail.com
Thu Nov 12 09:00:52 PST 2009
On Thu, 12 Nov 2009 19:49:58 +0300, dsimcha <dsimcha at yahoo.com> wrote:
> == Quote from Denis Koroskin (2korden at gmail.com)'s article
>> I strongly believe that "No hidden allocation" policy should be adopted
>> by
>> D/Phobos (it is already adopted by Tango with a great success).
>
> I can see the value in this, but two issues:
>
> 1. What counts as a "hidden" allocation? How non-obvious does it have
> to be that
> something requires an allocation? If something really has to allocate
> and it's
> not obvious from the nature of the function, is it enough to just
> document it?
>
I can't give a formal definition of that, but for me a is allowed to
allocate if it produces something new or unique.
For example, void mkdirRecurse(string pathname) shouldn't allocate, but it
does, because the author didn't care about allocations when implemented it.
> 2. How do you really design high-level library functions if they're not
> allowed
> to allocate memory? If you require the user to provide all kinds of
> details about
> where the memory they use comes from then you lose some of the high
> level-ness and
> make it seem more like an ugly C API that doesn't "just work" and
> requires
> attention to the irrelevant the 90% of the time that you don't care
> about an extra
> allocation. The solution I personally use in my dstats lib, which works
> pretty
> well in the limited case of arrays of primitives, but might not
> generalize, is:
>
> a. For stuff that returns an array, the last argument to the
> function is an
> optional buffer. If it is provided and is big enough, the results are
> returned in
> it. If it is not provided or is too small, a new one is allocated.
>
> b. For temporary buffers used within a function, I use a
> thread-local second
> stack (TempAlloc). While this is not **guaranteed** never to result in
> an
> allocation (if we're out of space in our current chunk of memory, a new
> one will
> be allocated), it very seldom does and only when the only alternative
> would be to
> crash, throw an exception, etc.
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
More information about the Digitalmars-d
mailing list