Язык программирования Форт


Глава 14. Память Форта. Словари и контекстные словари - часть 7


отобразит на экране 3 6 99 в то время как SP@ @ . SP@ 2+ @ . SP@ 4 + @ . выдаст на экран 99 6 3

С помощью этих слов можно описать другие полезные слова. Например: : DEPTH ( nl п2, - nl n2..,nn) SP@ SO @ SWAP - 2 / ;

Мы попросим вас описать некоторые другие слова в качестве упражнений. Как вы знаете, с целью экономии времени Форт не контролирует переполнение стека, так что только внимательное программирование предотвращает разрушение словаря ниже стека. Извлечение кодов из пустого стека намного более вероятно, так как довольно легко напечатать лишнюю точку с клавиатуры или неправильно оценить число аргументов, необходимых слову Форта. В такой ситуации указатель стека имеет значение больше, чем нижний адрес стека, т.е. если SP@ выдает число большее, чем SO @. Фактически все варианты Форта проверяют, не случилось ли такое событие при переходе к пультовому режиму и при многих операциях вывода. Обычно, если зарегистрировано извлечение кода из пустого стека, выдается сообщение об ошибке, а указатель стека устанавливается в начальное положение. Но возможно и разрушение системы без сообщения об ошибке. Например, если стек пуст, следующая программа сделает это: : BOMBIT 500 0 DO DROP LOOP ;

Слово BOMBIT почти наверняка разрушит Форт, и потребуется перегрузка ЭВМ. Форт возлагает больше ответственности за ошибки на программиста. Это одна из причин, почему Форт обладает высоким быстродействием. Потребовалось бы очень много времени, чтобы контролировать переполнение стека каждый раз, когда изменяется его указатель. Хотя в MMSFORTH входной текстовый буфер размещен за блочным буфером в области младших адресов, в некоторых вариантах Форта он помещен выше стека параметров. Во всяком случае, стек возвратов, который обсуждается в гл.8, обычно находится сразу за входным буфером или стеком параметров. Вы видели, что >R, R> и R@ позволяют использовать стек возвратов для запоминания значений из стека параметров и что стек возвратов используется для запоминания индексов цикла, но это не его главная функция.


Начало  Назад  Вперед



Книжный магазин