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].
Версии
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 лицензией.
Примечания
Ссылки