reductor wrote:
> ПК>Пожалуй, правильнее говорить об управлении временем жизни объектов,
> с чем C++, действительно, справляется лучше ряда других языков
> благодаря детерминированному разрушению объектов. GC этой задачи не
> решает.
> Я все же не понимаю кое-чего. Для каких задач нужно такое управление?
Например, если нельзя допускать пауз GC и большого оверхеда
конкурентного GC. Или если существуют гораздо более эффективные методы
управления памятью для данной задачи (preallocated пулы, например). Или
если требуется
детерминированое уничтожение объекта.
> Но даже если так, почему С++ здесь справляется лучше тех языков, у
> которых нет проблем с алиасингом?
А в С++ нет проблем с алиасингом. Более того, он тоже успешно
используется для некоторых трюков. Вот вам прямо с About Haskell
(
http://www.haskell.org/aboutHaskell.html):
It isn't all roses, of course. The C quicksort uses an extremely
ingenious technique, invented by Hoare, whereby it sorts the array /in
place/; that is, without using any extra storage. As a result, it runs
quickly, and in a small amount of memory. In contrast, the Haskell
program allocates quite a lot of extra memory behind the scenes, and
runs rather slower than the C program.
In effect, the C quicksort does some very ingenious storage management,
trading this algorithmic complexity for a reduction in run-time storage
management costs.
In applications where performance is required at any cost, or when the
goal is detailed tuning of a low-level algorithm, an imperative language
like C would probably be a better choice than Haskell, exactly because
it provides more intimate control over the exact way in which the
computation is carried out.
> Окамла, у которого очень прогрессивный копирующий GC при котором куча
> всегда утрамбована и который еще и полностью управляемый?
> Или чем С++ здесь лучше Cyclone c его регионами и прочим?
А говорите "выучить язык за пару дней"...
В С++ продумано взаимодействие аллокаторов, стандартных контейнеров,
алгоритмов и т.п. Например, как мне поместить в контейнер OCaml'а
объект, созданый в блоке shared memory? Причем указатели в этом объекте
представлены в виде смещений относительно начала блока, а null pointer
представлен в виде указателя со смещением -1.
--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0