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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2

Как писать FORTH под сложные системы?
1. "Сохранятели регистров" 33%  33%  [ 2 ]
2. FORTH на ЯВУ 0%  0%  [ 0 ]
3. FORTH-модули 17%  17%  [ 1 ]
4. "Кто главнее?" 50%  50%  [ 3 ]
Всего голосов : 6
Автор Сообщение
 Заголовок сообщения: Re: Forth на ... Это реально? - Попутное голосование
СообщениеДобавлено: Сб июн 06, 2015 06:45 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
gudleifr писал(а):
Еще труднее понять, зачем Вы это сделали.
Ну это очевидно-же. Чтобы писать графические приложения на той Форт-системе о которой ты знаешь все - это раз. Иногда такая нужна, если надо сделать нечто весьма нестандартное, поскольку свою систему легко доработать под это нестандартное. А вот чужую - нет. Чтобы увидеть минимальные для этого алгоритмы - это два. Прочувствовать проблематику этого дела - три. Чтобы пропереться, когда графическое приложение с оконной функцией на Форте (на твоем Форте !) заработает - четыре.


Последний раз редактировалось Ethereal Сб июн 06, 2015 07:07, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на ... Это реально? - Попутное голосование
СообщениеДобавлено: Сб июн 06, 2015 06:52 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
gudleifr писал(а):
Ethereal писал(а):
...
Чтобы показать, что "сохранятели регистров" просты?
Дело не в сохранятелях регистров как в таковых. Интересное в том, что переключение соглашений с Виндозных на Фортовские и обратно делается одним телодвижением. ОДНИМ действием (одним определяющим словом) вешается и переключение на входе и переключение на выходе.


Последний раз редактировалось Ethereal Сб июн 06, 2015 07:07, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на ... Это реально? - Попутное голосование
СообщениеДобавлено: Сб июн 06, 2015 06:54 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
gudleifr писал(а):
Честно говоря, понять, что Вы сделали труднее, чем написать самому.
Так покажите как Вы написали сами. Хочу взглянуть на реализацию, которую было написать проще, чем понять мою. Будет чему поучиться.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на ... Это реально? - Попутное голосование
СообщениеДобавлено: Сб июн 06, 2015 10:57 
Ethereal писал(а):
Так покажите как Вы написали сами. Хочу взглянуть...
Дык, оно уже пять лет лежит все там же:
http://www.gudleifr.h1.ru/g9/g2.txt, как часть FOBOS ([url]http://www.gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\5.FOBOS[/url]).
Там было так (ассемблер мой, он описан в начале упомянутого файла):
Цитата:
( ПРОСТОЕ СЛОВО ДЛЯ ВЫЗОВА ПРОЦЕДУРЫ - CALL . НЕ НАДО ЗАБЫВАТЬ, ЧТО:
1. ПОЧТИ ВСЕ ФУНКЦИИ WINDOWS СТРОЯТСЯ ПО ОБРАЗЦУ PASCAL - ПАРАМЕТРЫ ИЗ
СТЕКА УДАЛЯЕТ САМА ФУНКЦИЯ;
2. СООТНЕСЕНИЕ ПЕРЕЧИСЛЕНИЯ ПАРАМЕТРОВ В СТРОКЕ C И ПОСЛЕДОВАТЕЛЬНОСТИ
КОМАНД PUSH АССЕМБЛЕРА: СЛЕВА-НАПРАВО - СНИЗУ-ВВЕРХ.
3. ВЫЗОВ МНОГИХ Ф-ИЙ ПРИВОДИТ К ВЫЗОВУ ОКОННОЙ ПРОЦЕДУРЫ )
VARIABLE EDI-OLD ( ТЕКУЩАЯ ВЕРШИНА СЛОВАРЯ, КОТОРУЮ Ф-ИЯ МОЖЕТ ИЗМЕНИТЬ)
VARIABLE EBP-OLD VARIABLE EBP-OLD2 ( ВЕРШИНА СТЕКА ВОЗВРАТОВ, КОТОРУЮ Ф-ИЯ ИЗМЕНИТЬ НЕ МОЖЕТ)
CODE CALL ( ..., a -- w)
/WO MOV, BP [DW] EBP-OLD ,
/WO MOV, DI [DW] EDI-OLD ,
CALLEW, B [RG] /DW MOV, B A [RG]
/DW MOV, DI [DW] EDI-OLD , NEXT,
END-CODE

