Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб окт 21, 2017 01:22

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: моя форт-система, которая потихоньку пишется
СообщениеДобавлено: Вт май 30, 2017 21:45 
Не в сети

Зарегистрирован: Пт июн 06, 2008 14:21
Сообщения: 90
Откуда: Карелия
Благодарил (а): 1 раз.
Поблагодарили: 3 раз.
И чего INCLUDED было не оставить....


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: моя форт-система, которая потихоньку пишется
СообщениеДобавлено: Ср июн 21, 2017 14:34 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 343
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
https://cloud.mail.ru/public/M31s/oTsZUNLQR

Отлажен стек словарей, написана обёртка под внешний вызов ( винда ), написано слово интерпретации и механизм поддержки notfound-ов в словарях.
Добавлены слова для навигации по словарю и слов.статье.
Структура словаря изменилась. Добавлено 64-битное поле-маска для ускорения поиска.
Ещё несколько служебных слов.
А также слово для компиляции слов с параметрами ( вектора, переменные, константы ).

Всё ещё не переписан механизм предкомпиляции ( требуется пара улучшений ), да и требования изменились, так сказать, стали мягче.
В раздумьях над поддержкой "механизма" структур. Пока надо в одном месте. Реализуется просто, но нет особой необходимости в них.
Есть мысли добавить стек форт-окружения. Но это уже на будущее.
Осталось немного: внешняя ось-ная вещь ( вызовы, константы ), механизм предкомпиляции, да с заголовком exe-шника разобраться надо :x

И ещё надо исходники причесать. А то уже теряется причинно-следственная связь :(9

_________________
Цель: написать форт-систему
Подцель: pe-формат, скрыть ненужные слова из целевого словаря FORTH, отладка


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: моя форт-система, которая потихоньку пишется
СообщениеДобавлено: Пн июл 10, 2017 13:54 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 343
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
https://vk.com/doc189457568_449128163

Отлажен механизм перехвата.
Дополнен и также отлажен стек словарей ( GET-ORDER SET-ORDER )
Написаны обёртки под некоторые операции с файлами ( пока читать, писать, размер )
Примечательно, что обёртки пишутся на стековом манипуляторе
Код:
: READ-FILE(std) \ addr kv h -- size err|0
   2/(33x3^4R<)34120 ReadFile API-ERR 
   R> SWAP
;


Так манипуляций со стеком меньше, да и понятней стало
Написана трансляция исходных файлов.

Осталось написать механизм предкомпиляции, отладочные слова, обёртки и инициализацию и ещё pe-формат изучить немножко.
Что-то с каждым разом остаётся всё больше и больше :)

Всё ещё в раздумьях над реализацией стека окружений.
Без этого стека текущий код подключения выглядит "многообещающе"

