Язык Форт и его реализации



         

Стек возвратови реализация структур управления - часть 7


D+ ( R,I-A2+1,F:ПРИЗНАК ЗАВЕРШЕНИЯ) IF ( ЗАКОНЧИТЬ) DROP R> R> 2DROP 2+ ( ОБОЙТИ АДРЕС ) ELSE ( ПРОДОЛЖИТЬ) R@ + >R ( НОВОЕ ЗНАЧЕНИЕ СЧЕТЧИКА) @ ( АДРЕС НАЧАЛА ТЕЛА ЦИКЛА) THEN >R ;

Определение (+LOOP) выглядит аналогично.

Во всех приведенных примерах доступ к адресу возврата в шитом коде осуществляется через стек возвратов из данного определения. Этот адрес модифицируется словами 2+ или @, тем самым обеспечивая обход скомпилированной ссылки или переход по ее значению. Слова I и LEAVE, которые используются внутри тела цикла для получения текущего значения счетчика и немедленного выхода из цикла, можно задать так:

: I ( ---> A ) R> R@ SWAP >R ; : LEAVE ( ---> ) R> DROP R> DROP R> DROP ;

Для повышения быстродействия практические реализации языка Форт обычно определяют все эти слова, как и BRANCH, в виде подпрограмм нижнего уровня в машинном коде. В этом случае, например, слово I полностью эквивалентно слову R@.

Описанная реализация циклов со счетчиком через использование стека возвратов накладывает ограничения при программировании. Неосмотрительное включение слов >R, R>, R@ и EXIT в тело цикла со счетчиком может привести к непредсказуемому результату.

Вместе с тем отстутствие какого-либо контроля является еще одной характерной чертой языка Форт. Благодаря этому программист может реализовать любые конструкции (включая и средства контроля).




Содержание  Назад  Вперед