Cтраница 3
Мы полагаем также, что часть предоставляемых средств управления типами ( но не все) могла бы быть применена в рамках языка Ада. Однако следует понимать, что язык Ада был разработан для программ, выполняющихся в относительно статическом окружении. Тем самым подразумевается, что исполнение программы, написанной на языке Ада, будет происходить в системе с относительно фиксированной конфигурацией. Если должно произойти изменение среды исполнения, программа, возможно, должна быть изменена ( автономно), перетранслирована и затем загружена заново. Отчасти данное ограничение может быть объяснено желанием гарантировать максимально возможную машинную независимость и мобильность программ. [31]
Кроме основного синтаксического анализа, особо трудными для процесса трансляции являются задачи получения эффективных команд для ввода-вывода, доступа к данным и преобразований типа. Вследствие разнообразия допустимых структур файлов и большого количества различных операций, с помощью которых можно осуществлять доступ к файлам, получить эффективный код для этих операций трудно. Аналогичные проблемы возникают и в случае неявных преобразований типов, так часто происходящих в Кобол-программах. Большое разнообразие допустимых спецификаций типов приводит к чрезвычайно сложному множеству возможных преобразований, которые могут встретиться в программе и для которых необходимо сгенерировать эффективный код. Доступ к данным внутри записей и массивов затрудняется машинной независимостью описаний данных в программе; это часто приводит к тому, что индивидуальные элементы данных не укладываются в естественных границах слов машинной памяти. Например, элемент данных может попасть частично в одно слово, а частично в другое. Генерация кода для эффективного доступа к таким элементам данных часто затруднительна, но она чрезвычайно важна для эффективности выполнения программы. [32]
Наиболее распространенным является использование драйверов устройств. Выделяется некоторый основной набор графических операций, так, что все остальные операции можно реализовать, используя только операции основного набора. Привязка к видеоадаптеру заключается именно в реализации этих основных ( базисных) операций. Для каждого адаптера пишется так называемый драйвер - небольшая программа со стандартным интерфейсом, реализующая все эти операции для данного адаптера и помещаемая в отдельный, файл. Библиотека в начале своей работы определяет тип имеющегося видеоадаптера и загружает соответствующий драйвер в память. Таким образом достигается почти полная машинная независимость написанных программ. [33]