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

...
Google Search
Forth-FAQ Spy Grafic

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




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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1287
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Портировал библиотеку automate.f от ~yz на Нову
Портирована она почти полностью. Исключение: цикл FOREACH и расшифровка ошибок (будут вылезать кракозябры).
Работоспособность проверял бегло.

Как пользоваться СПФ-скими либами из Новы?

Надо подключить окружение: SPF/ENV+.F
Всё, портированные либы будут корректно подключаться.
Поскольку в Нове слов меньше, может потребоваться слой совместимости - файл WORDS.F (знаете, как назвать попонятней, предлагайте).

Как подключается automate

Код:
SPF/ENV+.F
WORDS.F
~YZ\LIB\AUTOMATE.F



Либу выложу позже. Когда ещё Нову и либы к ней пополню

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


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1287
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Нова 1.02, исходники, либы, портированный COM

Что изменилось?
TRANSLATE-FILE стал пользовательским вектором.
Пользовательские вектора тоже изменились. Т.к. они определяются почти на финишной прямой, то USER-VECT-CODE определяется на среднем уровне, что позволило вывести его из параметризации. Это слово уже само отвечает за компиляцию.

Добавлена возможность загружать файлы в форт-систему без обработки. В принципе, это и так делается одной строчкой, но Нова дополнительно позволяет для этих целей пользоваться стеком окружений и путём используемого файла.
Для этого указывайте в конце пути к файлу :BIN
К примеру, FILE-TEST.F:BIN
Пример использования можно посмотреть в ~er\float\code\include.f

Добавлена библиотека макросов ~er\macro\macro.f
Позволяет определять простые макросы и константы, которые нигде не отсвечивают. Вся служебка хранится в стеке возвратов и при окончании трансляции очищается откатом. Откаты решают всё! :D

Портирована работа с COM - automate.f от ~yz
Как я понял, эта либа писалась достаточно давно. Иначе как объяснить наличие BL WORD COUNT вместо PARSE-NAME :)

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


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

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

Изменения:
Нова может скомпилировать саму себя по исходникам.
В процессе переписал часть стекового манипулятора (в 5.1). Из-за различий версий код компилировался разный, что мешало проверить "правильность" системы. После этого живо были ликвидированы остальные несуразности.
Стоит отметить, что компиляция форт-образа ведётся Новой для работы с теми же абсолютными адресами, что и в используемом форте (т.е c 0x00402000).

Добавлена возможность сохранить наработанную форт-систему. Для этого добавлена библиотека (компилируется во врем. словарь, в форт-образ не идёт).

Добавлены слова:
MIN
MAX
SSET? \ a1 a2 ... an n b --- a1 a2 ... an n flag проверить элемент b на вхождение в множество, вернуть флаг (-1 да, 0 нет).

Думаю, пора портировать на 64 бита.
У меня тут как раз fasm с дизассемблером завалялись :)
Обкатаю пару примитивов в фасме для работы с виндой (там fastcall), допишу форт-ассемблер, подготовлю стек. манипулятор и пр. Всё дело проверю в дизассемблере (не очень мне нравится 64бита в интеле, инструкцию порезали гады :dmad; )

По идеям:

Добавить возможность использовать дополнительные таблицы предкомпиляции в словарях. Т.е. сначала шерстятся некие куски памяти в словарях, а потом основная таблица.
Зачем: есть либы (к примеру лок. переменные), существующие в временных словарях. Они ест-но пишут обработчики в основную таблицу. Но стоит врем. словарь освободить, то может случиться ошибка (запрещённый адрес, "не то" значение и проч.
Плюсы: надёжность, легко реализуется (освежил память, потребуется изменить только одно слово).
Минусы: завязка на словарь (чего не хочется).

Компилировать параметрические слова через таблицу предкомпиляции.
Плюсы: логичность, расширяемость (хотя не думаю, что кому-то понадобится определять новое параметрическое слово)
Минусы: ?
А так ли оно надо? Сейчас обработка параметрических слов хоть и кастрирована по сути, но проста. Да и опр. новых парам. слов маловероятно.

По либам:
JSON основная часть работы сделана. Уже может транслировать JSON-файлы, и просто отрезки на этом языке.
Добавлено слово DUMP

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


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1287
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Идея взята из: viewtopic.php?f=25&t=2097

Возможность определять слово в словарь без переключений.

Код:
: TO-VOC:
'
>param @ >R
R@ L>hereFA @ DP   
=
IF
   R> CURRENT KEEP!
   :
ELSE
." error, various codofile!!!" CR -1999 THROW
THEN
;


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

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


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

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

\ каллбек на обратном ходу самостоятельно дропает элементы вызывающего кода
HEADER (free-arg)
ECX POPr \ (p)
EDX POPr \ ~call
0x8D C, 0x24 C, 0x8C C,   \ LEA ESP, [ECX*4] [ESP]
EDX JMPr

\ восстановить значения регистров на обратном ходу
HEADER (call-restore)
EDI POPr
ESI POPr
EBP POPr
EBX POPr
EDX POPr
ECX POPr
RET,


\ стековая диаграмма (возвраты) слова ниже
\ params ~call dw
\ (free-arg) registr (call-restore)
\ подушка параметры+стек (free-R)


HEADER (CALL-BACK)
EAX POPr      \ тут указатель на кол-во параметров И КОД
[EAX] PUSHr   \ ячейки под параметры
0x68 C, ' (free-arg) ,
ECX PUSHr
EDX PUSHr
EBX PUSHr
EBP PUSHr
ESI PUSHr
EDI PUSHr
0x68 C, ' (call-restore) ,      \ RLIT
ECX ESP MOVr-r            \ для сброса стека данных
\ косячный асм потому что
\ EBX 9 CELLS ESP LEAr-im-r      \ указатель для перетаскивания параметров
0x8D C, 0x5C C, 0x24 C, 9 CELLS C,
ESI [EAX] MOVr-r                        \ получаем кол-во ячеек
0x8D C, 0x5C C, 0xB3 C, 0x00 C,   \ LEA EBX, 0 [EBX] [ESI*4]
EDX 20 CELLS MOVr-im                 \ восстанавливаем TLS, если код не в потоке, то ручками
FS: EDI [EDX] MOVr-r

EDX EDX EDX PUSHr PUSHr PUSHr   \ подушка стека данных
] BEGIN [                                    \ лень уже было заморачиваться. потом подправлю
   ESI ESI ORr-r
   JE SHORT Jcc>   
   [EBX] PUSHr
   EBX CELL NEGATE LEA+-      
   ESI DEC
2SWAP
] AGAIN [      
j-close
EBP ESP MOVr-r
EBX CELL EAX LEAr-im-r
EAX [EBP] MOVr-r
EBP CELL LEA+-         \ получаем указатель на код

EDX 100 MOVr-im        \ создаём пространство стека данных
Mark1
   EDX PUSHr
   EDX DEC
Mark1 JNE SHORT  >Jcc

ECX PUSHr                  \ точка сброса пространства стека данных
0x68 C, ' (free-R) ,
EBX JMPr
   
: CALLBACK: \ cells -- in: <bl>
HEADER
['] (CALL-BACK) COMPILE,
,      \ шибко маловероятно
[CALL] ]
;   



Для проверки работоспособности использовались API из темы http://www.fforum.winglion.ru/viewtopic.php?f=25&t=2219

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


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1287
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Хм, может как в Форке тоже тупо указатель на параметры передавать?
Проще и структурней...
Надо подумать над этим

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Nova-forth 1.04
СообщениеДобавлено: Сб июл 21, 2018 22:07 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1287
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Форт-система
Изменения:
Ядро: добавлен обратный вызов
Либы: сравнение строки с маской (что-то похожее)
И по мелочи, почти не писал последний месяц.

Что в планах? "Оторваться" от ядра и наварганить более-менее простой HTTP-сервер, благо, сокеты имеются. MySQL (портировать пример из SPF от ~day) и написать свой собственный вариант.
Юзверьский интерфейс пощупать.

По ядру.
Вычисление размера инлайн-области происходит каждый раз при вызове слова. Думаю, немного упростить этот момент.
К примеру, при пометке слова инлайн-флагом сразу вычисляется его размер, размер укладывается в верхний байт FFA слова.
Чтобы отличать этот вариант от 2 уже существующих предлагается помечать такие слова сразу IMMEDIATE и INLINE флагами. Т.к. одновременно они в компиляции не участвуют, то это будет отличительным признаком.
Примерный код
Код:
: FFA-COMPILE, \ ffa@ xt
....
OVER &INLINE &IMMEDIATE OR AND
IF
SWAP 8 RSHIFT S, EXIT
THEN
....


Это разгрузит часть инлайн-слов и как бонус позволит в эту же степь засунуть константы. Изначально отказывался от инлайн-констант т. к. если она в каком-либо байте имела бы 0xC3 , то это привело бы к ошибкам

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


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

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


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

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


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

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