
- •Сегменты стека
- •Динамическая память (куча)
- •Объектно ориентированный подход к проектированию системных модулей на основе концепций интерфейсов и реализаций.
- •Родовые данные или данные класса, значение которых относится не к экземпляру, а к типу в целом.
- •Активные объекты
- •Активные объекты с множественными рабочими потоками
- •Посылка синхронных сообщений
- •Выборка сообщений
- •Пример полной и упрощенной выборки
- •Сообщения, определяемые приложением
- •Локальная память потока
- •Трансляторы, компиляторы и интерпретаторы.
- •Общая схема работы транслятора
- •Понятие прохода
- •Генерация кода
- •Многоадресный код с явно именуемым результатом
- •Алгоритм вычисления выражений в полной записи
- •Современные системы программирования
Трансляторы, компиляторы и интерпретаторы.
Транслятор – программа, которая переводит входную информацию, является записью алгоритма на некотором языке (текстовом, графическом и т.п.), в семантическом эквиваленте запись сточки зрения функций алгоритма на выходном языке.
Самым важным требованием, предъявляемым к транслятору, является обеспечение эквивалентности входных и выходных программ. Поскольку определение и формализация смысла работы программы затруднительно, т.к., как правило, при построении транслирующих систем используются смысловые блоки (операторы условий, циклов, операции ввода/вывода и т.д.). Каждому из таких смысловых блоков можно поставить в соответствие программу на любом языке.
Поскольку каждому такому смысловому блоку можно поставить в соответствие его параметрическую запись на любом языке, то проектирование транслятора будет базироваться в основном на синтаксическом распознавании перечисленных семантических блоков.
Не всякая входная программа может транслироваться, поскольку для получения смыслового эквивалента по крайней мере должна быть осмотрена алгоритмическая конструкция. Каждый язык содержит свод синтаксических правил, определяющий подмножество синтаксических верных программ.
Транслятор сам по себе не сможет обеспечить семантическую корректность, поскольку синтаксически корректными могут быть и бессмысленные, и неработоспособные программы.
Однако предметом области технологии программирования содержит определенные своды правил, позволяющие отделить еще на этапе обработки входного текста подмножество из класса семантически некорректных программ.
Все синтаксические ошибки могут быть легко обнаружены с формальной точки зрения и целью компилятора в данном случае является сохранение контекста в сообщении об ошибке так, чтобы пользователю можно было ее обнаружить и исправить.
Интеллектуальные трансляторы, как правило, должны вести БД типовых путей исправления ошибок, поскольку синтаксис современных языков может быть достаточно сложным.
Некоторые трансляторы предназначены для работы в автоматическом режиме, при котором все сообщения об ошибках фиксируются без немедленного оповещения в интерактивном режиме (например в LOG файл). Поскольку ядро компилятора остается одним и тем же, достаточно иметь несколько модулей анализа для разных режимов работы.
Компилятор – это транслятор, который переводит программу в семантически эквивалентную последовательность машинных инструкций.
Поэтому компиляторы обязательно имеют конкретную цифровую платформу.
Компиляторы имеют те трансляторы, которые на выходе выдают ассемблерный текстовый листинг.
Достоинством способа порождения машинных инструкций является достижимое производство в том случае, если компиляция проходила по оптимальной схеме. В то же время нерациональное порождение машинного кода может приводить к тому, что выдается более медленный код, чем оптимальный интерпретатор.
Интерпретатор – это программа, которая воспринимает запись алгоритма на входном языке и не порождает результат, а непосредственно создает эффект от выполнения алгоритма своими собственными функциональными возможностями.
Интерпретатор своим собственным устройством может ограничивать множество работоспособных входных программ, например, если по каким-либо причинам интерпретатор не выполнил запись файла, то семантически корректные входные программы окажутся неработоспособными. Этим свойством часто пользуются в целях защиты информации и функционирования систем.
Интерпретатор является окном. Не всякий входной язык в принципе может интерпретировать языки, предназначенные в основном для интерпретатора, обладают определенными синтаксическими ограничениями. Смысл этих ограничений сводится к тому, чтобы сохранить размер нормативного соответствия некоторому атомарному смысловому блоку. С этой точки зрения машинный код может рассматриваться как входная программа для процессора – интерпретатора.
Достоинство интерпретатора состоит в отсутствии прямой привязки к целевой архитектуре, поскольку сам интерпретатор может быть написан на языке высокого уровня и для обеспечения его работоспособности его достаточно откомпилировать на новых платформах без внесения изменений в его текст.
Недостаток интерпретатора – потеря эффективности, однако, ее можно существенно повысить функциональной организацией входного языка и входных программ.
У интерпретатора есть дополнительное достоинство, заключающееся в том, что не обязательно присутствие всего текста входной программы перед началом интерпретации.
Существует обширный класс программных систем, занимающих промежуточное положение между компиляторами и интерпретаторами. Их можно назвать многоэтапными трансляторами.
В системах, в которых интерпретируется язык с очень простыми по смыслу инструкциями, подобными машинным инструкциям, соединяются достоинства компиляции и интерпретации. С одной стороны промежуточный язык может быть независим от информационной платформы. С другой стороны простота инструкций и перенесение сложной интеллектуальной оптимизации до запуска программы (смысл компилятора) также повышает общую эффективность.
Дальнейшее наращивание этапов трансляции имеет смысл, если на входе используется визуальная форма представления алгоритма, тогда начальной стадией трансляции будет компиляция их в текстовое представление.
К перечисленным группам системных программ можно отнести эмуляторы одной цифровой архитектуры на другой.
Как правило, они требуются для упрощения отладки в процессе разработки ПО.