Forth http://fforum.winglion.ru/ |
|
моя форт-система, которая потихоньку пишется http://fforum.winglion.ru/viewtopic.php?f=40&t=3125 |
Страница 6 из 7 |
Автор: | Victor__v [ Вс мар 11, 2018 19:29 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
И ещё по поводу оптимизации. Оптимизатор действует подобно вычислению выражений в лиспе [code=лисп] (+ 5 (+ 2 3) ) [/code] [code=форт] 2 3 + 5 + Или же схематично ( ( 2 3 + ) 5 + ) [/code] |
Автор: | Victor__v [ Сб мар 17, 2018 14:32 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Нова, исходники, либы, оптимизатор В настоящий момент пишу всякие полезные вещи для Новы: оптимизатор, работа со строками, ассемблер. Всё в архиве. Оптимизатор кода через таблицу предкомпиляции больше всего "достаётся" операциям со стеком возвратов и ветвлениям (IF и WHILE). Т.к. оптимизатор будет расти, то в шаблонички можно зашить условную ООПу т.е. указать условие-фрагмент, которое будет определено позднее. Ещё не использовал это в коде, но наверно придётся. Строки располагаются в стеке возвратов, либа не окончена. В отличие от версии для СПФ, код полностью высокоуровневый. Приведением череды POSTPONE-ов в божеский вид занимается оптимизатор, если его подключить. Развитие Новы: Планируется при запуске читать файл инициализации форта, чтобы что-то подключить заранее, а также чтение командной строки. Изменить работу параметрических слов - чтоб через CREATE-CODE работали. Зачем? Перераспределить нагрузку на компилятор. Пример опр. слова: Код: : (DOES>CONST) @ STATE @ IF LIT, ; : CONSTANT HEADER ['] CREATE-CODE COMPILE, ['] (DOES>CONST) , , IMMEDIATE ; В итоге переменные типа CONSTANT VARIABLE VALUE станут компилирующими словами немедленного исполнения. |
Автор: | Victor__v [ Сб мар 24, 2018 16:12 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Доделал работу над строками в стеке, также сделал либу для лок. переменных. Теперь займёмся портированием СПФ-ских либ. К примеру для работы с COMом. Оптимизатор тоже потихоньку развивается - обрастает шаблончиками. |
Автор: | KPG [ Сб мар 24, 2018 16:57 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Victor__v писал(а): Теперь займёмся портированием СПФ-ских либ. Не рассматривался ли вариант ещё и возможности совместимости системы с Win32Forth? P.S. "Заход" на совместимость запуска Win32Forth кода, в рамках SPF4, уже предпринимался ранее. |
Автор: | Victor__v [ Сб мар 24, 2018 17:43 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
KPG писал(а): Victor__v писал(а): Теперь займёмся портированием СПФ-ских либ. Не рассматривался ли вариант ещё и возможности совместимости системы с Win32Forth? P.S. "Заход" на совместимость запуска Win32Forth кода, в рамках SPF4, уже предпринимался ранее. С этой форт-системой знаком на уровне "она есть". Что предлагается портировать из WinForth ? Насчёт совместимости вопрос достаточно интересный... В планах пока портировать и написать: COM, работа с мускулем, поддержка HTTPS, плав. точка, функции хеширования, сортировки Ну и гуй, когда калбеки разработаю. |
Автор: | KPG [ Сб мар 24, 2018 18:11 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Victor__v писал(а): С этой форт-системой знаком на уровне "она есть". Что предлагается портировать из WinForth ? Насчёт совместимости вопрос достаточно интересный... Хотя бы возможность запустить примеры из её дистрибутива вплоть до её IDE. Win32Forth for graphics and parallel processing. с некоторыми программами для неё. Базис использования Scintilla.dll некоторое время дорабатывал в WinForthIDE. P.S. Ещё у меня остался, например, и проект на базе Win32Forth ff303 (мульти кросс Форт система для контроллеров) адаптированный для PDP-11 процессоров (близко к MSP430). Совместимость версий Win32Forth не такая хорошая (поэтому он собирается для 6-ой версии Win32Forth) . Когда переносил основу функционала Протого редактора узлов с Win32Forth на SPF4 были некоторые шероховатости (как разная последовательность параметров для API функций Windows). Для примера можно и такой проект привести Cweed is a C source file weeder written in Win32Forth. Начальная дружественность к Форт-новичкам у Win32Forth несколько лучше чеи в SPF4. По проектам с Win32Forth "участием" может ещё кто что нибудь добавит. Какие дальнейшие выводы? |
Автор: | Victor__v [ Вт мар 27, 2018 22:59 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Посмотрим. В приоритете собственные наработки и перенос СПФ-ских творений, коие успели пригодится. Нова-форт: исходники, либы, оптимизатор В архиве работает: стек. манипулятор (5.1), лок. переменные, создание строк на стеке возвратов, ассемблер и по мелочи. Оптимизатор работает, пока в процессе. Потом засуну его во временный словарь. Если его подключить заранее, то можно неплохо съэкономить в некоторых местах. К примеру в R:STR выделение памяти на стеке -64 RP@ + RP! вырождается в одну инструкцию. По Нове. Изменил версию: 1.01 Причина: поменял механизм компиляции слов, сделал чуть логичней. Появился служебный флаг "я параметрическое слово". Как несложно догадаться, им автоматически метятся константы, векторы, переменные и пр. Плюс 4-5 мелких исправлений. не все их документировал. К примеру слово RF^ стало инлайн-словом, как и планировалось. Размышления: Использовал в оптимизаторе своеобразный аналог CASE. Фактически, обёртка произвольной цепочки IF-ELSE Загвоздка в том, что на это меня надоумило сообщение фиг знает откуда у суперскобке в Лиспе Впрочем, вещь полезная. Чувствую оптимизатор буду портянками писать. |
Автор: | Victor__v [ Сб апр 07, 2018 12:18 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Исходники Новы 03.04.2018 Добавлено слово VOC-THREADS константа кол-ва цепочек поиска в форт-системе. 31.03.2018 Для ускорения трансляции слово PARSE-NAME переписано на манипуляторе. Пофиксена проблема с комментарием \ т.к. не работал одиночно. Переписана трансляция консоли. Убран из пользовательской области буфер консоли. Теперь буфер создаётся автоматически при использовании трансляции консоли. Убрано слово TOP-ERROR: По портированию Портирована быстрая сортировка ~pinka В настоящий момент портируется либа для работы с COM от ~yz. Пишется слой совместимости. Чуть переписаны лок. переменные, дабы портируемые либы не переписывать. Написана обёртка WINAPI: Только вчера вечером писал. В отличие от Stdcall: вычисляет кол-во требуемых переменных в момент первого вызова. А после начинается самомодификация кода в месте вызова. (winapi-code) заменяется (stdcall) Остальное в моём ЖЖ https://viktor-ra.livejournal.com/62321.html |
Автор: | Victor__v [ Вс апр 15, 2018 19:31 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Код плаа-хой строки типа S" 12,00" вычислялись некорректно Занимался преобразованием строки в FLOAT вот как надо \ преобразовать строку. \ вернуть 2 числа как дробь ( 12.34 -> 1234 / 100 ) : str->fl \ A U -- число на-сколько-делить \ S" 12,34" --> S" 12" S" 34" S" ," SPLIT 0= IF S" ." SPLIT 0= IF -2001 THROW THEN THEN \ дублировать 4 эл-та сохранить длину строк DUP >R 2OVER DUP >R 2OVER 2SWAP 2R> + CELL+ RALLOT RF^ >R \ point R@ SWAP DUP >R MOVE 2R@ + SWAP DUP >R MOVE 2R> + \ u R> \ a SWAP STR>NUM THROW >R STR>NUM THROW >R STR>NUM THROW R> DUP 0= IF DROP RDROP 1 EXIT THEN \ 12 34 10 >R BEGIN 1 RPICK R@ /MOD SWAP 2 PICK = >R 2 PICK = R> AND INVERT WHILE R> 10 * >R REPEAT 2DROP 2R> ; : NOTFOUND(.,) ['] str->fl CATCH = IF 2DROP 0 EXIT THEN SWAP int>F F/int STATE @ IF FLIT, THEN -1 ; [/code] Часть слов для работы плав. точки написана: операции, "константы" и пр. У меня пока пашет асм, буду всё в коды переводить. Осталось научиться печатать FLOAT-значения. Стоит ли ещё разбирать строки с экспонентой? Стоит ли ещё дополнительно заморачиваться поддержкой исключений на плав. точке? |
Автор: | Victor__v [ Пн апр 23, 2018 19:54 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Хочу обсудить такую идею. Вступление: В СПФ развёрткой параметрических слов и компиляцией слова TO занимается оптимизатор (предположительно). В Нове развёртка отведена отдельному слову, как и компиляция слова TO Но оба варианта не очень хороши. Как минимум, они не масштабируются. А при расширении функционала это требуется. К примеру, чтобы можно было записать значение в лок. переменную используя TO. Или у нас появились новы сущности с коими хотелось бы аналогично работать. Переопределение слов в данной ситуации не кажется надёжным и правильным. Возможное решение проблемы: Можем использовать таблицу, назовём её PARAMS-TABLE у неё будет 4 поля. Каждое их которых размером CELL. В первом столбце у нас само параметрическое слово (по нему всё ищется) В втором столбце у нас слово отв. за развёртку слова во время компиляции В третьем столбце у нас слово отв. за действие с параметрическим словом через TO В четвёртом столбце у нас действие с параметрическим словом через FROM (получить указатель на зн. переменной). Естественно, "кушать" они будут указатели на переменную (на то, что за параметрическим словом). При использовании слов TO и FROM будет вызываться перебор PARAMS-TABLE, который выдаст указатель на строку таблицы, где будут соответствующие указатели на код. Примерный код для TO Код: : TO ' DUP >param SWAP GET-CALL-in-code ( addr -- xt err|0 ) THROW PARAM-TABLE-ITER \ xt -- rec 2 CELLS + @ EXECUTE \ xt: ?? addr>param -- ?? ; IMMEDIATE Это позволит гибче пользоваться словами TO и FROM. Всего лишь добавляя новые параметрические слова и поведение. Примерный код инициализации параметрического слова ' VARIABLE-CODE ' LIT, ' (DOES>VAR) ' LITERAL ADD-PARAM-TABLE Что думаете по этому поводу? |
Автор: | mOleg [ Вт апр 24, 2018 20:20 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Victor__v писал(а): Возможное решение проблемы: а чем классика не угодила? (по сути решение стандартное, и, хотя пример из форка моего, который я таки классикой не считаю 8) но, надеюсь, понятное) Код: \ создать инициализированную переменную, \ возвращающую по-умолчанию собственно значение. : VALUE ( x / name --> ) HEADER COMPILE (value) COMPILE (store) COMPILE (CREATE) A, ;CREATE ; \ создать неинициализированную переменную : USER-VALUE ( / name --> ) HEADER COMPILE (uvalue) COMPILE (ustore) COMPILE (USER) ADDR USER-PLACE A, ;CREATE ; \ сохранить значение n в VALUE переменной : TO ( n / name --> ) ' TOKEN + REGULAR ; IMMEDIATE \ прочесть содержимое VALUE переменной : FROM ( / name --> xt ) ' [ 2 TOKEN * LIT, ] + REGULAR ; IMMEDIATE то есть несколько полей кода. ? |
Автор: | Victor__v [ Вт апр 24, 2018 21:33 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
mOleg писал(а): Victor__v писал(а): Возможное решение проблемы: а чем классика не угодила? (по сути решение стандартное, и, хотя пример из форка моего, который я таки классикой не считаю но, надеюсь, понятное) <Всякий разный rод> то есть несколько полей кода. ? Честно сказать, не додумался. А по факту отдать поведение с ёнтими словами самому параметрическому слову идея хорошая. К тому же при компилировании форт-системы это можно сделать уже легко. Но как красивей поступить с развёрткой параметрических слов? Чтоб к примеру константа в коде сразу превращалась число, а юзер-переменная в LEA EAX, 4 [EDI] У меня параметрические слова метятся флагами и потом отдельно развёртываются спец. словом. Думал над тем, чтобы отдать это на откуп самим словам, но это приведёт к созданию ссылок вперёд, чего бы не хотелось. Т.к. константы юзвери и переменные начинаются использоваться почти сразу, а компилирующие слова несколько позже. Груба говоря все слова с -CODE упразднять, использовать CREATE и DOES> с компилирующими словами, которых нет в начале форт-образа. Без ссылок вперёд не обойтись. А этого бы не хотелось. |
Автор: | Victor__v [ Чт апр 26, 2018 19:10 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Как планирую решить проблему с масштабированием TO и FROM HEADER (SKIP-TO&FROM) EBX POPr EBX 2 CELLS [EBX] LEAr-im-r EBX JMPr \ Для примера HEADER VALUE-CODE ' (SKIP-TO&FROM) COMPILE, ' NOOP , ' NOOP , EBP CELL NEGATE [EBP] LEAr-im-r [EBP] EAX MOVr-r EAX POPr EAX [EAX] MOVr-r RET И аналогично с остальными параметрическими кодами. С CREATE немножко заморочаюсь, дабы тоже поддержка была TO и FROM вычисляют адрес параметрического слова и вычленяют из него при наличии соответствующие обработчики. |
Автор: | Victor__v [ Пн апр 30, 2018 16:48 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
NOVA-forth версия 1.02 29.04.2018 Добавлены слова: GET-CALL и RECOMPILE . Последнее занимается (само)модификацией кода. Эти слова необходимы для реализации слов ниже. Слова TO и FROM работают через вызов обработчиков в запрашиваемых параметрических словах. Механизм записи и получения указателя переменных теперь может быть расширен при необходимости. Добавлено слово WINAPI: Маленький шажок к СПФ-у - неплохой шаг к поддержке самомодификации кода. 08.04.2018 Переписано слово TASK> https://cloud.mail.ru/public/CqRW/BUc7h2HhS В настоящий момент портирую либу для работы с COM от ~yz. То и дело натыкаюсь на особенности СПФа Ещё блин надо будет API-CALL для COMа купировать. т.к. мой вариант всё таки требует кол-во параметров, а СПФ-ский нет |
Автор: | Victor__v [ Ср май 02, 2018 14:11 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Написал обёртку под обратный вызов ( callback ). Подскажите, на какой функции легче всего затестить обёртку на работоспособность? |
Страница 6 из 7 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |