Возможности Форта.

 
+
-
edit
 

Balancer

администратор
★★★★★
Некоторые характерные фичи, часто отсутствующие в других языках программирования буду освещать тут :)

Вот, например, механизм использования проверки доступа.

Пишем
code text
  1. ...
  2. "ride" check-access
  3. ...

и, если доступ недостаточен, то слово check-access у нас вызывает выход из текущего слова. В классических языках пришлось бы писать что-то навроде:
code text
  1. if(check_access("ride")) return;

вроде бы не сильно длинее, но, во-первых, намного больше нажимать кнопок, больше мусора на экране и... это лишь простейший пример :D В жизни бывает сложнее.

Как это работает?

Когда из одного слова вызывается другое, текущее состояние выполнения запоминается в стеке возвратов. Со стеком возвратов у нас есть безовый набор операций. В том числе и слово, сбрасывающее число со стека возвратов. RDROP.

Как у нас написано слово check-access:
code forth
  1. : check-access  ( "access-name" -- )
  2.     access? not if
  3.         "You have not access level" .
  4.         rdrop
  5.     then
  6. ;


Т.е. мы вызываем слово "access?" (передавая ему переданный нам параметр - имя доступа), проверяем его возврат, истина, если доступ есть, ложь, если нет. Если доступа нет, то выдаём сообщение, делаем rdrop (т.е. сбрасываем адрес возврата вызвавшего слова) и по завершении работы нашего слова выходим не в слово, которое вызывало наше, а в то, что вызвало вызывавшее :)

В первую очередь такие вещи удобны именно для разных проверок :)

Стоит правда помнить о состоянии стека. Т.к. при таком выходе на нём может оставаться мусор. В данном случае это не существенно, так как слова с проверкой доступа - это обычно админ-команды, а стек у них "одноразовый" :)
 
+
-
edit
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru