Язык программирования Оберон-2

D5. Структуры данных времени выполнения



D5. Структуры данных времени выполнения

Некоторая информация о записях должна быть доступна во время выполнения: Динамический тип записей необходим для проверки и охраны типа. Таблица с адресами процедур, связанных с записью, необходима для их вызова. Наконец, сборщик мусора нуждается в информации о расположении указателей в динамически распределенных записях. Вся эта информация сохраняется в так называемых дескрипторах типа. Один дескриптор необходим во время выполнения для каждого типа записи. Ниже показана возможная реализация дескрипторов типа.
Динамический тип записи соответствует адресу дескриптора типа. Для динамически распределенных записей этот адрес сохраняется в так называемом теге типа, который предшествует фактическим данным записи и является невидимым для программиста. Если t - переменная типа CenterTree (см. ), рисунок D показывает одну из возможных реализаций структур данных времени выполнения.

Рисунок D переменная t типа CenterTree, запись t^, на которую она указывает, и дескриптор типа

Поскольку и таблица адресов процедур и таблица смещений указателей должны иметь фиксированное смещение относительно адреса дескриптора типа, и поскольку они могут расти, когда тип расширяется и добавляются новые процедуры и указатели, то таблицы размещены в противоположных концах дескриптора типа и растут в разных направлениях.
Связанная с типом процедура t.P вызывается как t^.tag^.ProcTab[IndexP]. Индекс таблицы процедур для каждой связанной с типом процедуры известен во время компиляции. Проверка типа v IS T транслируется в v^.tag^.BaseTypes [ExtensionLevelT] = TypeDescrAdrT. И уровень расширения типа запись (ExtensionLevelT), и адрес описателя типа (TypeDescrAdrT) известны во время компиляции. Например, уровень расширения Node - 0 (этот тип не имеет базового типа), а уровень расширения CenterNode равен 1.

[1] N.Wirth, J.Gutknecht: The Oberon System. Software Practice and Experience 19, 9, Sept. 1989
[2] M.Reiser: The Oberon System. User Guide and Programming Manual. Addison-Wesley, 1991
[3] C.Pfister, B.Heeb, J.Templ: Oberon Technical Notes. Report 156, ETH Zurich, March 1991



Содержание раздела