Generated from docs/help/SPForth.fhlp on Mon, 04 Sep 2006 20:34:42 GMT+3
( Справка по особенностям SP-FORTH от стандарта ) ( А также русские эквиваленты стандартных слов )
FORTH - Язык среднего уровня и интерактивная среда разработки. Нашел широкое применение в науке, робототехнике, управлении оборудованием, обработке образов и искусственном интеллекте. Позволяет создавать очень компактные и быстрые программы. Попробуйте набрать HELP HELP а также TOPIC и HELP TOPIC
{{ ( "name" -- ) Взять из входного потока и выполнить "name". Если это VOCABULARY сделать содержащийся в нем wordlist первым в порядке поиска. Если это слово, возвращающее wordlist на стеке данных, сделать данный wordlist первым в порядке поиска. file: compiler\spf_modules.f forth: спф 4.0 и выше IMMEDIATE слово.
}} ( -- )
: }} PREVIOUS ; IMMEDIATE

HELP ( "name" -- ) Подключает файл help.fhlp, ищется и печатается справочная документация к слову "name". ( -- ) Общие сведения о форте. Поиск происходит по умолчанию в файлах docs\help\ANSFth94.fhlp docs\help\SPForth.fhlp Если ничего не найдено, слово преобразуется в верхний регистр и ищется снова. Так что можно писать help help. Но, скорость поиска при это замедляется в 2 раза! Поэтому целесообразно писать слово так, как оно выглядит. Синтаксис help help для ленивых людей с мощными компьютерами (it's me :) Вы можете создавать и подключать справку к своим собственным библиотекам. file: lib\ext\help.f forth: спф 4.0 и выше
EXTRA-MEM ( -- addr ) VARIABLE переменная, изначально содержит 16384. При создании хипа функцией CREATE-HEAP общий размер хипа равен: USER-OFFS + EXTRA-MEM + 4 Возможно перед сохранением записать в EXTRA-MEM 0. Эта переменная нужна как буфер для USER переменных, которые возможно будут работать на этапе подключения форт текста. file: win\spf_win_memory.f forth: спф 4.0 и выше
USER ( "name" -- ) Создает переменную аналогично VARIABLE, но эта переменная создается динамически при запуске форт системы и инициализируется нулем. Сделано для поддержки многопоточности ядром. У кажого потока свои копии USER переменных. В сп-форте для каждого потока создается _отдельный_ хип (и именно из него выделяется блок для USER vars). И ALLOCATE выделяет память из локального хипа потока. Соответственно автоматически освобождается при завершении потока (если этот поток завершается сам, а не убивается другим потоком по STOP). file: compiler\spf_defwords.f forth: спф 3.75 и выше
USER-OFFS ( -- addr ) VARIABLE переменная, содержит текущее смещение в области данных потока, где создаются USER переменные. file: win\spf_win_memory.f forth: спф 3.75 и выше
IF IF...ELSE...THEN Условие IF...ELSE...THEN. ( flag --> ) Параметры flag если flag <> 0 , то выполнить все слова, которые нахдятся в промежетке IF ...THEN, кроме слов в промежутке ELSE ...THEN (если слово ELSE вообще используется в условии). если flag = 0, то пропустить все слова в диапозоне IF...THEN и выполнить первое слово после слова THEN, если внутри ветви находится слово ELSE (IF...ELSE...THEN), то выполнить все слова в промежутке ELSE...THEN. Заметки IF...ELSE...THEN Рассмотрим пример слова /, которое берёт со стека два числа и делит первое на второе и выводит на экран результат деления, но если делитель =0 (что соответственно противоречит законам математики), то слово выводит на экран сообщение "Ошибка деления..." и выводит на экран результат деления = 0.
: / ( x1 x2 --> ) DUP \ дублирую делитель ( x1 x2 x2 ) 0= \ сравниваю его с 0 ( x1 x2 flag ) IF \ если делитель = 0 2DROP \ , то удаляю со стека 2 числа 0 \ осталяю на вершине стека 0 ." Ошибка деления..." \ вывожу сообщение об ошибке \ пропускаю слова в промежутке ELSE ... THEN и перехожу к слову . ELSE \ иначе, если делитель не равен 0 / \ , то выполняю деление и на стеке остаётся результат деления THEN ." результат=" . \ вывожу сообщение "результат=" и частное от деления ;
Условие может содержать альтернативную ветвь ELSE, но можно пользоваться и без неё, если нужно обработать только одно условие. Например:
: ЖАРКО? ( t --> ) \ слово выводит предупреждение на консоль если температура t превысит 80 С. 80 > ( flag ) IF \ если температура превышает 80 C ." ОПАСНО ! Уменьшите нагрев!" \ вывести предупреждение на экран THEN ;
Имеется возможность помещать оператор IF...THEN (или IF ... ELSE ... THEN) внутрь другого оператора IF...THEN. Фактически можно использовать неограниченную вложенность условий друг в друга. Все условия являются совокупностью вложенных IF...THEN. Они вложены друг в друга, как матрёшки. Три слова IF соответстуют трём словам THEN.
IF----------------| IF---------| | IF--| | | THEN THEN THEN
ПОМНИТЕ ! Что каждому слову IF должно соответствовать своё THEN, причём в пределах одного и того же определения. Например:
IF ... IF ... IF ... THEN THEN THEN
Основненое применение условий - проверка значений, которые оставляют операции сравнения =, <>, <, >, 0= и т.д.
+LOOP ?DO DO LOOP (+LOOP) (?DO) (DO) (LOOP) UNLOOP Цикл со счетчиком вида
ВерхняяГраница НачальноеЗначение DO ... LOOP
реализуется с помощью кода вида
(DO) [ссылка_на_Адрес2] .... (LOOP) ^ ^ | | Адрес1 Адрес2
использует стек возвратов для хранения вспомогательной информации. На стеке возвратов (специфично для спф систем) -
Адрес1 ВерхняяГраница+0x80000000 НачальноеЗначение-(ВерхняяГраница+0x80000000) (--вершина стека--)

," unstandard ," "запятая-кавычка" Compat ( "ccc<">" -- ) Выбрать из входного потока строку, ограниченную кавычкой, и уложить ее в шитый код в формате строки со счетчиком. Выравнять указатель словаря на границу токена функции (требования те же, что и для ячейки).
OK Печатает "подсказку": текст "ok" и верхние элементы стека. Вызывается интерпретатором при интерпретации текста с консоли. Векторное слово, по умолчанию вызывается OK1.
?BRANCH unstandard ?BRANCH "вопрос-бранч" Compat ( true -- ) ( I: ip[codeAddr] -- ip+ ) ( false -- ) ( I: ip[codeAddr] -- codeAddr ) Код: ?BRANCH [ссылкаНаКод] Если на стеке ненулевое значение, ссылка, находящаеся за словом ?BRANCH, пропускается. Если на стеке нулевое значение, выполняется переход. Используется для реализации операторов IF и WHILE
SEE ( "name" -- ) Вывести машинный код слова name file: lib\ext\disasm.f forth: spf3.16 и выше
MODULE: ( "name" -- ) start a forth module Если такой модуль уже существует, продолжить компиляцию в него. Если нет, создать. Установить первый wordlist поиска wordlist модуля. А также установить CURRENT. В настоящее время частным случаем модуля является VOCABULARY. See also: EXPORT ;MODULE DEFINITIONS file: compiler\spf_modules.f forth: спф 4.0 и выше
EXPORT ( wid -- wid ) Начать компиляцию во внешний словарь по отношению к данному модулю. Обязательно использовать только в пределах модуля. file: compiler\spf_modules.f forth: спф 4.0 и выше See also: MODULE: ;MODULE
;MODULE ( wid -- ) Закончить определение модуля, снять верхний wordlist поиска, установить CURRENT в wid (это CURRENT перед компиляцией модуля)
MODULE: EXPORT ;MODULE пример использования:
MODULE: xxx ... ;MODULE
======= или
MODULE: xxx ... EXPORT ... \ Эти слова будут компилироваться во внешний по \ отношению к данному модулю ;MODULE
====== или
VOCABULARY xxx \ так можно, потому что VOCABULARY это частный (!) \ случай модуля : test xxx PROCESS-IN-XXX ; MODULE: xxx \ здесь в уже созданный ххх будет компилить... ... ;MODULE
====== или
MODULE: xxx ... EXPORT ... DEFINITIONS ... EXPORT ... DEFINITIONS ... ;MODULE

~ruvim Ruvim Pinka ruvim@forth.org.ru
~boa Bordachev Andrej glareboa@mail.ru
~day Dmitry Yakimov ftech@tula.net
~micro Dmitry Zyryanov micro@forth.org.ru
~1001 Konstantin Tarasov const@penza.com.ru
~ac Andrey Cherezov andrey@cherezov.koenig.su
~nemnick Nicholas Nemtsev nn@vdk.psc.ru
~mak Michael Maximov mak@mail.rtc.neva.ru
~yz Yuriy Zhilovets yz@nightmail.ru
~mlg Michael Gassanenko mlg@forth.org
~oleg_sh Oleg Shalyopa
~trasher Dmitry Bobrik
AT-THREAD-STARTING AT-PROCESS-STARTING AT-THREAD-FINISHING AT-PROCESS-FINISHING Слова, созданные по технологии Scattered Colon Definition by ~mlg Использование: Например - необходимо чтобы каждый раз при запуске форт системы печаталась цифра 2:
..: AT-PROCESS-STARTING 2 . ;..
если еще раз:
..: AT-PROCESS-STARTING 2 . ;..
то будет печататься уже две двойки. ..: и ;.. - специальные слова форт системы.
spf4.ini Файл, который подключается при запуске форт системы словом SPF-INI. Подключается простым INCLUDE-PROBE
STARTLOG Начать лог ввода/вывода. Если лог уже открыт, очистить и начать заново Создаёт файл spf.log и записывает его хэндл в H-STDLOG.
ENDLOG Закончить запись в лог-файл.
TO-LOG ( a u -- ) Записать строку в лог-файл. Вызывается в дефолтных векторах для TYPE и ACCEPT
.TO-LOG ( n -- ) Записать число в лог-файл.
H-STDLOG Хэндл лог-файла.
spf.log Лог файл форт системы. See also: STARTLOG ENDLOG TO-LOG H-STDLOG
\EOF ( -- ) Прекращает трансляцию текущего файла. Аналог SOURCE-ID FILE-SIZE THROW SOURCE-ID REPOSITION-FILE ... только более короткий. file: compiler\spf_translate.f forth: spf 4.0 и выше
TIMER@ ( -- tlo thi ) Возвращает значение таймера процессора (команда RTDSC) (только для процессоров Intel Pentium совместимых). Число тактов процессора за прошедшее время. Возвращаемое значение зависит от частоты процессора. file: spf_forthproc.f forth: spf 4.0 и выше
NOTFOUND ( addr u -- i*x ) Если INTERPRET не находит слово в контексте поиска, оно ищет NOTFOUND в текущем контексте поиска и вызывает NOTFOUND с этим словом как параметром. Может быть определено как:
: NOTFOUND ?SLITERAL ;
Но также еще поддерживается синтаксис: <vocabulary>::<word> Слово NOTFOUND может делать с литералом что угодно (вместо SLITERAL?) Например:
5 5 + . 10 Ok : NOTFOUND ." =" TYPE ." = " ; Ok 5 5 =5= =5= Ok
See also: :: file: compiler\spf_translate.f forth: spf 4.0 и выше
:: Синтаксис доступа к словам в словарях. <vocabulary>::<word> Или <vocabulary1>::<vocabulary1>::<vocabulary1>::<word> Поддерживаются как режим компиляции, так и интерпретации. Причем все слова кроме последнего после :: исполняются (!) вне зависимости от состояния STATE. Перед <word> может быть пробел, например: <vocabulary>:: <word> Это для ситуаций типа:
: DO-SMTH:: PROCESS-SMTH S" Voc1::" EVALUATE-WITH ; DO-SMTH:: SOME-WORD
file: compiler\spf_translate.f forth: spf 4.0 и выше See also: EVALUATE-WITH
EVALUATE-WITH ( i*x c-addr u xt -- j*x ) Считая c-addr u входным потоком, вычислить её интерпретатором xt. Например:
: SVARIABLE ( addr u ) ['] VARIABLE EVALUATE-WITH ;
See also: EVAL-WORD EVALUATE file: compiler\spf_translate.f forth: spf 4.0 и выше
EVAL-WORD ( c-addr u -- ) Интерпретировать ( транслировать) слово с именем c-addr u See also: EVALUATE-WITH EVALUATE file: compiler\spf_translate.f forth: spf 4.0 и выше
TERMINATE ( -- ) Уничтожить текущий поток и его хип. file: win\spf_win_mtask.f forth: spf 4.0 и выше
TOPIC ( -- ) Отображение содержания справки ( "name" -- ) Отображения содержимого "name" пункта содержания (это может быть список слов на данную тему например).
FILE-EXIST ( a u -- flag ) Истина если файл с указанным именем существует. file: win\spf_win_io.f
FIND-FULLNAME ( a u -- a1 u1 ) Найти файл и вернуть его полный путь. По умолчанию файл ищется в текущем каталоге, потом в devel, потом в каталоге с исполняемым файлом spf. Если указанный файл не найден - выбрасывается исключение. Это слово - вектор. file:compiler\spf_win_translate.f