...

\ БУФЕРА ДЛЯ ХРАНЕНИЯ MD-ЕРУНДЫ
64K ALLOCATE DROP CONSTANT WIN-STACK ( ДЛЯ ХРАНЕНИЯ КАДРОВ СТЕКА CALL-BACK-ОВ)
VARIABLE WIN-SP WIN-STACK WIN-SP !
CREATE MSG 28 ALLOT

\ ОБРАМЛЕНИЕ ОКОННОЙ ПРОЦЕДУРЫ
VARIABLE (GETMESSAGE)
USER32 Z" GetMessageA" (FUNCTION) (GETMESSAGE) !
VARIABLE (TRANSLATEMESSAGE)
USER32 Z" TranslateMessage" (FUNCTION) (TRANSLATEMESSAGE) !
VARIABLE (DISPATCHMESSAGE)
USER32 Z" DispatchMessageA" (FUNCTION) (DISPATCHMESSAGE) !
( САМОЕ ТОНКОЕ МЕСТО - СОХРАНЕНИЕ РЕГИСТРОВ и ВОССТАНОВЛЕНИЕ
SI, DI, BP И BX, ИСПОЛЬЗУЕМЫХ MUST DIE ВНУТРИ СЕБЯ)
CODE WIN-CYCLE ( -- w) ( БУДЕТ И ДРУГОЙ ВАРИАНТ - ДЛЯ ИЗВРАЩЕННЫХ ДИАЛОГОВ)
/WO MOV, DI [DW] EDI-OLD , /WO MOV, BP [DW] EBP-OLD ,
1 =H /DW XOR, A A [RG] A PUSHR, A PUSHR, A PUSHR, PUSHW, MSG ,
CALLEW, [DW] (GETMESSAGE) , /DW OR, A A [RG] ?ZR J, 2 =F
PUSHW, MSG , CALLEW, [DW] (TRANSLATEMESSAGE) ,
PUSHW, MSG , CALLEW, [DW] (DISPATCHMESSAGE) ,
JMPSHORT, 1 =B 2 =H B PUSHR, /DW MOV, B [DW] MSG 8 + ,
/DW MOV, DI [DW] EDI-OLD , NEXT, END-CODE
BEGIN-LOAD ASSEMBLER HEX
: CALL-BACK CODE ( КОНЕЧНО НЕ ДЛЯ ВСЕХ CALL-BACK-ОВ, А ТОЛЬКО ДЛЯ ОКОННЫХ)
/WO MOVA, WIN-SP ,
/WO MOV, DI A [8] 10 C, /WO MOV, SI A [8] 14 C,
/WO MOV, B A [8] 18 C, /WO MOV, BP A [8] 1C C, C POPR,
POPM, A [0] POPM, A [8] 4 C, POPM, A [8] 8 C, POPM, A [8] 0C C,
C PUSHR, /SW ADDD, A [RG] 20 C, /DW MOVA, WIN-SP ,
/DW MOV, DI [DW] EDI-OLD , /DW MOV, BP [DW] EBP-OLD ,
SI MOVRDW, >MARK NEXT, >RESOLVE END-LOAD ] ;
END-LOAD
: WIN-H WIN-SP @ 32 - @ ; ( СООБЩЕНИЕ, СОХРАНЕННОЕ В КАДРЕ СТЕКА)
: WIN-MSG WIN-SP @ 28 - @ ;
: WIN-W WIN-SP @ 24 - @ ;
: WIN-L WIN-SP @ 20 - @ ;
CODE WIN-RET
/WO MOV, BP [DW] EBP-OLD ,
A POPR, B PUSHR, ( ВОЗВРАТ ИЗ CALL-BACK)
/WO MOV, DI [DW] EDI-OLD ,
/WO MOVA, WIN-SP , /SW SUBD, A [RG] 20 C,
/DW MOV, DI A [8] 10 C, /DW MOV, SI A [8] 14 C,
/DW MOV, B A [8] 18 C, /DW MOV, BP A [8] 1C C,
/DW MOVA, WIN-SP , A POPR,
RET, END-CODE

