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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Как называется такой приём?
СообщениеДобавлено: Пн сен 10, 2018 19:25 
Не в сети

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

Код:
\ для удобства можно вообще без него обойтись
: 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>

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как называется такой приём?
СообщениеДобавлено: Пн сен 10, 2018 23:38 
Не в сети

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как называется такой приём?
СообщениеДобавлено: Вт сен 11, 2018 00:02 
Не в сети

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

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как называется такой приём?
СообщениеДобавлено: Пт сен 21, 2018 12:55 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 521
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 22 раз.
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 писал(а):
Где можно применять?
так-что сам еще до самодостаточности свою мысль недовел.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как называется такой приём?
СообщениеДобавлено: Пт сен 21, 2018 16:03 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 651
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Хм,
обозначенный мной приём используется в моём форте (Nova-forth)
Мне просто стало лень писать набор слов с тем же смыслом, но работающей с немного другим форматом данных и со своими заморочками.
Поэтому додумался в изначальный набор слов добавить CREATE-CODE с does> частью и слова при этом ни разу не создающие.
В итоге я записал после CREATE-CODE параметры (основные функции для работы со штатным форматом) которые вызывались из DOES>-части.

А чтобы использовать другой формат, написал типа-обёртку, как в примере.

Посмотреть где у меня так сделано можно, скачав Nova-forth и там в файлике src-self/forth/mid/event-table.f

И как этот рабочий выверт с намёком на ООП и полиформизм назвать?
Примеры применений тоже были бы интересны.

А так это неплохая фишка. добавить доп. возможность к слову.

Есть ещё одна идейка с этим но она ближе к бектрекингу и не совсем по теме сабжа

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

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


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

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


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

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