Re[19]: Goto's are evil?
От: Cyberax Марс  
Дата: 02.12.05 07:26
Оценка:
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
Sapienti sat!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.