Контроллер опирается на именованные контракты операций вместо одного арифметического метода, а цикл управления на протокол регистрового банка.
Вопрос для размышления
Какие границы позволяют изменять конструкцию машины локально, не переписывая ее контроллер?
Отделение структуры контроллера от вызываемого им пакета операций
Запуск одного контроллера с евклидовым пакетом редукции и пакетом редукции через вычитание
Сравнение затрат процесса без изменения текста контроллера
Сокрытие хранилища регистров за сообщениями read и write
Сравнение одной границы абстракции на двух измеренных реализациях
Контроллер редукции знает только имена done?, next-a, next-b и answer. Евклидов пакет связывает эти имена с редукцией через остаток от деления, а пакет вычитания связывает их с редукцией через повторяющуюся разность. Обе машины используют одинаковую последовательность ассемблированных инструкций и возвращают один и тот же наибольший общий делитель, но число инструкций выявляет различия процессов.
Вторая программа предоставляет одному и тому же контроллеру счетчика два банка регистров. Один банк хранит изменяемые ассоциативные записи, а другой банк хранит значения в векторе за таблицей соответствия имен индексам. Контроллер отправляет только сообщения read и write. Одинаковые результаты наблюдений показывают, что конечный контракт клиента сохраняется при изменении способа хранения.
Программа с пакетами операций возвращает ((euclid complete 2 32) (subtraction complete 2 95) #t). Программа с банками регистров возвращает ((4 10) (4 10) #t).
На что обратить внимание в трассе
В первом запуске убедитесь, что обе машины выбирают одинаковые теги инструкций, тогда как поиск операций выбирает различные процедуры. Сравните четыре евклидовых цикла редукции с тринадцатью циклами вычитания. Во втором запуске проследите, как одна и та же последовательность вызовов read и write переходит в различные скрытые операции хранилища.
Попробуйте сами
Измените программу и сравните результат.
Добавьте пакет операций для бинарного алгоритма НОД или третье представление банка регистров. Сохраните текст контроллера без изменений и укажите, каким контрактам операций или хранилища должна удовлетворять новая замена.
Показать подсказку
Корректный пакет операций должен обеспечивать продвижение каждого незавершенного перехода к собственному предикату done?. Корректный банк должен сохранять наблюдения чтения после записи, используемые контроллером.