SP-Forth

SP-Forth
Тип Форт-система
Разработчики Андрей Черезов и другие участники RU-Fig
Написана на Forth
Операционные системы Windows, Linux
Первый выпуск 1992
Последняя версия 4.20 (21 января 2009)
Лицензия GPL
Сайт spf.sourceforge.net

SP-FORTH — реализация языка Forth, начатая калининградским программистом Андреем Черезовым в 1992 году[1]. В настоящее время проект развивается силами ряда участников русской Forth Interest Group (RU-FIG)[2]. В основном реализует стандарт ANSI 94, хотя имеет ряд отличий и расширений[3]. Изначально работал под управлением операционной системы MS DOS, начиная с 3-й версии — Windows, в настоящее время имеется также Linux-версия.

Библиотеки расширений

[править | править код]
  • Форт-ассемблер
  • поддержка многопоточности
  • поддержка межпоточного и межпрограммного взаимодействия (мутексы, семафоры, каналы и т.д.)
  • поддержка многозадачности и работы в качестве CGI-приложения
  • полная поддержка сокетов - инкапсуляция функций сокетов в более удобные для использования в Форте
  • готовые библиотеки для создания интернет-серверов и клиентов
  • поддержка функций построения пользовательского интерфейса - окон, диалогов, иконок, кнопок, тулбаров, ListView, TreeView и т.д.
  • поддержка графических функций
  • генерация Exe-файлов
  • доступ к базам данных через ODBC
  • программирование сервисов Windows NT
  • поддержка Crypt API
  • реализация ООП-расширений Форта
  • поддержка DCOM/COM/ActiveX/OLE
  • готовые примеры использования всех библиотек.

Использование

[править | править код]

Имеет определённую известность благодаря написанному на его базе Андреем Черезовым коммерческому пакету EServ[4]. Другой популярный прикладной пакет, написанный на SP-Forth — это утилита для автоматизации Windows nnCron.

В качестве примера использования в традиционной для Форта области управления аппаратурой можно назвать систему регистрации изображений, созданную в Алтайском Государственном университете А. В. Калачевым[5].

Проект URL Описание
eserv.ru HTTP/FTP/SMTP/POP3/IMAP сервер и прокси для Win32
(множество проектов)
delosoft.com форт-системы для pocket PC
nncron.ru unix-подобный cron планировщик для Windows со скриптами
forth-script.sf.net SP-Forth как CGI
acweb.sf.net HTTP-сервер для Win32
acfreeproxy.sf.net http proxy-сервер
acftp.sf.net ftp-сервер

v1.0

Безуспешные поиски хорошей Форт-системы для IBM PC привели к написанию своего транслятора Форта. Он появился на свет летом 1992 года и v1.0 стала основой всех последующих версий: базовые словари v1.01-1.5 были переработками и усовершенствованиями исходного текста v1.0.

v1.5

С версии 1.5 начались существенные изменения в SP-Forth. За полгода работы с первыми версиями SP-Forth выявлены все "узкие места" этих реализаций, учтены пожелания пользователей, добавлены расширения. Написана зимой 1993.

v2.0 Beta

Ноябрь 1993

  • серия экспериментов со всеми существующими разновидностями шитого кода привела от прямого шитого кода через косвенный к подпрограммному: SP-Forth 2.0 генерирует на этот раз "настоящий машинный код".
  • SP-Forth "извлечен" из сегмента 64К: v2.0 работает в адресном пространстве 256К и больше.
  • код отделен от данных: маш.код, находящийся в сегменте CS, не модифицируется в период исполнения (может изменяться в процессе компиляции) и может работать в ПЗУ (по многочисленным просьбам разработчиков контроллеров). Вся модифицируемая часть ядра, переменные и т.п., помещена в сегменте DS.
  • информация для компилятора (словарные структуры) отделена от кода и данных и помешена в отдельный сегмент ES. В готовой программе он может отсутствовать (и по умолчанию отсутствует).
  • стек вынесен за пределы сегмента данных (хотя при желании его можно вернуть туда).
  • теперь SP-Forth генерирует EXE-файлы вместо COM. Минимальный размер работающего EXE-файла в этой версии - 64 байта.

v2.5

Май 1994

  • ядро соответствует ANS-стандарту 1994 года;
  • из ядра исключены многие устаревшие и нестандартные слова;
  • семантика некоторых слов изменилась в соответствии со стандартом;
  • несколько повышена общая производительность;
  • стандартные множества слов CORE, EXCEPTION, SEARCH, FILE, MEMORY реализованы в ядре; стандартные расширения CORE-EXT, DOUBLE, FACILITY, TOOLS, STRING представлены в виде библиотек (исходники) и частично присутствуют в ядре.

v2.5.13

Последний официальный релиз версии SP-Forth для DOS. Дальнейшее развитие дос-версий не планируется. Следующие версии SP-Forth будут работать под Win32.

v3.01

Январь 1996

  • переход с платформы DOS на Win32;
  • новый целевой компилятор;
  • все CODE-слова переписаны в 32-разрядном варианте;
  • отказ от 4-сегментной модели памяти в пользу плоской модели win32;
  • заголовки словарных статей и данные снова "перемешаны" с кодом, как в SP-Forth v<2.0, но в структуре заголовков сохранена возможность их отделения от кода и данных;
  • доступны все функции Windows через конструкцию "WINAPI:";
  • ядро использует только вызовы KERNEL32.DLL;
  • как и в версиях 2.* используется подпрограммный шитый код, но многие детали кодогенерации изменены;

v3.70

Является переработанной версией SPF/3.14. Основные цели переработки - компиляция SPF самим собой, улучшение обработки ошибок форт-системой, "потоко-безопасность" всех слов для организации многопоточности уже на уровне ядра SPF.

  • SPF/3.70 компилируется предыдущими версиями SPF - SPF/3.0-3.16 раньше SPF/3 компилировался только by Win32for SPF/3.70 может компилировать и сам себя. Правда полученные exe будут различаться по адресам привязки в памяти (на hex 20000).
  • Вместо одного файла с исходным текстом - теперь больше 30-ти, разбито по "темам", зависимости от ОС, уровню и т.п. Удобнее ориентироваться и портировать независимые части.
  • Добавлены средства работы с USER-переменными - традиционный для многозадачных форт-систем способ исключить взаимные влияния потоков на общие переменные. Многопоточность привнесена на уровень ядра - в SPF/3.1x она прилеплялась сверху в виде библиотеки ts2.txt и патчей для READ-FILE и WRITE-FILE, что было не совсем полноценной реализацией нужных функций. Все форт-слова SPF теперь можно свободно использовать в многопоточном режиме без конфликтов по общим переменным и буферам - при создании потока автоматически создаются собственные копии этих областей данных.
  • Механизм структурированной обработки исключений Форта CATCH/THROW объединен с принятым в Windows сишным механизмом ловли исключений SEH, что позволяет превращать даже аппаратные исключения (деление на ноль, обращения по неверному адресу и т.п.) в THROW Форта и обрабатывать их программно без GPF-окон Windows. Это значительно упрощает отладку - при грубых ошибках Форт-система не завалится, а выдаст подробный дамп исключения - код ошибки, место ошибки (адрес и имя слова) и содержимое регистров. Этот механизм также многопоточный, в отличие от реализации в SPF/3.15, который приходилось исправлять внешними библиотеками.

v4.0

Январь 2001 SP-Forth/4.0 выпущен под именем SPF4 и с GPL лицензией.

Примечания

[править | править код]
  1. Страница Андрея Черезова. Дата обращения: 5 апреля 2012. Архивировано 27 марта 2012 года.
  2. RU FIG. Дата обращения: 18 мая 2022. Архивировано 25 апреля 2022 года.
  3. Особенности SPF. Дата обращения: 5 апреля 2012. Архивировано 4 февраля 2012 года.
  4. Forth in Russia: present state and standardization efforts Архивная копия от 23 сентября 2015 на Wayback Machine, Михаил Колодин, доклад на конференции EuroForth99
  5. А.В. Калачев. Система регистрации изображений на основе однокристальной цифровой камеры KAC-9630 // Журнал радиоэлектроники. — 2007. — № 6. Архивировано 3 октября 2008 года.