Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вс апр 22, 2018 16:13

...
Google Search
Forth-FAQ Spy Grafic

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




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

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

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

вот что получилось:
Код:
\ преобразовать строку.
\ вернуть 2 числа как дробь ( 12.34 -> 1234 / 1000 )
\ и флаг успеха 
: str->fl \ A U -- N/ /N TRUE| FALSE
S" ," SPLIT
0= IF
   S" ." SPLIT
   0= IF 2DROP FALSE EXIT THEN
THEN

\ S" 12,34" --> S" 12" S" 34"
STR>NUM THROW >R
\ цикл: найти нужное 10 в степени, дабы поделить потом
   10
   BEGIN
   R@ OVER > WHILE
   10 *
   REPEAT
   >R

STR>NUM THROW
R@ * 1 RPICK +
R>
RDROP
TRUE
;

\ обработчик
: NOTFOUND.,
str->fl
FALSE = IF 0 EXIT THEN
SWAP
int>F \ перенести целое число (32) на стек float
F/int  \ поделить число на стеке float  на целое число, что на стеке данных
STATE @
IF
FLIT,
THEN
-1
;



Часть слов для работы плав. точки написана: операции, "константы" и пр. У меня пока пашет асм, буду всё в коды переводить.
Осталось научиться печатать 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
  Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется  Ответить с цитатой
Нашёл: \.\~er\stacker\
Сообщение Добавлено: Вс мар 04, 2018 19:08
  Заголовок сообщения:  Re: моя форт-система, которая потихоньку пишется  Ответить с цитатой
Хм, не хватает только
Код:
1 Stdcall: ExitProcess KERNEL32.DLL
: BYE 0 ExitProcess ;
:)
А где у тебя стековый манипулятор? А то что-то не могу найти :shuffle;
Сообщение Добавлено: Вс мар 04, 2018 18:58
  Заголовок сообщения:  Re: моя форт-система, которая НАПИСАНА  Ответить с цитатой
Всё :< форт-система написана.
Две недели наскоками мучился с PE-форматом.
Наконец-то удалось откомпилировать и запустить.
Тут полностью всё что можно в том числе и мои наработки под СПФ. Много весит.
Полный набор

Тут форт и мои либы под него (не все из них закончены).
Форт-система и наработки

А тут только форт-система для желающих поиграться.
Исполняемый файл

Сама форт-система ( её зовут NOVA ) весит примерно 33 килобайта. 12 килобайтов в EXE оставлено под расширение системы.

В самих исходниках есть мусорные файлы, попрошу лопатой не бить :)
Сообщение Добавлено: Вс мар 04, 2018 11:13

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


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