Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[7]

NEGATE /

MOD /MOD

a a a a a a a

--> --> --> --> --> --> -->

a+b a*b Ia -a

целая часть остаток

остаток целая часть

В трех последних словах имеются в виду остаток и целая часть частного от деления а на Ь. Так, при делении 26 на 7 имеем:

26 7 26 7 26 7

/ -> 3 MOD --> 5 /MOD --> 5 3

Имеются специальные слова для действий с 1 и 2 (они выполняются немного быстрее) 1+... а--> ... а+1

Аналогично работают "I-11, "2+", "2-", "2*", "2/".

Следующие слова выполняют поразрядные логические операции над двоичным представлением чисел; в этих операциях числа трактуются как наборы из шестнадцати битов.

AND...ab-->...a AND b( И )

OR...ab-->...a OR b( ИЛИ )

NOT...а-->...NOT а( НЕ )

X0R...ab-->...a XOR b(ИСКЛЮЧАЮЩЕЕ ИЛИ )

4.6Ввод и вывод

4.7Хранение чисел в памяти

4.8Операторы сравнения и ветвления

4.9Организация циклов

4.10Символьные строки

4.11Определение новых слов

Одно из главных достоинств языка Форт заключается в его расширяемости, то есть программист может расширять базовый набор слов форт-системы, определяя новые слова через уже определенные.

Слова, которые указывают форт-системе, что пользователь заводит новое слово, называются ОПРЕДЕЛЯЮЩИМИ словами. Наиболее употребительное определяющее слово это ":" (двоеточие). Формально соответствующее определение (или описание) выглядит следующим образом:

: имя тело ;

•"имя" как раз и есть новое придуманное слово,

•"тело" представляет собой перечень через пробелы уже имеющихся в форт-системе слов; совокупность их функций образует те действия, которые будут выполнены при исполнении данного слова,

версия 26 октября 2005 г.ФОРТ


• наличие слова ";" (точка с запятой) обязательно, оно завершает определение.

Например, текст : S2 DUP * SWAP DUP * + ;

определяет слово "S2", вычисляющее сумму квадратов двух чисел из стека

S2... a b --> ...a*a+b*b

Если в теле определения встретятся слова, которых нет в словаре, система напечатает ошибочное слово со знаком -?. При этом вся наработанная информация о новом слове исчезает.

При разработке новых слов нужно внимательно следить за изменениями стека. Рекомендуется писать комментарии. Комментарий начинается словом "(" (открывающая скобка), и система пропускает следующий за ним текст до первого символа ")" (закрывающая скобка).

Скомпилированные слова сразу же могут использоваться и в вычислениях и в определении других слов. Например, сумму четырех квадратов можно определить так:

: S4(abed--> a*a+b*b+c*c+d*d )

S2 -ROTS2 + ;

Можно отменить уже определенное слово ("забыть"его), но при этом забываются также и все слова, определенные позже него. Для этого используется слово "FORGET". Например, действие

FORGET S2

"забудет" S2 и все определенные позже слова.

Прежде, чем заводить новое слово, стоит убедиться, что его еще нет в словаре. Одному и тому же слову можно дать несколько определений с разным смыслом, но выполняться будет только последнее введенное. Однако прежнее определение не уничтожается. Если теперь выполнить слово "FORGET"c этим словом, то снова будет действовать прежнее определение. При отладке больших программ полезно иногда применять слово "FORGET", чтобы избежать переполнения словаря.

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

При завершении сеанса работы с форт-системой, что обычно задается словом "BYE", из словаря исчезают все новые слова, определенные в этом сеансе. Способ сохранения наработанной версии форт-системы зависит от конкретной реализации.

Приведем еще пару примеров. Слово "8M0D"эквивалентно тексту "8 MOD", но использует логические операции. Слово "LAST1" выделяет в двоичном разложении числа младшую единицу.

: 8M0D 7 AND ;

: LAST1 DUP DUP 1- XOR AND ;

ФОРТверсия 26 октября 2005 г.


5 Принципы работы форт-системы

4.12Хранение программ и данных

4.13Методика программирования на Форте

Язык Форт по своей идеологии очень минималистичен, так как изначально был разработан для программирования систем с очень ограниченными ресурсами - сейчас такие системы можно встретить исключительно в виде блоков управления различным оборудованием. Даже компьютеры внутри мобильников во многие разы больше по доступным ресурсам (скорости, разрядности процессора, объемам памяти, возможностям вывода графики и размерам носителей данных).

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

Если вы хотите иметь язык, выполняющий серьезный контроль вашего кода, Форт для вас не подходит.

С другой стороны у Форта есть одна особенность, которой многие языки не обладают, и которая является ключевой - на Форте вы не столько программируете, сколько расширяете язык через уже существующие в нем слова, определяя диалект под вашу задачу. Подробнее см [orange, thinking]. Из-за этой особенности Форт нельзя называть языком низкого уровня - хотя его ядро и низкоуровневое17, но его расширение приводит к созданию диалектов сверх-высокого уровня.

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

5 Принципы работы форт-системы

5.1Создание слов-определителей

5.2Память Форта, словари и контекстные словари 5.2.1 Кодофайл

Кодофайлом будем называть участок памяти, в котором располагаются набор слов Форт-системы и новые скомпилированные слова, написанные пользователем. Здесь же размещаются константы и переменные. Память занимается в направлении возрастания адресов, при этом свободная память находится в конце словаря. Иногда два соседних байта называют ячейкой. Тогда адресом ячейки считается адрес младшего байта (то есть байта с меньшим адресом). Мы будем называть ВЕРШИНОЙ СЛОВАРЯ первый свободный байт памяти. От программиста требуется особая осторожность при работе с памятью: изменения, записанные в ячейку с ошибочным адресом, могут нарушить функционирование Форт-системы так, что потребуется ее перезагрузка!

Вот некоторые стандартные слова для работы с кодофайлом:

HERE...--> ... addr

17но при этом все равно платформенно-независимое

18признак правильно написанной форт-программы

версия 26 октября 2005 г.ФОРТ



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15]