\ ОКОННАЯ ПРОЦЕДУРА
USER32 WIN-FUNC" DEFWINDOWPROC DefWindowProcA"
USER32 WIN-FUNC" POSTQUITMESSAGE PostQuitMessage"
2 CONSTANT WM_DESTROY
: RECEPTOR ( <word> ... <;> w, wa, wa --)
CREATE ROT , SWAP , , ] ;
\ ПОЗДНЕЕ СВЯЗЫВАНИЕ РЕЦЕПТОРОВ
: RECEPTOR+ ( брат, узел --) 4 + ! ;
DOER !DESTROY
: SUBRECEPTOR+ ( сын, узел --) 8 + ! ;
( ПОСЛЕДНИЕ В СПИСКЕ ПРОВЕРЯЕМЫХ СООБЩЕНИЙ - WIN-DESTROY И WIN-DEFAULT)
0 0 0 RECEPTOR WIN-DEFAULT WIN-L WIN-W WIN-MSG WIN-H DEFWINDOWPROC CALL ;
WM_DESTROY WIN-DEFAULT 0 RECEPTOR WIN-DESTROY !DESTROY 0 POSTQUITMESSAGE CALL DROP 0 ;
VARIABLE WIN ( ПЕРЕМЕННАЯ СОДЕРЖАЩАЯ АДРЕС КОРНЯ ДЕРЕВА РАЗБОРА СООБЩЕНИЙ)
CALL-BACK WIN-PROC WIN-MSG WIN @ RECEPTING WIN-RET ; ( ОКОННАЯ Ф-ИЯ)

Основные отличия от Вашей реализации (насколько понял):
* использование дополнительного стека для регистров (чисто для наглядности),
* сохранение туда же параметров оконной ф-ии (так удобнее в больших и сложных оконных ф-иях),
* больше внимания уделено возможности рекурсивного вызова оконной ф-ии (и связи "вызывающих" и "вызываемых" FORTH-кусков),
* вместо CASE win-сообщения разбираются конечным автоматом - RECEPTING,
* в систему "сохранятелей" включен и цикл обработки сообщений.

Думаю, Вам тоже проще было написать самому, чем разобраться в написанном мной. Поэтому приводить подобные "примеры" бесполезно. Проще указать на общую идею, чему, собственно, и была посвящена тема. Сравнению идей: что во что пихать и насколько глубоко.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на ... Это реально? - Попутное голосование
СообщениеДобавлено: Сб июн 06, 2015 15:29 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
gudleifr писал(а):
Думаю, Вам тоже проще было написать самому, чем разобраться ... Проще указать на общую идею
Так идея то оценивается только после взгляда на реализацию. Потому-что на словах идея может выглядеть и замечательно. А на практике реализовываться так коряво, что ясно, что она была неудачной.

WIN-RET ;
мне у Вас не понравилось. Я сделал выход из оконной функции по ; как и у любого определения не создавая лишних сущностей и слов. Только одно определяющее слово для оконных функций и все. А вот идея разбора сообщений конечным автоматом заинтриговала. Что-то в этом чувствуется могучее. Буду сейчас мучить мозг как она работает. Надо именно понять чужую мысль. Не всегда собственные мысли лучше. Жаль, что определения слова RECEPTING что-то не видно.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на ... Это реально? - Попутное голосование
СообщениеДобавлено: Сб июн 06, 2015 15:37 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
А, кажется нашел где это все лежит.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на ... Это реально? - Попутное голосование
СообщениеДобавлено: Сб июн 06, 2015 15:44 
Ethereal писал(а):
Так идея то оценивается только после взгляда на реализацию.
Дык, сами писали про "одно телодвижение". Я рассчитывал на то, что большинство ответивших понимает, о чем идет речь.
Ethereal писал(а):
WIN-RET ;
мне у Вас не понравилось.
Да, можно засунуть ее вызов в стек возвратов, как у Вас. Сейчас я склонен "вторичную FORTH-машину, разбирающую WIN-сообщения" еще более логически обособить.
Ethereal писал(а):
Жаль, что определения слова RECEPTING что-то не видно.
Оно в http://localhost/g9/g2asm.txt, там же используется в NUMBER и для разбора командной строки. Описано в [url]http://localhost/cgi-bin/pilo.cgi?FL=../WWW/g9.txt&IS=\5.FOBOS[/url], параграф "ОБ ОБРАБОТЧИКАХ СООБЩЕНИЙ".


Вернуться к началу
  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2

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


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

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


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

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