Код:
: INCLUDE-FILE \ ADDR U -- ?? -1|0
   MOVE->R
   2DUP FILE-EXIST
   IF   TRANSLATE-FILE

   ELSE    S" DEVEL/"    
      1/(2#R0-)1R0
      0/(2^0^)0
      MOVE
      0/(3#30+2#1R<2^)013
      2DUP FILE-EXIST
      IF   3/10   TRANSLATE-FILE

      ELSE   2DROP
         1/(2#R1<2^)10
         S" SCRIPT/"
         1/(2#R0-)1R0
         0/(2^0^)0
         MOVE
         0/(3#30+2#1R<2^)013
         2DUP FILE-EXIST

         IF   3/10   TRANSLATE-FILE

         ELSE 2DROP 2DROP 0 0/(R#) EXIT
         THEN
      THEN
   THEN
   -1 0/(R#)

;



В этом коде заметил косяк стекового манипулятора.
Нельзя писать 0/(...)234(...)
Ввиду того, что стек модифицируется повторно. И код на выходе некорректен.
Надо тогда писать так
0/(...)234 0/(...)
По логике, оба манипулятора должны генерить один и то же код. Но в реале первый сбоит.
Эх, буду фиксить.
В архиве помимо исходников строящегося форта есть мои либы, которые используются в служебной части.
ассемблер, манипуляторы, преобразование, стек с плав.точкой и пр.

_________________
Цель: написать форт-систему
Подцель: pe-формат, скрыть ненужные слова из целевого словаря FORTH, отладка


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: моя форт-система, которая потихоньку пишется
СообщениеДобавлено: Сб сен 16, 2017 13:03 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 343
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
https://vk.com/doc189457568_452212114
Тек.состояние.
Добавлен стек окружений. Отлажен.
Переписан механизм трансляции см тему http://fforum.winglion.ru/viewtopic.php?f=8&t=3139&p=44148#p44148
Отлажены слова USER-CREATE-CODE, CREATE-CODE
Какая-то непонятка с ассемблером.
[EBX] JMPr - работает раз через 2 .
А
EBX [EBX] MOVr-r
EBX JMPr - работает стабильно. Что за фигня в ассемблере интела? :^)
Ещё была замечена неработающая связка AL [EDX] CMPr-r или [EDX] AL CMPr-r . Стоило поменять 8-битный регистр и всё заработало. Почему-то. Потом ещё раз проверил с AL, работает. Хрень какая-то.
Ещё было замечено странное поведение в переходах. Может просветит кто-нть?
Если сравнить на больше/меньше память и 8-битный регистр, то флаг не корректен. А если местами поменять регистры, то всё работает штатно.

Сменил ассемблер. Из-за этого в моём форте временно отключена поддержка стека с плав.точкой.
Печать также частично отлажена.
Добавлено 2 слова для сохранения зн.переменных на стеке возвратов и их восстановление при откате.
Добавлено ССКИС ( сопрограмма сделанная крайне извращённым способом )
см. SRC2\FORTH\MID\CATCH.F слово TO-CATCH SRC2\FORTH\TOP\TRANSLATE.F там повсеместно
Там же решена проблема мн-ных точек перехвата чуть менее извращённым способом.
Ну куда деваться? Есть сопрограмма, делай и goto.
Чуть переписан интерпретатор.
Некоторые комментирующие слова надобно переписать. Дабы трансляцию перезагружали.
Из-за добавления ССКИС возникает заморочка по параметрам в перехвате исключений.
CATCH при опр.условиях получает два значения вместо одного. Что может привести к неприятностям.
К примеру, надо перезагрузить трансляцию, а перехват стоит не на интерпретаторе!
Будем думать.
Зато нет типизации источника данных как в СПФ или в Форке. ( можно посмеяться )

Чуть отлажена компиляция SRC2\FORTH\MID\COMPIL.F
Отключена проверка наличия слов по маске, временно.

_________________
Цель: написать форт-систему
Подцель: pe-формат, скрыть ненужные слова из целевого словаря FORTH, отладка


Последний раз редактировалось Victor__v Сб сен 16, 2017 19:53, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: моя форт-система, которая потихоньку пишется
СообщениеДобавлено: Сб сен 16, 2017 13:12 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 343
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Ещё добавлен механизм предкомпиляции.

Осталось: Ос-зависимые вещи. PE-формат, отладка основных слов.
К примеру SFIND-IN-VOC тестировался, а SFIND нет.

_________________
Цель: написать форт-систему
Подцель: pe-формат, скрыть ненужные слова из целевого словаря FORTH, отладка


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: моя форт-система, которая потихоньку пишется
СообщениеДобавлено: Сб сен 30, 2017 15:01 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 343
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Тек.состояние
Переписана трансляция файлов и пр.
Теперь всё гораздо проще и логичней. Почти как в СПФ только без типизации источника.
Добавлено несколько новых слов. В т.ч для работы с файлами ( OPEN CREATE CLOSE и пр )
Введены пользовательские вектора. Сейчас только один вектор в системе - REFILL

Обновлена сервисная часть.
Теперь есть спец.словарь из которого ЦК берёт особые слова для компиляции ( циклы условия, операции с вход.потоком и пр. )
В сервисной части обновлён механизм предкомпиляции. Что позволило сделать код в строй.системе чуть оптимальней ( убрано лишнее стеко-махание в некоторых местах ).
Эффект, однако, минимальный.
Тому 2 причины:
1) Везде где может быть тотальный стековый ахтунг используется стековый манипулятор
2) Было написано лишь 3 обработчика для предкомпиляции.

https://vk.com/doc189457568_452945871

_________________
Цель: написать форт-систему
Подцель: pe-формат, скрыть ненужные слова из целевого словаря FORTH, отладка


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: моя форт-система, которая потихоньку пишется
СообщениеДобавлено: Чт окт 05, 2017 13:21 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 343
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
https://vk.com/doc189457568_453178623
Текущее состояние.
Вся нужная ОСь-ка написана ( многозадачность, хип )

Написано несколько оптимизаторов-обработчиков предкомпиляции. Написаны были ради интереса. Каждый пишется минут по 5 и экономит на весь код байт ~15 . Впрочем, с глазковой оптимизацией закончил. Всё равно из-за стекового манипулятора оптимизировать-то и нечего почти.

Просматривал код нижнего уровня и нашёл ошибку. У меня за каким-то лешим указатель на кодофайл берётся из CONTEXT.
Исправил. Теперь как и задумывалось из CURRENT. Код перевёл в высокий уровень.

Что осталось?
PE-формат, дописать инициализацию, убрать из исходников невостребованные побеги творчества,
добавить форт-ништячки без которых можно, однако ж неудобно писать и отлаживать иногда. HEX DECIMAL POSTPONE и пр.
Допилить свой ассемблер ( всё лень про поддержку float в документации прочитать ) и заново ввести несколько слов для операций с float-стеком

А потом тотальная отладка :evil:

P.S.
Ещё имеется мысль засунуть некоторые слова по словарям или ещё как-то избавиться от них
К примеру, поиск по записям предкомпиляции с условием нафиг не сдался в основном словаре, как и почти все константы от Винды

_________________
Цель: написать форт-систему
Подцель: pe-формат, скрыть ненужные слова из целевого словаря FORTH, отладка


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: моя форт-система, которая потихоньку пишется
СообщениеДобавлено: Вт окт 17, 2017 22:58 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 343
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
В настоящий момент размышляю над полным перебором всех слов во всех словарях форт-системы.
Необходимо также позаботиться о возможности цикличности словарей. Словарь FORTH к примеру.
Естественно, предусматриваем крайний вариант - большая вложенность словарей и их паранормальные взаимоотношения.

Нам понадобится слово для работы со множествами - включить элемент в множество
Цитата:
\ приставка S означает STACK
: SSET-IN \ elem1 elem2 ... elem-n n zn -- elem1 .. elem-n zn n+1| elem1 ... elem-n n
;


Алгоритм на данный момент:
0) создаём новую обитель для стека контекста и переносим элементы туда
1) дублируем элементы стека словарей на стек данных и получаем множество ( логически )
2) находим все словари в списках стека контекста, и включаем в множество на стеке данных
3) если количество словарей во множестве и на стеке равно, выполняем переборный код и уходим из слова
4) заносим полученное множество в стек контекста
переходим к п. 1

Тормоза, но зато железобетонно. Да и скорость тут не критична.

_________________
Цель: написать форт-систему
Подцель: pe-формат, скрыть ненужные слова из целевого словаря FORTH, отладка


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: моя форт-система, которая потихоньку пишется
СообщениеДобавлено: Ср окт 18, 2017 20:50 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4831
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
Victor__v писал(а):
В настоящий момент размышляю над полным перебором всех слов во всех словарях форт-системы.

интересно, нафига?
ну, перебор всех слов в одном словаре понимаю, а вот вообще всех зачем?

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: моя форт-система, которая потихоньку пишется
СообщениеДобавлено: Ср окт 18, 2017 22:49 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 343
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Благодарю за убор дубляжа.

mOleg писал(а):
Victor__v писал(а):
В настоящий момент размышляю над полным перебором всех слов во всех словарях форт-системы.

интересно, нафига?
ну, перебор всех слов в одном словаре понимаю, а вот вообще всех зачем?

Я предвидел этот вопрос :)
Этот перебор позволяет решить несколько проблем.
1) Обнулить данные в WINAPI-словах. Использование отдельного списка для оных, хоть и решает проблему, но мешает их определению во врем.словарях т.к. цепочку рушится при очистке.
2) Инициализация таблицы предкомпиляции. Т.к. при старте форт-системы таблица пуста и есмь кусок хипа, то необходимо её заполнить словами предкомпиляции. Откуда их взять? Можно создать отдельный список адресов, который скармливаем таблице. Короче, у этого подхода проблема озв. в п 1). Можно понасотворять слов пополнения и пр. Но с перебором проще.

Форт как-никак будет расти, а растущему организму нужно хорошее питание :?

_________________
Цель: написать форт-систему
Подцель: pe-формат, скрыть ненужные слова из целевого словаря FORTH, отладка


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: моя форт-система, которая потихоньку пишется
СообщениеДобавлено: Ср окт 18, 2017 22:58 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 343
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Цитата:
: xt-WORDS-CONTEXT \ xt --
\ xt: LFA --
VOC0 @ CONTEXT 2>R
>R
BEGIN
RP@ CELL + @ @ L>LLFA @
>R
BEGIN
R@ WHILE
R@ RP@ CELL+ @ EXECUTE
R> @ >R
REPEAT
RDROP
R>
2R@ = IF RDROP RDROP DROP EXIT THEN
R> CELL- >R
>R
AGAIN
;

\ найти и включить словарь в множество
: (xt-vocs-words) \ set LFA -- set|set-upd
L>CFA @ >R
R@ ['] VOC-CODE CALL-in-addr?
IF
R@ param @ SSET-IN
THEN
RDROP
;

: xt-ALL-WORDS \ xt
\ xt: LFA --
GET-ORDER \ готовим словари для перемещения
['] THROW >R \ если ошибка в xt, поймаем
VOC0
FROM CONTEXT
2 N>KEEP \ сохраняем зн.переменных для отката
300 CELLS RALLOT
['] (free-R) >R \ делаем массив откатным
DUP VOC0 ! TO CONTEXT
SET-ORDER
>R \ xt операция возможно лишняя, но так спокойней
BEGIN
GET-ORDER
['] (xt-vocs-words) xt-WORDS-CONTEXT
\ словари в стеке и множестве равны ?
CONTEXT VOC0 @ - CELL+ CELL / OVER XOR >R
SET-ORDER
R> 0= UNTIL
\ если да выполняем перебор
R> ['] xt-WORDS-CONTEXT CATCH

\ тут наступает откат. Т.е стек контекста восстановится
\ если кому-то понадобится исходный стек контекста
\ извращайтесь с CATCH и HANDLER
;



Вот как-то так. Тормоза однако, как и говорил

_________________
Цель: написать форт-систему
Подцель: pe-формат, скрыть ненужные слова из целевого словаря FORTH, отладка


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB