Авиабаза =KRoN=
 

Основные разделы

АвиаТОП

Язык программирования Forth

Страница, библиотеки и т.п. сильно устарели

Зато заведён форум по Форту и др. экзотическим языкам

Вот, решил снова оживить страничку по Форту. Не рассылать же свои исходники по e-mail... Надо отметить, что вся моя Авиабаза сейчас пишется на Форте. См. страницу поддержки разработчиков. Вот тут, к примеру, лежит исходник этой страницы. Пока тут нет ни одного полностью законченного продукта :) Ибо как только какая-то библиотека начинает работать в объёме, необходимом для меня, как я ею почти перестаю заниматься, и пополняю только по мере надобности. Итак, вот то, что, по моему мнению, может быть для вас полезным.


09.08.1999

Изменения в strings.i

Готовые библиотеки:

  • strings.i - работа со строками.
  • 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 - сама библиотека. Там же краткая дока и термины...
  • methods.i - список методов.
  • strings.o - пример класса строк. Сырая заготовка.
  • list.o - пример класса связного списка. Сырая заготовка.

Что в планах? Закончить объектную модель:

  • Ввести структуры, т.к. пока это реализуется только через класс, что накладно.
  • Возможность использовать в качестве методов стандартные слова (чтобы можно было использовать тот же '+')
  • Позволить иметь не только cell-переменные внутри классов.
  • Оптимизация по быстродействию.

Книги

Copyright © Balancer 1997 — 2020
Создано 04.12.2020
Связь с владельцами и администрацией сайта: anonisimov@gmail.com, rwasp1957@yandex.ru и admin@balancer.ru.