Н. Джехани - Язык Ада (1988) (1160771), страница 117
Текст из файла (страница 117)
Соглашения, использованные в других языковых процессорах, которые вы. зывают Ада-программы, не являются частью определения языка Ада. Эти соглашения должны быть определены в описании других языковых процессоров. Прагма (МТЕЯРАСЕ не определена для настраиваемых подпрограмм. Ссылки: библиотечный модуль 10.1, вызов подпрограммы 6.4, должен 1.6, допустимый 1.6, имя 4.1, компилируемый модуль 10.1, описание 3.1, описание подпрограммы 6.1, параметр подпрограммы 6.2, подпрограмма 6, прагма 28, раздел описаний 3.9, результат функции 65, след тела 10.2, совмещенная подпрограмма 6.6, спецификация пакета 7.1, тело подпрограммы 6.3, элемент описания 3.9.
13.10. НЕКОНТРОЛИРУЕМОЕ ПРОГРАММИРОВАНИЕ Для неконтролируемого освобождения памяти и неконтролируемого преобразования ти. лов используются предопределенные настраиваемые библиотечные подпрограммьс 0МСНЕСКЕО ОЕАЕЕОСАТЮМ и ОМСНЕСКЕО СОМЧЕЯЗЮМ. вппе!с суре ОВЗЕСТ (с Егпвев ринИе; !уре МАМЕ ! ° васева ОВЗЕСТ; ргссвсисе ОМСНЕСКЕО ОЕАЬЬОСАТ(ОМ(Х: (и оы МАМЕ); вы!вне суре ВОЦНСЕ (с Егп(шк рясам; суре ТАНВЕТ ! ° Еизпш рлуые; (ппсооп ОМСНЕСКЕО СОМЧЕНВЮМ(8: ВООНСЕ) геьип ТАНОЕТ; С ка ы и отселения и особенности зааяса от пза ая 13.10.1. НЕКОНТРОЛИРУЕМОЕ ОСВОБОЖДЕНИЕ ПАМЯТИ В результате вызова процедуры, полученной конкретизацией настраиваемой процедуры ОМСНЕСКЕО ОЕАЕЕОСАТ(ОМ, производится неконтролируемое освобождение памяти, занимаемой объектом, указанным значением ссылочного типа.
Например; спмееме ГЯее (е Яем Омснескео Оеяььосят1ом(имл типе объекта, имЯ ссылочного типа); Такая процедура ГЙЕЕ дает следующий результат: а) после выполнения ГЙЕЕ(Х) значением Х является лмд; б) если Х уже равно лмй, то ГЙЕЕ(Х) не имеет другого результата; в) если Х не равно пмй, то ГЙЕЕ(Х) обозначает, что указанный значением Х объект не требуется, и поэтому занимаемая им память может использоваться для других целей. Если Х и у указывают на один и тот же объект, то посла вызова ГЙЕЕ(Х) доступ к этому объекту (или попытка доступа к нему) через у ошибочен; язык не определяет, что происходит в результате такого доступа. Примечание.
Согласно правилам видимости, настраиваемая процедура ОМСНЕСКЕО ОЕАЕЕОСАТ(ОМ невидима в компилируемом модуле, если только ее имя не указано в спецификаторе совместности этого компилируемого модуля. Если Х указывает на объект эадачного типа, то вызов ГЙЕЕ(Х) никак не влияет на задачу, укаэанную значением этого объекта. Это же относится и к любой подкомпоненте задачного типа объекта Х. Ссылки: библиотечный модуль 10.1, видимость 8.3, вызов процедуры бдя задача 9, задачный объект 9.2, значение ссылочного типа лмд 3.3, компилируемый модуль 10.1, конкретизация настройки 12.3, настраиваемый модуль 12, настраиваемая процедура 12.1, объект 3.2, ошибоч.
но 1.6, подкомпонента 3.3, применим 10.1.1, процедура 6, спецификатор совместности 10.1.1, ссылочный тип 3.8, указывать 3.8, 9.1. 13.10.2. НЕКОНТРОЛИРУЕМОЕ ПРЕОБРАЗОВАНИЕ ТИПА Неконтролируемое преобразование типа можно осуществить вызовом функции, полученной конкретизацией настраиваемой функции ОМСНЕСКЕО СОМНЕЙВ(ОМ. Неконтролируемое преобразование типа состоит в возврате значения параметра в качестве значения целевого типа, т.е. поразрядное изображение, определяющее исходное значение, возвращается неизменным, как поразрядное изображение значения целевого типа. Реализация может наложить ограничения на неконтролирумое преобразование типа, например ограничения,зависящие от предполагаемых размеров объектов исходного и целевого типов. Такие ограничения должны быть отражены в приложении Г.
При использовании неконтролируемых преобразований типов сам программист несет ответственность за сохранность свойств, гарантируемых языком для объектов целевого типа Программы, нарушающие их свойства при неконтролируемых преобразованиях, являются оши. бочнымн. Примечание. Согласно правилам видимости, настраиваемая функция ОМСНЕСКЕО СОМНЕЙВЮМ невидима в компилируемом модуле, если она не упомянута в спе. цификаторе совместности этого компилируемого модуля. Ссылки: компилируемый модуль 10.1, конкретизация 12.3, настраиваемая функция 12.1, ошибочный 1.6, параметр подпрограммы 6.2, применим 10.1.1, спецификатор совместности 10.1.1, тип 3.3.
Глава 14 ввод-вывод Ввод-вывод в языке обеспечивается предопределенными пакетами. Настраиваемьш пакеты ЗЕООЕМТ!АЕ Ю и 0(ВЕСТ Ю определяют операции ввода-вывода, которые примени. мы для файлов с элементами данного типа. В пакете ТЕХТ Ю даны дополнительные операции вводшвывода текстов. В пакете 1О ЕХСЕРТЮМЗ определены исключения, необходимые при работе трех укаэанных пакетов. Наконец, пакет (.Оуу ЕЕЧЕЕ Ю позволяет осуществлять непосредственное управление периферийными устройствами. Ссыпки: пакет О!ВЕСТ 10 14.2, 14.2.4, пакет Ю ЕХСЕРТЮМЗ 14.5, пакет (.Оуу ЕЕЧЕЕ Ю 14.6, пакет ЗЕООЕМТ1АЕ (О 14.2, 14.2.2, пакет ТЕХТ Ю 14.3.
14.1. ВНЕШНИЕ ФАЙЛЫ И ФАЙЛОВЫЕ ОБЪЕКТЫ Значения, вводимые из внешнего для программы окружения или выводимые в это окру. жение, размещаются во внешних файлах. Внешним файлом может быть нечто внешнее по от. ношению к программе, которая может произвести читаемое значение или получить записываемое. Внешний файл идентифицируется строкой (именем). Вторая строка (форма) задает доло. лнительные системно. зависимые характеристики, которыя могут быть сопоставлены с файлом, например физическая организация или права доступа.
Соглашения об интерпретации таких строк должны быть приведены в приложении Р. Операции ввода и вывода выражены операциями над объектами некоторого файлового типа, а не непосредственно в терминах внешних файлов. Далев в этой главе термин файл будет всегда использоваться для ссыпки на объект файлового типа; в остальных случаях будет использоваться термин внешний файл. Значения, передаваемые данному файлу, должны быть все одного и того же типа. Ввод и вывод для последовательных файлов из элементов некоторого типа определены настраиваемым пакетом ЗЕООЕМТ(АЕ Ю. Общая структура этого пакета дана ниже. уукв Ю ЕХСЕРТ(ОМЗ; яааегш суре ЕЬЕМЕМТ ТУРЕ (а ри Ма! Расяева ЗЕООЕМТ(А) 10 М !УРе Р(ЬЕ ТУРЕ 1 ° Еплм!4 Рнуые( ууре Рще моое ь йм Яье, Омт В1.е); р!осело!а ОРЕМ (РЛ.Е: (о оы РП.Е ТУРЕ; ...1; Ртосаоеге леАО (щье: ь мье туРе; (тем: осу еьемемт туРе): ргосееые УУП(ТЕ (МЬЕ: 1я ЩЬЕ ТУРЕ; (ТЕМ: Ь ЕЬЕМЕМТ ТУРЕ); еле ЗЕООЕМТ1А1 Ю; Для определения последовательного ввода-вывода элементов данного типа должна быть описана конкретизация этого настраиваемого модуля с фактическим параметром данного типа.
Конкретизация настройки содержит описание файлового типа (названного Р(ЕЕ ТУРЦ для файлов таких элементов, а также операции над этими файлами — например, процедуры ОРЕМ, ВЕАО и УЧЯ(ТЕ. Ввод-вывод для файлов прямого доступа определен аналогичным способом в настраивае. мом пакете 0(ВЕСТ Ю. Ввод-вывод в текстовой форме определен в (ненастраиваемом) пакете ТЕХТ Ю. До выполнения ввода или вывода как операции над файлом должна быть установлена связь файла с внешним файлом. Когда такая связь установлена, файл называется открытым, в противном случае — закрытым.
В языке не определено, что происходит с внешними файлами после завершения работы главной программы (в частности, если соответствующие файлы не были закрыты). Результат выполнения ввода-вывода над ссылочными типами зависит от реализации. Вв еыво Открытый фаил имеет текущий вид, который является значением одного из перечисленных типов: !тра Г(ЬЕ ЬЮОЕ !з ЛМ ЯЬЕ, !МООТ К(ЬЕ 00т Г(ЬЕ); — дпя б(яЕСТ Ю !тле Я!ЬВ МОРЕ М ЛМ ЯРВ СОТ ЯЬВ; — дпя ЗВО0вит!А Ю и твкт Ю Эти значения соответствуют случаям, когда можно осуществить либо только чтение, либо чтение и запись, либо только запись. Вид файла может быть изменен. Некоторые из операций управления файлами являются общими для всех трех пакетов ввода-вывода.
Эти операции над последовательными файлами и файлами прямого доступа описаны в равд. 14.2.1. Дополнительные особенности ввода-вывода текстов описаны в равд. 14.3.1. В пакете !О ЕХСЕРТЮМЗ определены все исключения, которые могут быть возбуждены при вызове подпрограммы ввода-вывода; ситуации их возбуждения описаны либо при описании подпрограмм ввода и вывода (и в равд.
14.4), либо В приложении Е для ошибочных ситуа. ций, зависящих от реализации. Примечание. Каждая конкретизация настраиваемых пакетов ЗЕО0ЕМТ!Аь (О и С!ВЕСТ (О задает разные типы Е!ЕЕ ТУРЕ; уникальным является тип Е!ЕЕ ТУРЕ в пакете ТЕХТ Ю. Устройство с двусторонней связью часто может быть промоделировано двумя файлами с последовательным доступом, связанными с этим устройством; один — вида !М Е!ЕЕ, а дру.
гой — вида 00Т Г!ЕЕ. Реализация может ограничить число файлов, которые могут быть свя. заны с данным внешним файлом. В этом случае результат такого разделения внешнего файла несколькими объектами файлового типа зависит от реализации. Ссылки: вид файла 14.2.3, индекс 14.2, исключение 11, конкретизация настройки 12.3, открытый файл 14.1, пакет 0(ВЕСТ )О 14.1, 14.2, пакет ЕХСЕРТЮМЗ 14.5, пакет ЗЕО0ЕМТ(А~ )О 14.2, 14.2.2, пакет ТЕХТ Ю 14.3, перечислимый тип 3.5.1, последовательный ввод.
вывод 14.2.2, последовательный доступ 14.2, процедура СЯЕАТЕ 14.2.1, процедура ОЕЕЕТЕ 14.2.1, процедура ОРЕМ 14.2.1, процедура ЯЕАС 14.2.4, процедура ууЯ!ТЕ 14.2.4, процедура для файлов прямого доступа 14.2, прямой доступ 14.2, строка 3.6.3, текущий индекс 14.2, текущий размер 14, файл последовательного доступа 14.2. 14.2. ФАЙЛЫ ПОСЛЕДОВАТЕЛЬНОГО И ПРЯМОРО ДОСТУПА Для внешних файлов определены два сорта доступа: последовательный доступ и прямой доступ.