Вот, решил снова оживить страничку по Форту. Не рассылать же
свои исходники по e-mail... Надо отметить, что вся моя Авиабаза сейчас пишется
на Форте. См. страницу поддержки разработчиков.
Вот тут, к примеру, лежит исходник этой страницы.
Пока тут нет ни одного полностью законченного продукта Ибо как только
какая-то библиотека начинает работать в объёме, необходимом для меня,
как я ею почти перестаю заниматься, и пополняю только по мере надобности. Итак,
вот то, что, по моему мнению, может быть для вас полезным.
run.i - вызов внешних программ под Win32/SP-Forth 3.15 с ожиданием их завершения.
Объектная модель:
Это моя гордость, т.к. всё придумал сам, аналогов не видел
Достоинства:
Удобный простой интерфейс:
object subclass point \ создадим класс point, подкласс object
cell var _x \ две переменных - координаты
cell var _y
:method draw ( oid -- ) ... ; \ рисуем точку
:method circle ( r oid -- ) ... ; \ окружность радиусом r вокруг точки
...
point subclass rect \ класс rect наследует point
cell var p1 \ указатель на класс первой точки - верх-лево
cell var p2 \ указатель на класс второй точки - низ-право
:method new ( cid -- oid )
object super new \ вызовем старый new
point new this p1 ! \ проинициализируем точки
point new this p2 ! ;
:method delete ( oid -- )
this p1 @ delete
this p2 @ delete
object super delete ;
:method draw ( oid -- ) ... ; \ рисуем прямоугольник...
и так далее...
Высокая скорость, вследствие (псевдо)статического связывания.
Пример: На AMD K6-250 можно выполнить на SP-Forth 3.15
около 170 тыс. ALLOCATE/FREE в сек. На библиотеке Андрея
Черезова (ooo.i) получается около 32 тыс. new/delete.
В моём варианте - около 110 тыс. Вся хитрость в том,
что каждый класс имеет статическую таблицу методов, а ID метода
есть индекс в этой таблице. Отсюда мы получаем быстродействие
статического связывания (на этапе компиляции, как
в C++/Object Pascal - поскольку не приходится искать метод в словаре)
и гибкость динамического (при интерпретации,
как в библиотеке Черезова или в Smalltalk. Какой бы объект не появился
на входе слова, методы работы с ним, если определены, будут найдены).
Скажем, слово : printcr ( oid — ) print CR ;
будет работать с любым объектом, имеющим метод print! Правда,
необходимо таскать каждому классу таблицу методов размером
n CELLS, где n - число всех методов в проекте. Но для современных
32-х разрядных систем потратить даже пару килобайт на класс - это
несерьёзно...
Есть и недостаток - библиотека в стадии разработки, так что сыровата и бедновата...
Вот файлы этой библиотеки.
objects.i - сама библиотека. Там же краткая дока и термины...