Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср дек 19, 2018 10:15

...
Google Search
Forth-FAQ Spy Grafic

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




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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 678
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
И ещё по поводу оптимизации.
Оптимизатор действует подобно вычислению выражений в лиспе

[code=лисп]
(+ 5 (+ 2 3) )

[/code]

[code=форт]
2 3 + 5 +
Или же схематично
( ( 2 3 + ) 5 + )

[/code]

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


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 678
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Нова, исходники, либы, оптимизатор

В настоящий момент пишу всякие полезные вещи для Новы: оптимизатор, работа со строками, ассемблер.

Всё в архиве.
Оптимизатор кода через таблицу предкомпиляции больше всего "достаётся" операциям со стеком возвратов и ветвлениям (IF и WHILE).
Т.к. оптимизатор будет расти, то в шаблонички можно зашить условную ООПу т.е. указать условие-фрагмент, которое будет определено позднее. Ещё не использовал это в коде, но наверно придётся.

Строки располагаются в стеке возвратов, либа не окончена. В отличие от версии для СПФ, код полностью высокоуровневый. Приведением череды POSTPONE-ов в божеский вид занимается оптимизатор, если его подключить.

Развитие Новы:
Планируется при запуске читать файл инициализации форта, чтобы что-то подключить заранее, а также чтение командной строки.

Изменить работу параметрических слов - чтоб через CREATE-CODE работали. Зачем? Перераспределить нагрузку на компилятор.
Пример опр. слова:
Код:

: (DOES>CONST)
@ STATE @ IF LIT,
;

: CONSTANT
HEADER
['] CREATE-CODE COMPILE,
['] (DOES>CONST) ,
,
IMMEDIATE
;



В итоге переменные типа CONSTANT VARIABLE VALUE станут компилирующими словами немедленного исполнения.

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


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 678
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Доделал работу над строками в стеке, также сделал либу для лок. переменных.

Теперь займёмся портированием СПФ-ских либ. К примеру для работы с COMом.

Оптимизатор тоже потихоньку развивается - обрастает шаблончиками.

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


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 928
Благодарил (а): 3 раз.
Поблагодарили: 33 раз.
Victor__v писал(а):
Теперь займёмся портированием СПФ-ских либ.

Не рассматривался ли вариант ещё и возможности совместимости системы с Win32Forth?

P.S. "Заход" на совместимость запуска Win32Forth кода, в рамках SPF4, уже предпринимался ранее.


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 678
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
KPG писал(а):
Victor__v писал(а):
Теперь займёмся портированием СПФ-ских либ.

Не рассматривался ли вариант ещё и возможности совместимости системы с Win32Forth?

P.S. "Заход" на совместимость запуска Win32Forth кода, в рамках SPF4, уже предпринимался ранее.


С этой форт-системой знаком на уровне "она есть".
Что предлагается портировать из WinForth ?
Насчёт совместимости вопрос достаточно интересный...
В планах пока портировать и написать:
COM, работа с мускулем, поддержка HTTPS, плав. точка, функции хеширования, сортировки

Ну и гуй, когда калбеки разработаю.

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


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 928
Благодарил (а): 3 раз.
Поблагодарили: 33 раз.
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 "участием" может ещё кто что нибудь добавит. :)

Какие дальнейшие выводы? :shuffle;


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 678
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Посмотрим.
В приоритете собственные наработки и перенос СПФ-ских творений, коие успели пригодится.

Нова-форт: исходники, либы, оптимизатор

В архиве работает: стек. манипулятор (5.1), лок. переменные, создание строк на стеке возвратов, ассемблер и по мелочи.

Оптимизатор работает, пока в процессе. Потом засуну его во временный словарь.

Если его подключить заранее, то можно неплохо съэкономить в некоторых местах. К примеру в R:STR выделение памяти на стеке -64 RP@ + RP! вырождается в одну инструкцию.

По Нове.
Изменил версию: 1.01
Причина: поменял механизм компиляции слов, сделал чуть логичней. Появился служебный флаг "я параметрическое слово". Как несложно догадаться, им автоматически метятся константы, векторы, переменные и пр. Плюс 4-5 мелких исправлений. не все их документировал. К примеру слово RF^ стало инлайн-словом, как и планировалось.

Размышления:
Использовал в оптимизаторе своеобразный аналог CASE. Фактически, обёртка произвольной цепочки IF-ELSE
Загвоздка в том, что на это меня надоумило сообщение фиг знает откуда у суперскобке в Лиспе :D
Впрочем, вещь полезная. Чувствую оптимизатор буду портянками писать.

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


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 678
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Исходники Новы

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

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


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 678
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Код плаа-хой
строки типа 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-значения.

Стоит ли ещё разбирать строки с экспонентой?
Стоит ли ещё дополнительно заморачиваться поддержкой исключений на плав. точке?

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


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 678
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Хочу обсудить такую идею.
Вступление:
В СПФ развёрткой параметрических слов и компиляцией слова 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

Что думаете по этому поводу?

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


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4956
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
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

то есть несколько полей кода.
?

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


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 678
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
mOleg писал(а):
Victor__v писал(а):
Возможное решение проблемы:

а чем классика не угодила?
(по сути решение стандартное, и, хотя
пример из форка моего, который я таки классикой не считаю 8)
но, надеюсь, понятное)
<Всякий разный rод>
то есть несколько полей кода.
?


Честно сказать, не додумался. :P
А по факту отдать поведение с ёнтими словами самому параметрическому слову идея хорошая.
К тому же при компилировании форт-системы это можно сделать уже легко.

Но как красивей поступить с развёрткой параметрических слов?
Чтоб к примеру константа в коде сразу превращалась число, а юзер-переменная в LEA EAX, 4 [EDI]
У меня параметрические слова метятся флагами и потом отдельно развёртываются спец. словом.

Думал над тем, чтобы отдать это на откуп самим словам, но это приведёт к созданию ссылок вперёд, чего бы не хотелось. Т.к. константы юзвери и переменные начинаются использоваться почти сразу, а компилирующие слова несколько позже. Груба говоря все слова с -CODE упразднять, использовать CREATE и DOES> с компилирующими словами, которых нет в начале форт-образа. Без ссылок вперёд не обойтись. А этого бы не хотелось.

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


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 678
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Как планирую решить проблему с масштабированием 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 вычисляют адрес параметрического слова и вычленяют из него при наличии соответствующие обработчики.

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


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 678
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
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а купировать. т.к. мой вариант всё таки требует кол-во параметров, а СПФ-ский нет

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


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 678
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Написал обёртку под обратный вызов ( callback ).
Подскажите, на какой функции легче всего затестить обёртку на работоспособность?

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


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

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


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

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


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

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