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

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

Использование Имеет определённую известность благодаря написанному на его базе Андреем Черезовым коммерческому пакету EServForth in Russia: present state and standardization efforts , Михаил Колодин, доклад на конференции EuroForth99. Другой популярный прикладной пакет, написанный на SP-Forth — это утилита для автоматизации Windows nnCron.

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

Проект URL Описание Eserv HTTP/FTP/SMTP/POP3/IMAP сервер и прокси для Win32 (множество проектов) форт-системы для pocket PC nncron unix-подобный cron планировщик для Windows со скриптами forth-script SP-Forth как CGI acweb HTTP-сервер для Win32 acfreeproxy http proxy-сервер acftp 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 лицензией.

Примечания

Ссылки

https://github.com/rufig/spf - GIT-репозиторий SP-Forth https://github.com/yarus23/SPF.JS SP-Forth на javascript браузере и в Node.JS

Категория:Языки программирования семейства Форта Категория:Свободные компиляторы и интерпретаторы Категория:Конкатенативные языки программирования