В Help написано как убрать заглавные буквы
Особенности SPF
Краткое вступление для тех, кто уже знаком с какой-либо Форт-системой и стандартом ANS'94.
Последнее обновление: $Date: 2008/11/14 20:13:12 $
[Русский] [Английский]
Содержание
Установил SPF4. И где здесь что-куда?
Как запускать и подключать файлы?
REQUIRE
Пути поиска файлов для INCLUDED
Модули
Регистро-зависимость
Ввод чисел
Вещественные числа (числа с плавающей точкой)
Структуры
Где FORGET?
Где NOT?
Где DEFER?
Как одним словом очистить стек?
Комментарии
Строки
Многозадачность
Словари
Локальные и временные переменные
Генерация исполняемых модулей (exe-файлов)
Подключение dll-библиотек
Средства отладки
Оптимизатор
Поддержка ANS
Callback'и
Слово NOTFOUND
Scattered colons
Область видимости
Обработка исключений
Установил SPF4. И где здесь что-куда?
Первое и самое важное - расположение ваших рабочих файлов. В дистрибутиве SPF есть каталог DEVEL, предназначенный для разработчиков (в том числе и вас). Создайте в ней ваш подкаталог, например, ~vasya. И теперь вы можете подключать ваши файлы написав сокращённый путь в виде ~vasya/prog/myprog.f. Это упрощает взаимный доступ к библиотекам и программам. Общепринято библиотеки класть в подкаталог lib, а примеры программ в prog.
В каталоге DEVEL собраны наработки других SP-Forth'еров, с кратким (очень кратким) их обзором вы можете ознакомиться в SPF_DEVEL, либо пройтись по файлам самому.
В каталоге samples/win/spfwc вы найдёте GUI фронтенд для SPF. Просто запустите compile.bat и скопируйте полученный бинарный файл spf4wc.exe в корневой каталог установки (рядом с spf4.exe).
Как запускать и подключать файлы?
В командной строке скормить файл SPF'у можно просто указав путь к нему в параметрах запуска,
spf.exe ~vasya/prog/myprog.f
Заметьте, что путь для включения могут быть как абсолютным, так и относительно каталога devel.
В консоли SPF (в режиме интерпретации) достаточно набрать имя файла:
~vasya/prog/myprog.f
В целях совместимости лучше подключать явно:
S" ~vasya/prog/myprog.f" INCLUDED
Но правильнее всего использовать REQUIRE.
REQUIRE
В SPF есть нестандартное слово REQUIRE ("word" "file" -- ), где word - некоторое слово определённое в библиотеке file. Если слово word присутствует в контекстном словаре, REQUIRE считает, что библиотека уже была подключена и не загружает её. Так избегается двойная загрузка библиотек. Если же найти word не удаётся - библиотека подключается обычным образом (через INCLUDED). Например:
REQUIRE CreateSocket ~ac/lib/win/winsock/sockets.f
REQUIRE ForEach-Word ~pinka/lib/words.f
REQUIRE ENUM ~nn/lib/enum.f
NB: В качестве word выбирайте всегда наиболее уникальное слово из подключаемой библиотеки.
Пути поиска файлов для INCLUDED
S" file.f" INCLUDED будет искать в перечисленных ниже местах в именно таком порядке
короткое имя файла file.f (т.е. в текущем каталоге)
PATH_TO_SPF.EXE/devel/file.f (т.о. удобно использовать чужие наработки),
PATH_TO_SPF.EXE/file.f (так подключаются стандартные либы и другие файлы из поставки SPF).
Если требуется указать больше путей поиска (например использовать форт код разделяемый между системами, или неважно - любой код вне дерева каталогов SPF который не может быть адресован относительно текущего файла), то можно либо переопределить FIND-FULLNAME (который VECT) либо использовать внешнюю либу - ~ygrek/spf/included.f.
TODO: Вынести отдельно
Тогда потребуется только прописать в spf4.ini
~ygrek/spf/included.f
with: my_path\
S" my path with spaces/" with
и все файлы будут искаться в my_path в дополнение к описанному выше алгоритму (my_path может быть как абсолютным так и относительно spf.exe).
Модули
В SPF есть модули, которые позволяют скрывать некоторые внутренние слова библиотек выводя наружу только слова для взаимодействия.
MODULE: vasya-lib
\ внутренние слова
EXPORT
\ слова взаимодействия, видные снаружи, компилируются во внешний словарь.
DEFINITIONS
\ опять внутренние слова
EXPORT
\ ну вы поняли
;MODULE
Код MODULE: vasya-lib можно писать много раз - последующие вызовы будут докомпилировать слова в тот же модуль. На самом деле слово определённое через MODULE: это обычный словарь.
Регистро-зависимость
SPF регистрозависим, то есть для него слова CHAR , Char и char - три разных слова. Сделать SPF независимым от регистра слова можно подключив файл lib/ext/caseins.f. По умолчанию, регистро-независимость включается сразу после подключения lib/ext/caseins.f.
Чтобы регистро-независимость временно выключать/включать, используйте переменную CASE-INS:
REQUIRE CASE-INS lib/ext/caseins.f
2 dup * .
CASE-INS OFF \ вернуть обратно режим зависимости от регистра
2 DUP * .
CASE-INS ON \ включить регистро-независимость
2 dup * .