Провёл тут лабораторную работу.

Написал три модуля:## Код:
```
MODULE PrivA;
   IMPORT Log, PrivB, PrivC;
   PROCEDURE Do*;
   BEGIN
      Log.String('PrivA.Do'); Log.Ln;
   END Do;
BEGIN
   Log.String('PrivA Init'); Log.Ln;
END PrivA.

MODULE PrivB;
   IMPORT Log;
BEGIN
   Log.String('PrivB Init'); Log.Ln
CLOSE
   HALT(101)
END PrivB.

MODULE PrivC;
   IMPORT Log;
BEGIN
   Log.String('PrivC Init'); Log.Ln;
CLOSE
   HALT(102)
END PrivC.
```


Если выполнить PrivA.Do, то получим такие записи в журнале:> -- Цитата:
> PrivB InitPrivC InitPrivA InitPrivA.DoА в списке загруженных модулей увидим последовательность:> -- Цитата:
> PrivAPrivCPrivBЭто означает, что сперва загрузился модуль A. После чего пошла загрузка модулей с конца списка импорта модуля А и загрузился сперва модуль C, а потом B. После того, как модули оказались загружены, начинают работу секции BEGIN каждого из них - только уже в том порядке, в каком они импортированы в A.

А выгружаться они будут в том же порядке, что и загружались - A, C, B.

Довольно очевидные вещи, которые, однако, почему-то сразу не приходят в голову, когда разрабатываешь загружаемые реализации для хоста. Поскольку тут идёт речь о фреймворке в целом, то надо проектировать не только последовательность загрузки, но и последовательность выгрузки.