Re[7]: преимущества неуправляемого С++
От: S.Yu.Gubanov Россия http://sergey-gubanov.livejournal.com/
Дата: 28.07.04 08:17
Оценка:
Здравствуйте, degor, Вы писали:

SYG>>тот же Windows с Unix-ом не модульные и ничего вроде, нормально работают.

D>Вот только не надо валить в одну кучу современные Windows системы и технологию тридцатилетней давности.

О-о-о! Оценил. Уважаю.

По поводу COM-ов:
Я сказал что Windows не модульная система и еще сказал что под Windows нельзя писать модульные программы. Вы удивились и спросили, а как же тогда COM? Не беспокойтесь, все очень просто. Дело в том что среда Win32 и среда COM — разные вещи. Среда COM существует поверх среды Win32, точно также как среда BlackBox от Oberon Microsystems тоже существует поверх среды Win32.

Кстати, под названием COM можно даже понимать ее последнюю версию COM3, которая носит гордое название ".NET".

Цитата:
"Среда CLR применяется в качестве первичного загрузчика кода вместо команды CoCreateInstance среды COM или команды LoadLibrary среды Win32"
Основы платформы .NET, Том 1, Общеязыковая исполняющая среда, Д. Бокс, К Селлз.


SYG>>>Единственным выходом из этой ситуации является наличие единого на всю операционную систему полноценного сборщика мусора. Сборщик мусора — это не роскошь, и не фича придуманная для ленивых программистов. Сборщик мусора — это осознанная необходимость. Существование многомодульныех систем, модули которых обмениваются друг с другом объектами, невозможно без одного на всех полноценного сборщика мусора.


D>Не понял, откуда это следует.


На примерах чтоли объяснять?

Пусть есть три модуля:
MODULE M0;

TYPE
  T0* = POINTER TO ABSTRACT RECORD
    Value*: T1;
    Next* : T0;   
  END;

  T1* = POINTER TO ABSTRACT RECORD
    Value*: T0;
    Next* : T1;   
  END;

END M0.

MODULE M0T0;
IMPORT M0;

  PROCEDURE Create*(): M0.T0;

END M0T0.

MODULE M0T1;
IMPORT M0;

  PROCEDURE Create*(): M0.T1;

END M0T1.

Модули M0T0 и M0T1 создают объекты и отдают их каким угодно другим модулям, те отдают третьим, те четвертым и т.д. Кто должен заботится об уничтожении более не нужных объектов? Разумеется сборщик мусора, потому что счетчик ссылок в общем случае не сработает
VAR t0: M0.T0;
    t1: M0.T1;
BEGIN
  t0 := M0T0.Create();
  t1 := M0T1.Create();
  (* А теперь запутаем ссылки друг на друга: *)
  t0.Next  := t0; 
  t0.Value := t1;
  t1.Next  := t1;
  t1.Value := t0; 
  (* Сборщик мусора это запутывание вмиг распутает, а вот счетчики ссылок - будут отдыхать *)
END;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.