Forth
http://fforum.winglion.ru/

Как называется такой приём?
http://fforum.winglion.ru/viewtopic.php?f=2&t=3195
Страница 1 из 1

Автор:  Victor__v [ Пн сен 10, 2018 19:25 ]
Заголовок сообщения:  Как называется такой приём?

Как рассказать не знаю, покажу кодом

Код:
\ для удобства можно вообще без него обойтись
: DOES:
HERE LAST-LFA L>CFA @ >param ! \ присвоить указатель месту DOES> в CREATE-слове
-1 STATE !
;

\ подменить изначальные данные, которые использует DOES.
: USING    \ ?? addr xt -- ??
>param @   \ перейти к месту DOES>
>R        \ можно и EXECUTE, но так меньше трасса на стеке возвратов. м. б. и критично через EXECUTE   
;

\ пример

CREATE CELL+ 4 , DOES: @ + ;

VARIABLE TST 2 TST !
10 CELL+ .
10 TST ' CELL+ USING .
10 STATE ' CELL+ USING .


Так вот, товарищи знатоки, как такой приём подмены массива данных для кода после DOES> называется?

Где можно применять?
Связку CREATE .... DOES: можно применять, к примеру, для опр. слов должных работать как в штатном так и в доп. режимах
Как вариант, пригодится для задания портов по умолчанию и функций обработки для всяких-там работ с сетью и БД.
Надо быстренько заменить? Не вопрос, формируем свой массив и подсовываем за DOES>

Автор:  KPG [ Пн сен 10, 2018 23:38 ]
Заголовок сообщения:  Re: Как называется такой приём?

Victor__v писал(а):
Так вот, товарищи знатоки, как такой приём подмены массива данных для кода после DOES> называется?
Где можно применять?

Техника векторизованного DOER|MAKE из Броуди2 Не? :)

Автор:  Victor__v [ Вт сен 11, 2018 00:02 ]
Заголовок сообщения:  Re: Как называется такой приём?

KPG писал(а):

Тама обычный вектор, а ту-то векторами и не пахнет.

Автор:  Ethereal [ Пт сен 21, 2018 12:55 ]
Заголовок сообщения:  Re: Как называется такой приём?

Victor__v писал(а):
Так вот, товарищи знатоки, как такой приём подмены массива данных для кода после DOES> называется?
Да никак.
Твой прием можно обобщить от залетания управлением в точку сразу после DOES> , до залетания управлением в любую точку в середине шитого кода в определении любого другого слова и выполнение хвоста этого определения вплоть до ;
Вопрос всегда ли такое будет работать, на любом-ли шитом коде ?

Вон, я проверил на своем дурном Фиг-32 с косвенным шитым кодом :
Код:
Win-32 FIG-Forth Alpha (C)Ethereal
0 VARIABLE POINT
Ok
: ZZZ ." BLABLA" [ HERE POINT ! ] ." BLIBLI" ;
Ok
: TEST POINT @ >R ;
Ok
TEST
BLIBLI Ok
BYE
Ну залетание в середину шитого кода слова и довыполнение хвоста определения работает. Ну можно использовать в момент воспаления фантазии. Просто одна из возможностей, которую можно наверно превратить в самодостаточную смыслом идею, но ты-же сам спрашиваешь
Victor__v писал(а):
Где можно применять?
так-что сам еще до самодостаточности свою мысль недовел.

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/