Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 17:40

...
Google Search
Forth-FAQ Spy Grafic

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




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

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


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

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

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

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

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

_________________
Цель: сделать 64-битную Нову под Винду


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
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/(...)
По логике, оба манипулятора должны генерить один и то же код. Но в реале первый сбоит.
Эх, буду фиксить.
В архиве помимо исходников строящегося форта есть мои либы, которые используются в служебной части.
ассемблер, манипуляторы, преобразование, стек с плав.точкой и пр.

_________________
Цель: сделать 64-битную Нову под Винду


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
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
Отключена проверка наличия слов по маске, временно.

_________________
Цель: сделать 64-битную Нову под Винду


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

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

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

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

_________________
Цель: сделать 64-битную Нову под Винду


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

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

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

https://vk.com/doc189457568_452945871

_________________
Цель: сделать 64-битную Нову под Винду


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

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

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

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

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

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

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

_________________
Цель: сделать 64-битную Нову под Винду


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
В настоящий момент размышляю над полным перебором всех слов во всех словарях форт-системы.
Необходимо также позаботиться о возможности цикличности словарей. Словарь 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

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

_________________
Цель: сделать 64-битную Нову под Винду


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

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

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

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


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

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

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

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

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

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

_________________
Цель: сделать 64-битную Нову под Винду


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Цитата:
: 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
;



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

_________________
Цель: сделать 64-битную Нову под Винду


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

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

Что изменил?
Нашёл забавную ошибку. Оказывается в моей системе не было слова XOR :)
Добавил ништячки POSTPONE DECIMAL HEX
Пересмотрел поиск в словаре.
Самое глобальное изменение - в словаре 4 цепочки поиска вместо 1-ой.
Как всё работает?
На входе указатель на строку и длина строки
От строки находится хеш. Этот хеш является идентификатором слова во всём словаре!
После с этим хешом происходит операция 3 AND CELLS т.е. получаем смещение ( +0 +4 +8 +12 ).
Оно влияет на используемую цепочку.
После выбора цепочки в ней производится поиск слова по хешу-идентификатору.

Ещё заметил логический косяк.
SFIND вызывал SFIND-IN-VOC и это слово хешировало строку при каждом вызове! Тормоза, однако-ж.
По этой причине добавил слово HASH-IN-VOC ( возможно стоит переименовать ) и изменил слово SFIND
Теперь строка хешируется один раз! а HASH-IN-VOC осуществляет по нему поиск.

Также переправил WORDS .
Вот вывод в кач-ве примера:

Цитата:

thread-1
DECIMAL .SN OK FORTH-VOC-NOTFOUND INCLUDED INCLUDED-DEPTH INTERPRET REFILL DOES> VALUE TERMINATE ExitThread Sleep CreateThread TASK> RESIZE CREATE-HEAP THREAD-HEAP HeapFree HeapAlloc HeapCreate ReadFile GetProcAddress FILE-EXIST OPEN-FILE-SHARE READ-FILE POSTPONE FROM ['] [CHAR] ENVIR-DROP >ENVIR NOTF-(CHAR) NOTFOUND-GENERATE ALIGN-NOP ] INLINE(ret) INLINE(pop) EVENT-RP@ rec.find.xt-e find-rec-cond str>group-name EVENT-TABLE rec-event sp-h SHEADER(std) WHILE BEGIN HERE L>HFA ! SSET-IN COUNT COMPARE SEARCH <> = AND LSHIFT - HASH STR>NUM GET-ORDER SET-ORDER RALLOT RP! R@ SP@ OVER NIP 2SWAP VOC-CODE H-STDOUT H-STDIN DEPTH LAST-LFA VOC0 R0 CURRENT STATE EXECUTE NOOP CELL TRUE 'TAB' BL CELL- 1- USER-CREATE-CODE USER-VECT-CODE
words in thread: 90

thread-2
TYPE(std) . INCLUDE-FILE TRANSLATE-FILE TRANSLATE-CONSOLE USER-CREATE USER-VECT :NONAME : PAUSE ResumeThread SuspendThread START ALLOCATE DESTROY-HEAP HeapReAlloc HeapDestroy OPEN-FILE(std) WRITE-FILE(std) CLOSE-FILE API-ERR R/W R/O MEM_COMMIT Stdcall: CLOSE-FILE TO ->parse-data parse-data-> ParseBuff ParseBuff.simb SFIND-IN-VOC INIT-STACK&USER ALIGN-SIZE EVENT-WORD INLINE COMPILE, LIT, mark-delete-ev group-name SHEADER Name-head(slit,) COMP? ELSE IF S, W, C, L>hereFA L>countFA W@ C@ MOVE->R > MOD * usign }num KEEP DEFINITIONS PREVIOUS 2R@ SP! 2OVER DROP USER+ USER-OFFS CONTEXT-SPACE S0 >param 2- CREATE-CODE VECT-CODE CONST-CODE VARIABLE-CODE
words in thread: 75

thread-3
xt-ALL-WORDS (xt-vocs-words) xt-WORDS-CONTEXT HEX \EOF WORDS ." LT TYPE REQUIRE TEMP-WORDLIST TEMP-WL-SIZE VOCABULARY RECURSE EXIT ; LATEST-CODE CREATE VECT VARIABLE CONSTANT STOP TerminateThread FREE CREATE-FILE CreateFileA WriteFile GetFileAttributesA GetLastError LoadLibraryA W/O FILE_CURRENT FILE_BEGIN FILE_ATTRIBUTE_ARCHIVE INVALID_HANDLE_VALUE OPEN-FILE WRITE-FILE ' CHAR PARSE ParseBuff_t >IN ENVIR-P ENVIR0 ENVIR-SPACE HASH-IN-VOC ALIGN LAST-CHAR IMMEDIATE [ CALL-in-addr? INLINE-COMPILE, EVENT-COMPILE, EVENT-TO-GROUP ->EVENT-GROUP ->EVENT rec.find.xt-e.set sp-ev gr-h CATCH DP DP[cdf] L>notfoundFA L>NFA L>FFA W! C! ASCIIZ> XOR INVERT NEGATE RSHIFT / + HASH(LY) sign-n num>s{ (free-R) RDROP R> >R ROT 2DROP DUP USER-ALLOT USER-SIZE DATA-STACK-SIZE CONTEXT FALSE CELLS CELL+ 2* 1+ 1+! USER-VALUE-CODE USER-CODE
words in thread: 96

thread-4
( \ OK(std) ORDER S" EMIT CR (REFILL-FILE) Buff.size (REFILL-CONSOLE) EVALUATE notfoundFA(default) USER-VALUE USER HEADER RESUME SUSPEND OPEN-FILE-SHARE(std) READ-FILE(std) CloseHandle FILE-EXIST(std) GetStdHandle OPEN_EXISTING CREATE_ALWAYS MEM_RESERVE PAGE_EXECUTE_READWRITE (stdcall) API-CALL init-API GET-STD-HANDLE PARSE-NAME SkipDelimiters NOTF-(VOCS::??) SFIND ALIGN-TO SPLIT FFA-COMPILE, TO-comp, params-COMPILE, RET, EVENT-EXIT NEW-GROUP rec.find.group-name new-event-rec gr-e NAME-head VOC-TH STACK? THROW UNTIL REPEAT AGAIN THEN ALLOT L>LLFA L>CFA @ FILL MOVE 0= < OR ABS /MOD N>KEEP ALSO RP@ NR> N>R 2R> 2>R PICK SWAP 2DUP LFA-FIELD BASE HANDLER 2/ 2+ 0! SLIT-CODE VALUE-CODE
words in thread: 82
words: 343


Переписал подключение файлов в сторону лучшей читаемости и большей тормознутости.
Один R@ CELL+ ASCIIZ> чего стоит, но зато в случае успеха добавил выравнивание стека возвратов.
Пред.вариант закомментировал.

_________________
Цель: сделать 64-битную Нову под Винду


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Пишу я значит инициализацию таблицы предкомпиляции. И тут чувствую, жаба душит два слова на это тратить.
Там получается обёртка и каллбек.
И начал думать, как бы сжать до одного слова. У Profit'а есть подобное решение мне однако ж неподходящее.

Решил задействовать ранее написанный пераметрический код.
Вот что вышло:
Код:
: EVENT-INIT
['] xt-ALL-WORDS >R

[CALL] VARIABLE-CODE   \ [call] для читаемости.
\ это получается лямбда
\ LFA --
>R
R@ L>FFA W@ &EVENT-WORD AND
IF
R@ L>CFA @ new-event-rec DROP
THEN
RDROP

;




[CALL] это [COMPILE] в СПФ, реализовано также. Заменил 3-4 места на связку с этим словом.
Странное дело, слово не так уж и востребовано. И по факту его назначение подавление дополнительных возможностей ( immediate ).
Но всё равно это короче связки ['] word EXECUTE

_________________
Цель: сделать 64-битную Нову под Винду


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Вот размышляю, а было б хорошо, если б...
Грубо говоря, идеи на будущее.
В свой первую версию форта носить не буду, надеюсь. А то есть стек окружений, хватит :)

Идея первая.
Возможность ссылаться на исходники по расположению предыдущих исходников.
М, да. Понятно объяснил...
На примере будет более понятно:
подключаем файл
dir1/dir2/test.f
в dir2 у нас есть несколько файлов. пусть там у нас будет файл x.f
В исходнике test.f первой строкой идёт подключение файла x.f без указания директории.
И хочется, чтобы это работало.
В моём случае это сделать можно просто. Благо, есть стек окружений.
Только его необходимо будет расширить. Добавить сложение путей. И их проверка на реальность.
Варианты:

1) линейно-откатный.
При установлении реальности файла, расчленить путь и сам файл, путь положить на стек окружений.
В стек возвратов всунуть ENVIR-DROP . Всё.
Недостатки:
Нужен контроль за стеком. Т.к. стек под строки имеет скромные размеры, ибо не фиг, вложенность не может быть большой.
Если в файле есть операции со стеком окружений, то они в лучшем случае будут некорректны в случае не парности.

2) Пространственно-откатный.
При установлении реальности файла, расчленить путь и сам файл.
ВЫДЕЛИТЬ память под стек окружений, перенести указатели этого стека на память и поставить на откат.
Загрузить в новую обитель стека значения по умолчанию ( прямо из ENVIR-SPACE ).
Недостатки:
А лицо человека не треснет при каждом вложении выделять память?
Особенности:
2.1) Работа с подпространством директорий. Если у нас путь dir1/test.f , то мы сможем брать файлы только из dir1 и вложенных в него каталогов. А файлы в вложенных в dir1 каталогах уже не смогут ссылаться на dir1.
2.2) Откатность стека исключений. Если мы манипулируем им, то при завершении трансляции вся работа с ним пропадёт.

3) Объектно-откатный.
Тоже, что и вариант 2) только стек исключений "спискофицируется". В начале памяти под стек окружений есть ссылка на пред.обитель стека окружений. Наследование :)
Недостатки: А лицо человека не изойдёт пеплом при каждом вложении выделять память и создавать список используемых каталогов?
Особенности:
3.1) ООПа :wink:
3.2) Присутствует недостаток 2.2) ,но он устраняем расширением набора слов под стек окружений.

Идея вторая:
Храним строки от S" полученные в режиме интерпретации в стеке возвратов.
Т.к. в СПФ строки хранятся в области разбора, то при обновлении буфера, данные становятся некорректными.
Хранение в стеке возвратов сохраняет корректность данных вплоть до окончания трансляции.
Делается легко, и в отладке такая мелочь пригодится.
Недостатки: если создавать строки в консоли, то происходит утечка памяти на стеке возвратов.
Лечится легко: PHP-FAST-LANG или любое-число THROW

_________________
Цель: сделать 64-битную Нову под Винду


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

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
А что есть стек окружений? У меня от VK потерян пароль.

_________________
Линукс решает, винда глотает.


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

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


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

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


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

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