информационно-новостной портал
Главная / Статьи / Информатика / Программирование /

Компиляция функциональных программ (SECD-машина).

Чем больше возможностей включено в язык (базовых функций, управляющих конструкций, способов вычисления аргументов функции) мы будем включать в язык, тем более сложным будет интерпретатор и сложнее его переделка. Обычно программа на языке LISP или scheme преобразуется в программу на языке гораздо более низкого уровня, похожем на машинный язык, который может выполняться с гораздо большей скоростью.

  SECD-машина для интерпретации LISP-программа получила свое название по начальным буквам ее регистров. Каждый из регистров содержит указатель на S-выражение.

Регистр

Назначение

S

Stack

Стек для размещения промежуточных результатов во время вычисления выражения

E

Environment

Служит для хранения значений, связываемых с переменными во

время вычисления, соответствует

списку значений v в интерпретаторе

C

     Control list

Указатель на выполняемую команду программы

D

Dump

Стек для хранения других регистров при вызове новой функции

  Для ускорения доступа к значениям переменных вместо последовательного поиска в контексте используются индексные пары (j, j), где I- номер списка, j-номер элемента в списке.

  В функциональном языке программист не заботится о размещении новых объектов в памяти и удалении их после того, как объект перестанет быть необходимым. Поэтому очень важной является сборка мусора, которая запускается каждый раз при нехватке памяти для дальнейшей работы функциональной программы. Для SECD-машины сборка мусора состоит в том, что все ячейки памяти, к которым нет прямых или косвенных ссылок из регистров, переводятся в список свободных ячеек памяти.

Просмотров: 687 | Дата добавления: 08.02.2016