Лекция 14 (лекции (2002)), страница 3
Описание файла
Файл "Лекция 14" внутри архива находится в папке "лекции (2002)". Документ из архива "лекции (2002)", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "Лекция 14"
Текст 3 страницы из документа "Лекция 14"
Особенностью этих вложенных модулей является то, что для них контекст трансляции- это не только внешние модули, которые связываются с помощью импорта, но и контекст объемлющей единицы. Это очень существенно, потому что при одностороннем связывании в трансляционной библиотеки должна храниться только информация из интерфейсов, например, специификации пакетов. В случае вот такого объемлющего связывания необходима информация не только из спецификации, но и из тела пакета, то есть полная информация о контексте трансляции данной програмной единицы. Все имена.
б)Двустороннее связывание.
В Аде есть и одностороннее связывание и двустороннее связывание. Тривиальный пример двустороннего связывания есть и в таком языке, как Модула-2:
DEFINITION MODULE M;
...
END M;
IMPLEMENTATION MODULE M;
...
END M;
Связывание модуля определений и модуля реализации по имени. Если есть модуль реализации, то для него должен существовать модуль определений. Но он тривиален и неинтересен.
Рассмотрим как в языке Ада реализуется одностороннее и двустороннее связывание (примерно тоже самое как и в других ЯП):
а)ЕК (единица компиляции- последовательность логических модулей, где под логическим модулем, как уже говорилось, либо тело пакета, либо спецификация пакета, либо подпрограммы) WITH список имён пакетов (имена и спецификации из таких вот спецификаций пакетов необходимы нам для оттранслирования всех этих логических модулей, то есть этой ЕК);
ЛМ1 (логический модуль)
ЛМ2
...
ЛМN
Эта конструкция должна стоять первой в ЕК. Это похоже на конструкцию IMPORT (Оберон, Модула-2).
Имена из этих спецификаций становятся видимы только потенциально (можем писать так: «X : M1.T», где Т- это имя, объявленное в спецификации модуля М1). Если хотим снять потенциальную видимость, то можем в качестве второго оператора после WITH указать оператор:
USE список2;
где список2- это подмножество списка имён пакетов. Эта конструкция говорит, что для трансляции нам понадобятся соответствующие спецификации пакетов из трансляционной библиотеки и они должны быть уже оттранслированы, а если мы хотим снять потенциальную видимость, то мы соответственно используем WITH и дальше, соответсвенно, следует USE. Это классическая односторонняя связь, в том же виде, в каком она была и в Обероне и в Модуле-2 и в Delphi. Разница в том, что если там под ЕК подразумевался строго один ЛМ, то здесь, в принцыпе, может идти произвольная последовательность ЛМ. В случае, если мв се ЛМ объединяем в одну ЕК, никакой
WITH … USE нам уже не нужен- у нас программа превращается в цельную трансляцию. Программист выбирает сам.
б)(Это связь по вложению, когда один пакет вкладывается в другой: ситуация, которой ни в одном из этих языков нет) разберём на следующей лекции