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

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - моя форт-система, которая потихоньку пишется
Автор Сообщение
  Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется  Ответить с цитатой
mOleg писал(а):
Victor__v писал(а):
Возможное решение проблемы:

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


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

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

Думал над тем, чтобы отдать это на откуп самим словам, но это приведёт к созданию ссылок вперёд, чего бы не хотелось. Т.к. константы юзвери и переменные начинаются использоваться почти сразу, а компилирующие слова несколько позже. Груба говоря все слова с -CODE упразднять, использовать CREATE и DOES> с компилирующими словами, которых нет в начале форт-образа. Без ссылок вперёд не обойтись. А этого бы не хотелось.
Сообщение Добавлено: Вт апр 24, 2018 21:33
  Заголовок сообщения:  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

то есть несколько полей кода.
?
Сообщение Добавлено: Вт апр 24, 2018 20:20
  Заголовок сообщения:  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

Что думаете по этому поводу?
Сообщение Добавлено: Пн апр 23, 2018 19:54
  Заголовок сообщения:  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-значения.

Стоит ли ещё разбирать строки с экспонентой?
Стоит ли ещё дополнительно заморачиваться поддержкой исключений на плав. точке?
Сообщение Добавлено: Вс апр 15, 2018 19:31
  Заголовок сообщения:  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
Сообщение Добавлено: Сб апр 07, 2018 12:18
  Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется  Ответить с цитатой
Посмотрим.
В приоритете собственные наработки и перенос СПФ-ских творений, коие успели пригодится.

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

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

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

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

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

Размышления:
Использовал в оптимизаторе своеобразный аналог CASE. Фактически, обёртка произвольной цепочки IF-ELSE
Загвоздка в том, что на это меня надоумило сообщение фиг знает откуда у суперскобке в Лиспе :D
Впрочем, вещь полезная. Чувствую оптимизатор буду портянками писать.
Сообщение Добавлено: Вт мар 27, 2018 22:59
  Заголовок сообщения:  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 "участием" может ещё кто что нибудь добавит. :)

Какие дальнейшие выводы? :shuffle;
Сообщение Добавлено: Сб мар 24, 2018 18:11
  Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется  Ответить с цитатой
KPG писал(а):
Victor__v писал(а):
Теперь займёмся портированием СПФ-ских либ.

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

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


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

Ну и гуй, когда калбеки разработаю.
Сообщение Добавлено: Сб мар 24, 2018 17:43
  Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется  Ответить с цитатой
Victor__v писал(а):
Теперь займёмся портированием СПФ-ских либ.

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

P.S. "Заход" на совместимость запуска Win32Forth кода, в рамках SPF4, уже предпринимался ранее.
Сообщение Добавлено: Сб мар 24, 2018 16:57
  Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется  Ответить с цитатой
Доделал работу над строками в стеке, также сделал либу для лок. переменных.

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

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

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

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

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

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

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

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

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



В итоге переменные типа CONSTANT VARIABLE VALUE станут компилирующими словами немедленного исполнения.
Сообщение Добавлено: Сб мар 17, 2018 14:32
  Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется  Ответить с цитатой
И ещё по поводу оптимизации.
Оптимизатор действует подобно вычислению выражений в лиспе

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

[/code]

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

[/code]
Сообщение Добавлено: Вс мар 11, 2018 19:29
  Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется  Ответить с цитатой
Нова-форт

Найдены мелкие косяки.
слово TO
предкомпиляция
Переписана развёртка USER-слов

В случае ошибки выводится дополнительная информация. Т.к. Нова это форт-система слегка откатная т.е. восстанавливающая своё состояние, то и дополнить информацию об вылете без правок исходного кода проблематично. По этому выводится:
код ошибки,
последнее определённое слово,
система счисления,
значение STATE

В настоящее время работаю над оптимизатором для Новы.
Добавлен ряд правил.
Также оптимизатор ведёт лог.
Для теста работоспособности подопытным кроликом является стековый манипулятор. ~ER\OPT\TEST.F

В настоящий момент код становится меньше на 1/12 . Наибольшую долю оптимизаций, на мой взгляд, составляют оптимизации связанные IF.
После прогона и теста оптимизатора, планируется запихнуть его во временный словарь.
Сообщение Добавлено: Вс мар 11, 2018 19:20
  Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется  Ответить с цитатой
В настоящий момент пишу оптимизатор для своей Новы, работающий через таблицу предкомпиляции.
Всё же решил создать некоторое подобие правил оптимизации.
На мой взгляд получилось красивенько :)

Код:

~er\asm\assembler.f
ALSO ASSEMBLER

: (ENT:-CODE) R> ;

\ для задания условий-фрагментов кода
\ ENT: 'point -- ??? 'point -1| 0
: ENT:
HEADER
['] (ENT:-CODE)  COMPILE,
-1 STATE !
;

\ перебрать все условия-фрагменты и выдать сопутствующие данные, указатель на уже прошаренный код
\ и шаг, на котором условие не сработало или последний шаг
\ xt: 'point -- ??? 'point -1| 0
: >OPT \ xt1 xt2 .. xn n -- ??? 'point iter
N>R
HERE >R    \ 'point
0 >R         \ iter   
BEGIN
2 RPICK WHILE
1 RPICK
3 RPICK EXECUTE
0= IF 2R> \ 'point iter
      R> CELLS RP@ + RP! EXIT
   THEN
RP@ 1+!
RP@ CELL+ !

2R> R> 1- RDROP >R 2>R
REPEAT
2R>
RDROP
;

\ тут условия фрагменты
ENTITY.F

\ правила
EVENTS\ARIFMETIC.F
EVENTS\MEMORY.F



Одно из условий
Код:
CREATE (NUM)
EBP CELL NEGATE LEA+-
[EBP] EAX MOVr-r
EAX 0 MOVr-im

HERE (NUM) - CONSTANT (NUM).S.all
(NUM).S.all CELL- CONSTANT (NUM).S.code


ENT: NUMBER \ 'point -- num 'point -1|0
>R \ point
R@ (NUM).S.all - (NUM).S.code
(NUM) (NUM).S.code COMPARE
IF RDROP 0 EXIT THEN

R@ (NUM).S.all - (NUM).S.code +
@
R> (NUM).S.all -
-1
;



И пример правила

Код:
\ оптимизация операции над двумя числами
: arifmetic_opt2
SP@ >R
NUMBER NUMBER 2 >OPT
2 <> IF R> SP! EXIT THEN
RDROP
DP !
ROT
EXECUTE LIT,
DROP
&IMMEDIATE ['] NOOP
EVENT-EXIT
;

' +       ' -       ' /       ' *
' MOD    ' OR       ' XOR    ' AND

8 S" AR_2" NEW-GROUP
' arifmetic_opt2 S" AR_2" ->EVENT-GROUP



Попробовал оптимизировать сам оптимизатор по исходному коду. Не получилось :o. Видите ли, таблица предкомпиляции была написана так, чтобы отлавливать дубляжи и выдавать исключения при их обнаружении. В общем, с таблицей предкомпиляции "перестарался" 8)
Сообщение Добавлено: Ср мар 07, 2018 21:55
  Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется  Ответить с цитатой
_KROL писал(а):
Хм, не хватает только
Код:
1 Stdcall: ExitProcess KERNEL32.DLL
: BYE 0 ExitProcess ;
:)

Никогда не пользовался этим словом. В принципе, без него жить можно. Но согласен, что немного не хватает :)
Сообщение Добавлено: Вс мар 04, 2018 22:13

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


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