Ббк 32. 973-018 г рецензент канд физ мат наук, Ф. А. Мурзин
Download 278.16 Kb.
|
FIT-Gor-PP3
4.1. Особенности представления программ на C
Самый популярный язык программирования C содержит низкоуровневое подмножество, что провоцирует рассматривать его как ЯНУ. Но приспособленность C к представлению обработки иерархии структур данных с помощью программируемых функций дает основания относить его к ЯВУ. Язык C предполагает, что программа собирается из набора файлов, содержащих фрагменты программы и библиотеки функций, подготовленные, возможно, независимо. При этом компилируемая программа представляет собой одноуровневую конструкцию из равноправных определений структур данных и функций. Это означает, что любая функция имеет доступ к любому элементу любой структуры данных и может изменять его значение. Учитывая, что результат программы формируется как последовательность шагов изменения данных, размещѐнных по конкретным адресам, программист вынужден детально и тщательно изучать все тонкости побочных эффектов как своего, так и смежных фрагментов программы. Это оказалось серьѐзным препятствием к повышению производительности труда. –При конструировании кода программы C-компилятор распределяет память для глобальных и локальных данных в статической памяти или в стеке, соответственно. Встраиваются вызовы библиотечных функций создания-удаления для динамических структур данных и обмена данными, включая ввод-вывод. Данные бывают константами или переменными, идентифицируемыми с помощью идентификаторов. Типы данных разделены на основные и производные, созданные с помощью специальных операций, включая создание неоднородных структур данных. Над типами данных определѐн конкретный набор операций, с помощью которых строятся вычислимые выражения, и схем операторов управления и описания, используемых при конструировании функций. Многократно используемые функции объединяются в специализированные библиотеки, часть которых включена в системы программирования на языке C. Компилятору для эффективности кодирования нужна информация о типах данных переменных и результатов функций, но допустимо умолчание в случае типа int. Возможна спецификация вида используемой памяти, но она носит рекомендательный характер – компилятор учитывает еѐ в меру возможности. Определения функций обладают некоторой свободой в конкретизации списка параметров на уровне вызова функции, что позволяет программировать функции произвольного числа параметров. Реализация арифметических операций обладает вариантами, зависящими от основного типа обрабатываемых скаляров в соответствии с разнообразием аппаратной поддержке этих операций. Абстрактная машина (АМ) языка C может рассматриваться как развитие и обобщение АМ для ассемблера, обеспечивающее возможность использовать более сложные структуры данных в качестве регистров. Определение мало отличается от АМ подмножества языка Pascal (см. Лекция 2): s e c m → s‟ e‟ c‟ m‟ Сумматор расширяется до стека промежуточных значений, и появляется дополнительный регистр «Локалы» для локализации хранимых объектов: <Стек_ значений, Локалы, Текущая_Команда, Память > Регистр «Локалы» может быть устроен подобно регистру «E» из SECD- машины Лендина, только хранит он не любые значения, а скаляры или ссылки на значения в «Памяти». Начальное состояние памяти – вектор глобальных переменных, адресуемых подпрограмм и меток. «Локалы» и «Память» образуют контекст исполнения программы. АМ различает следующие категории команд: засылка значений из памяти в стек; вычисления над безымянными операндами в стеке при обработке выражений; пересылка значений из стека непосредственно в память или в регистр Локалы; организация переходов по метке в программе; организация ветвлений и циклов; организация вызовов функций с сохранением/восстановлением локального контекста.
Download 278.16 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling