Forth http://fforum.winglion.ru/ |
|
моя форт-система, которая потихоньку пишется http://fforum.winglion.ru/viewtopic.php?f=40&t=3125 |
Страница 3 из 7 |
Автор: | Victor__v [ Вт окт 31, 2017 23:27 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
В стеке окружений хранятся строки для поиска файлов. К примеру, написал S" C:" >ENVIR , то при подключении какого-нть файла будет проверяться и этот путь. Вот текущая реализация. Код под чистый СПФ не знаю где. Цитата: USER-CREATE ENVIR-SPACE 300 USER-ALLOT
USER ENVIR0 USER-VALUE ENVIR-P \ положить строку на стек окружений : >ENVIR \ addr u -- ENVIR-P @ IF ENVIR-P ASCIIZ> + 1+ TO ENVIR-P THEN >R ENVIR-P R@ MOVE ENVIR-P R@ + RP@ ! R@ 1- C@ '/' <> IF '/' R@ C! 0/R&i THEN 0/1#22x1&2< ; : ENVIR-DROP ENVIR-P DUP 0! 1- BEGIN DUP C@ WHILE 1- REPEAT 1+ TO ENVIR-P ; |
Автор: | _KROL [ Вт окт 31, 2017 23:30 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Victor__v писал(а): ... Спасибо за разьяснение!
|
Автор: | Victor__v [ Вт окт 31, 2017 23:43 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
_KROL писал(а): Victor__v писал(а): ... Спасибо за разьяснение!Всегда пожалуйста |
Автор: | vikt [ Ср ноя 01, 2017 00:37 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Victor__v писал(а): В стеке окружений хранятся строки для поиска файлов. А не проще ли сделать универсальные стеки строк? И присваивать их например: стек окружений, стек логов, стек ошибок итд. |
Автор: | Victor__v [ Ср ноя 01, 2017 09:09 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Универсальные это создающие слова необходимые под стек строк? Можно конечно, но зачем? Стек логов? Это скорей лучше в файл записывать. Стек ошибок? Что под этим понимается? В моём понимании это цепочка-список. Которую образуют CATCH и THROW . |
Автор: | Victor__v [ Пт ноя 03, 2017 21:17 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Ещё мысли. Работа в форт-системе видится мне в таком ключе: Всё что нужно в кодофайле, всё что промежуточно и не нужно за кадром. Из этого вытекает решение, на мой взгляд, наиболее оптимальное - использование временных словарей. Нужны фичи? Лок.переменные, адресация исходников, стековый манипулятор, оптимизатор, немедлятки и инлайны? Не вопрос. Подключаем временный словарь. В конечном итоге, стек контекста превращается в набор различных объектов. Зоопарк. Возникающие проблемы: Необходимо экранировать все служебные слова в каждой библиотеке-врем.словаре Как? Вот что мне приходило в голову. Теневая цепочка в структуре словаря, в которой не ведётся поиск. Проблема возникает, когда нам нужно как-то обработать ВСЕ слова в т.ч. и в теневой цепочке. Эту идею я отмёл, как имеющую в себе противоречия. Использование флагов. Мне раньше думалось, что не плохо было б иметь слово для перевязки слова из одного словаря в другой. Пусть у нас будет флаг shady ( теневой ), которым мы помечаем слова, которые в свою очередь будут перевязаны в указаныый словарь. Код: ' VOC-LOC-SERVICE SHADE-CURRENT Как-то так. На мой взгляд, у последнего варианта затраты минимальны, а сокрытие надёжно. След. проблема. Стек контекста не бесконечен. Целесообразно временные словари как-то компоновать в связки, дабы они меньше в стеке светились. Как вариант, инструментарий по пересборке уже скомп.врем.словарей. Допустим, слово помечено флагом INLINE так пусть всё слово перекомпилируется в соседний врем.словарь. М-да, полумера. К тому ж, у врем словарей есть ещё весомое преимущество - помимо функционала, коий в них можно засунуть, память у них отлично подходит под различные задумки с памятью. Хоть хранение имён лок.переменных с их последующим удалением из словаря. И кодофайл не портится и память в юзверях не выделяется. Что ещё можно придумать? Пусть в стеке контекста помимо самого контекста будет и указатель на массив связанных (подчинённых словарей). Тогда врем.словари по какому-то признаку можно скомпоновать. Дополнительно необходимо внести ещё одно поле в словарь - как удалять. Мудрёно, сразу усложняются поиск и простейшие операции с стеком. Можно поступить чуть попроще - поле, где содержится указатель на массив подчинённых словарей. Со стеком уже проблем нет. Поиск также усложняется, даже сильнее. Итого в стеке будут словари, в которых, (возможно) будет указатель на свой "массив контекста". А это ж опять итерации писать. К тому же необходимо учитывать возможность вложенности. Это "раздревление" словарей усложняет не только поиск, хрен с ним, пусть рекурсия будет, но и удаление врем. словарей. Как-то так. Всё графоманство и заметки на будущее закончил |
Автор: | _KROL [ Пт ноя 03, 2017 23:21 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Тогда у меня такой вопрос: если они временные, то когда они будут подключаться/"отключаться", если у нас после совершении сборки система завершает поток и передаёт управление внешней ОС? Или ты хочешь сказать, что в ЭТОМ месте они подключены, а перед ЭТИМ мы и их отключаем и загружаем уже другие (если надо)? Для чего это понадобится? Мне так это напоминает почему-то bat-файлы: все заданные (обычно) переменные окружния в них временные. Ну так это для моей идеи - ФортОС... P.s. Кстати, а в чём смысл монтирования словарей у mOlegа? А то я посмотрел, но так и не понял. |
Автор: | Victor__v [ Пн ноя 06, 2017 18:03 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
_KROL писал(а): Тогда у меня такой вопрос: если они временные, то когда они будут подключаться/"отключаться", если у нас после совершении сборки система завершает поток и передаёт управление внешней ОС? Или ты хочешь сказать, что в ЭТОМ месте они подключены, а перед ЭТИМ мы и их отключаем и загружаем уже другие (если надо)? Для чего это понадобится? Мне так это напоминает почему-то bat-файлы: все заданные (обычно) переменные окружния в них временные. Ну так это для моей идеи - ФортОС... P.s. Кстати, а в чём смысл монтирования словарей у mOlegа? А то я посмотрел, но так и не понял. Тут по-разному. Разберём по пунктам: 1) Как это вообще делается. Вкл/выкл врем.словарей может осуществляться вручную. В СПФ так. Я тоже не стал мудрить. создание и добавление в контекст Код: TEMP-WORDLIST ALSO CONTEXT ! Удаление из контекста и освобождение выделенной памяти. Код: CONTEXT @ PREVIOUS FREE-WORDLIST Возможен вариант с самоудалением врем.словаря после использования. Я такое делал. 2) Врем.словари располагаются в хипе, на крайний случай где-то в конце кодофайла. После сборки форт-системы врем.словари нигде не отсвечивают ( не должны отсвечивать ) А их освобождением занимается ОСь. Тоже самое и при ЦК. 3) Назначение врем.словарей ( в моём понимании ) расширять функциональность для требуемой задачи и при этом не отсвечивать в рабочем пространстве ( кодофайл ) ссылками и указателями на свой код. Если на каком-то отрезке пути есть понимание, что либа уже не нужна, особождаем себя от её присутствия. Насчёт монтирования словарей лучше спросить у mOleg'а . Он же ж Форк написал. В Форке ещё работа со словарями реализована иначе. |
Автор: | Victor__v [ Ср ноя 08, 2017 16:17 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Ещё мысли. Поскольку словарей может быть много, целесообразно как-то уменьшить зону поиска слова. Как вариант, доп.поле в словаре для доп.поиска слова. Это очень похоже на идею mOleg'а о том, что поиск должен вестись самим словарём. Однако, на мой взгляд это не должно являться обязательным условием. Поэтому мы пойдём другим путём Итак, что принимает слово доп.поиска \ addr u hash -- А что оно должно возвращать? \ -- addr u 0| ffa@ xt| addr u hash это как минимум. Необходимо обеспечить такую гибкость. Обеспечим это безусловными переходами. Т.к. так гибче. Легче высчитать точку выхода, можно переступить через вызов в коде и пр. Код: : SFIND ... R@ \ тек.просматриваемый словарь >findFA @ >GOTO HASH-IN-VOC ... ; Слово доп.поиска может ускорить поиск, иногда существенно. В холостом режиме : anyFIND SFIND->P1 >GOTO ; С учётом предкомпиляции-оптимизации затрата на время ~10 тактов. К примеру, в словаре все слова начинаются на букву R. Тогда уточнитель будет иметь след.код: Цитата: : R?false-exit \ a u hash -- a u hash| a u 0 IP:+5 2 PICK \ a u hash -- a u hash a C@ 'R' 0= IF DROP 0 SFIND->P1 >param \ минуем вызов HASH-IN-VOC >GOTO THEN SFIND->P1 >GOTO ; Можно ещё понасобирать всяких служебных слов, создать массив с хешами и пр, отсортировать. И в FindFA засунуть бинарный поиск по этому массиву. |
Автор: | Victor__v [ Пн ноя 27, 2017 12:28 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
FPU при старте форт-системы и/или потока надо инициализировать или эта процедура морально устарела? |
Автор: | Hishnik [ Сб дек 02, 2017 22:33 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Victor__v писал(а): FPU при старте форт-системы и/или потока надо инициализировать или эта процедура морально устарела? Скорее при обработке нештатных ситуаций. В FPU могут быть собственные исключения, чтобы выполнить сброс, игнорируя эти исключения, надо использовать FNINIT. |
Автор: | Victor__v [ Сб дек 02, 2017 23:15 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Hishnik писал(а): Victor__v писал(а): FPU при старте форт-системы и/или потока надо инициализировать или эта процедура морально устарела? Скорее при обработке нештатных ситуаций. В FPU могут быть собственные исключения, чтобы выполнить сброс, игнорируя эти исключения, надо использовать FNINIT. Переформулирую. Могу я, написав свою форт-систему, положить на стек с плав.точкой число и чтобы система не вылетела без инициализации FPU ? |
Автор: | Victor__v [ Сб дек 02, 2017 23:50 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Текущее состояние. Добавлен файл SRC2\TEST-FORTH.F Как можно догадаться, файл предназначен для отладки и тестового запуска моего форта в СПФ. В этом файле инициализируются также указатели на getprocaddress loadlibrarya т.к. нужно для проверки параметрических слов под стандартный вызов. Тут же нашёл косяк в сервисной части и исправил, перемудрил малясь раньше с поддержкой вызовов. Теперь работает штатно. Нашёл ошибку в слове для определения цепочки поиска в словаре. В сервисной части работала нормально, а в стоящийся нет. Проблема заключалась в том, что в строй. форте реализация на асме и я забыл написал вместо AND EAX 3 AND EAX 0 Вот что значит писать в машинных кодах. Сейчас работаю над поиском слов в словаре. Ну никак не хочет корректно работать. В чём проблема пока не разобрался. При этом проблема поиска и по хешу и по строке. По планируемым изменениям. Начал менять природу констант. Теперь это машинный код, который инлайнится. Без параметрического CONST-CODE. Почему я решил от этого отказаться? Как ни странно сподвигло меня на это изучение реализации бектрекинга от Profit'а. У него были замечены "странные" решения. Цитата: BACK FALSE TRACKING Цитата: (: FALSE Скорее всего эти выверты были обоснованы параметризацией констант в СПФ. Если их использовать напрямую в бектрекинге, то вместо одного вызова будет два ( плюсуется CONST-CODE ). Переписал слова необходимые для перебора всех слов во всех словарях. Теперь это не функции требующие xt, а слова требующие остатка кода. Примечательно, что алгоритм прохода по всем словарям изменился - алгоритм стал неявно рекурсивным. Добавил комментарии по некоторым исходникам. Добавил также некоторые соглашения. Короче, всё интересное можно почитать в SRC2\DOCS Как отлажу поиск в своём форте, выложу очередную порцию исходников. |
Автор: | Hishnik [ Вс дек 03, 2017 00:06 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Victor__v писал(а): Переформулирую. Могу я, написав свою форт-систему, положить на стек с плав.точкой число и чтобы система не вылетела без инициализации FPU ? Сейчас еще раз проверил - FNINIT стоит после выделения памяти для системы (на старте) и внутри обработчика ABORT. У задачи будет свой контекст FPU, но сбрасывать на старте - просто признак хорошего тона. |
Автор: | Victor__v [ Вс дек 03, 2017 00:29 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Благодарю |
Страница 3 из 7 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |