Cтраница 4
МФП является аббревиатурой термина машина функционального программирования. Абстрактная МФП-машина основана на использовании стеков и может рассматриваться как оптимизированный вариант SECD-машины. Исходная программа транслируется в FC-форму путем удаления сопоставления с образцом ( см. гл. [46]
К недостаткам Команд группы пересылок ВМ86 следует отнести отсутствие возможности загрузки непосредственных данных в стек. Необходимость такой загрузки возникает довольно часто при использовании стека для передачи параметров. [47]
В этом представлении проблема повисающих указателей преодолевается путем использования вспомогательного стека, называемого часто глобальным стеком, для размещения ячеек тех переменных, которые встречаются в структурированных термах входной программы. [48]
Он используется обычно как первый оператор в последовательности, организующей обращение к процедуре - в вызывающей последовательности. Его назначение - запомнить в стеке управляющую информацию, которая обеспечит правильное продолжение использования стека в программе, после того как к ней будет осуществлен возврат из процедур более глубокого уровня вложенности. [49]
Как было показано при исследовании алгоритмов обхода деревьев и графов, алгоритмы с использованием стека ( которые рекурсивны по своей природе) - не единственная возможность при необходимости управлять задачами с множеством вычислений. Эффективная технология разработки алгоритмов для решения многих задач заключается в использовании обобщенных реализаций с применением очередей, отличающихся от стеков, которые предоставляют свободу выбирать следующую задачу в соответствии с каким-либо более субъективным критерием, нежели простой выбор чего-либо последнего. [50]
Пример типовых приемов программирования для массивов, расположенных последовательно, можно найти в упр. В этих программах особый интерес представляют фундаментальные приемы эффективного просмотра строк и столбцов, а также использование последовательных стеков. [51]
Манипуляция стеком на PL / M производится таким же образом, что и на языке ассемблера. Действительно, поскольку операции PL / M CALL и RETURN транслируются в соответствующие команды языка ассемблера, использование стека в точности соответствует тому, как это описывается на языке ассемблера. [52]
Неприятность, связанная с описанной в предыдущем разделе реализацией, состоит в том, что новые примеры тел функций, генерируемые при применении функции, должны быть явным образом встроены в ПГ. При таком встраивании имеют место значительные накладные расходы, и его можно избежать в реализации, основанной на использовании стека. При этом адресация инструкций является относительной, начиная с адреса выполняемой в данный момент инструкции. [53]
Программа, которая может быть одновременно использована несколькими задачами. Это означает, что программа не может вносить изменений в себя, а все обращения к данным происходят с использованием стека или переменного указателя данных. [54]
Эта система является частично интерпретирующей в том смысле, что графы, представляющие выражения, отражают структуру исходного языка, однако сами представлены и интерпретированы с использованием обычных машинных команд. Как и в МОП-системе, конечным выходом являются команды VAX-ассемблера, который генерируется с помощью макрорасширения из целевого языка компилятора, включающим макросы, определяющие императивную машину, основанную на использовании стека. Однако коды, которые создают и преобразуют графы во время прогона программы, компилируются из выраж. Это происходит по той же самой причине, почему мы можем назвать МОП-реализацию из предыдущего раздела полностью компилированной; соответствующая ей абстрактная машина основана на стеке и, следовательно, близка по структуре к целевой машине. [55]
Описанная в предыдущем абзаце схема является концептуальной, охватывающей три метода обхода дерева, однако реализации, используемые на практике, несколько проще. Например, для выполнения прямого обхода не обязательно заталкивать узлы в стек ( мы посещаем корень каждого выталкиваемого дерева), поэтому можно воспользоваться простым стеком, состоящим только из одного типа элементов ( связей дерева), как это сделано в нерекурсивной реализации в программе 5.15. Системный стек, поддерживающий рекурсивную программу, содержит адреса возврата и значения аргументов, а не элементы или узлы, но фактическая последовательность выполнения вычислений ( посещения узлов) остается одинаковой для рекурсивного метода и метода с использованием стека. [56]
С этой целью при внутрисегментных вызовах в стеке запоминается содержимое IP, а при межсегментных вызовах - сначала содержимое IP, а затем CS. Напомним, что включение в стек каждого слова сопровождается уменьшением содержимого SP на два и что SP адресует последнюю заполненную 16-битовую ячейку стека. Использование стека для временного хранения адресов возврата позволяет легко реализовать правильный порядок возвратов из вложенных подпрограмм. [57]