Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт окт 17, 2017 19:02

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу Пред.  1, 2, 3, 4
Автор Сообщение
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Вс авг 21, 2016 22:37 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 322
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 10 раз.
Hishnik писал(а):
Механизм взаимодействия следующий. Программа на Lazarus читает переменные форт-машины и на основании прочитанного выполняет тот или иной метод для заранее подготовленных компонентов.


Получается, что форт выполняется в отдельном потоке или как то по другому? Как Lazarus узнает, какие переменные форта надо сканировать? Я интерактивно определяю в форте буфер, например для строки и хочу, что бы на форме динамически отразился QLineEdit и его данные были связаны с только что созданным буфером. Не понимаю, как это синхронизируется, если у форта нет возможности самому создавать графические объекты, типа QLineEdit


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Вт авг 23, 2016 00:45 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6076
Благодарил (а): 13 раз.
Поблагодарили: 96 раз.
mgw писал(а):
Получается, что форт выполняется в отдельном потоке или как то по другому?

Сейчас для исполнения Форта подключен quark.dll в режиме виртуальной машины со скрытым экраном. Стек, память и образ экрана доступны вызывающей программе. Второй вариант - виртуальна машина с шитым кодом, реализованная прямо в Lazarus. В этом случае снижается производительность (что естественно), однако появляется возможность более тесного взаимодействия двух подсистем. Главное неудобство - необходимость дожидаться завершения интерпретации переданной строки в quark.dll. Если там много команд, то они встают в очередь, и начать действия по модификации интерфейса можно только после завершения работы по интерпретации ВСЕЙ строки. С шитым кодом можно автоматически перемежать слова, управляющие интерфейсом, вызовами соответствующих обработчиков (и заодно прокачкой сообщений Windows).

mgw писал(а):
Как Lazarus узнает, какие переменные форта надо сканировать?

Сам и определяет их :) И заодно слова, создающие компоненты. После выполнения строк вида VARIABLE ACTION_TYPE работает цикл вида (фрагмент):

Код:
  action_type := Forth('ACTION_TYPE @');
  id :=  Forth('COMPONENT_TYPE @');
  index :=  Forth('COMPONENT_INDEX @');

  case action_type of
    1 : CreateComponent(id);


Функция Forth выполняет строку и возвращает число с вершины стека после ее выполнения (и далее сама делает DROP). То есть можно средствами Форта узнать, что он там себе насоздавал. Соответственно, слово BUTTON записывает 1 в action_type, код "кнопка" в COMPONENT_TYPE и т.д. Другие действия (например, смена координат или размеров) - другие коды action_type. Это не универсально, однако именно тот вариант, который я планирую проработать для определенного круга задач. Форт очень удобен в плане быстрой смены алгоритмов, последовательностей команд и т.п., однако визуальные компоненты тоже нужны. Заодно и картинка - набрали текст, нажали F9, текст выполнился на Форте. В левой части экрана изначально ничего не было.


Вложения:
lazarus002.png
lazarus002.png [ 13.61 Кб | Просмотров: 2417 ]
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Вт авг 23, 2016 12:24 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 322
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 10 раз.
Теперь понятно. Фактически нужен высокоуровневый язык описания форм и действий с ними. Я предпринимал подобную попытку, по изготовлению такой задачи. Тонкий момент: пришлось ввести специальное хард-слово форта, которое насильно останавливает интерпретацию и возвращает управление основной среде (в моём случае С++). Это было своеобразной синхронизацией, гарантирующей что форт закончил вычисления. Еще необходимо хард-слово, DoEvents ( так в VBA оно называется ), что бы иногда передавать управление ОС, для отрисовки своего интерфейса


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Ср авг 24, 2016 00:24 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6076
Благодарил (а): 13 раз.
Поблагодарили: 96 раз.
mgw писал(а):
Фактически нужен высокоуровневый язык описания форм и действий с ними.

В целом да. В идеале это описание вида
Код:
100 200 SET-XY
70 20 SET-SIZE
BUTTON
' MYWORD ASSIGN-ACTION


Этот код должен связать кнопку со словом MYWORD.

Такой подход может не ограничиваться только визуальными компонентами. Например, влезать внутрь TCP/UDP обмена в целом не надо, а вот описать на Форте последовательность обработки пакетов вполне можно.

mgw писал(а):
Тонкий момент: пришлось ввести специальное хард-слово форта, которое насильно останавливает интерпретацию и возвращает управление основной среде (в моём случае С++). Это было своеобразной синхронизацией, гарантирующей что форт закончил вычисления. Еще необходимо хард-слово, DoEvents ( так в VBA оно называется ), что бы иногда передавать управление ОС, для отрисовки своего интерфейса

Я описал этот механизм в предыдущем сообщении. Идеальный вариант - когда слово органично встроено в код и не требуется его принудительная компиляция.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Ср авг 24, 2016 17:18 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
mgw писал(а):
Фактически нужен высокоуровневый язык описания форм и действий с ними.
Тоже задумывался над этим. Есть желание пообсуждать?

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Ср авг 24, 2016 17:21 
Не в сети
Аватара пользователя

Зарегистрирован: Чт дек 31, 2009 18:36
Сообщения: 1961
Откуда: Питер
Благодарил (а): 13 раз.
Поблагодарили: 32 раз.
in4 писал(а):
Есть желание пообсуждать?
См. FOBOS.
Например, там: http://www.gudleifr.h1.ru/g90.html
Из последнего - http://fforum.winglion.ru/viewtopic.php?p=42297#p42297

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Пт авг 26, 2016 01:23 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6076
Благодарил (а): 13 раз.
Поблагодарили: 96 раз.
Код:
LABEL

: R0 0 " 123" SET-LABEL-CAPTION ;
: R1 0 " 456" SET-LABEL-CAPTION ;

100 200 SET-XY BUTTON
300 300 SET-XY BUTTON

0 " R0" SET-BUTTON-ACTION
1 " R1" SET-BUTTON-ACTION


Итого на форме метка (label) и две кнопки. Нажатие каждой из кнопок устанавливает на метке свою надпись. Это еще один принципиальный момент, который удалось прояснить (спасибо true-grue за идею), с взаимным увязыванием сообщений от компонентов и слов Форта. Если продолжить эту линию, то каждому компоненту можно назначить строку Форта на каждое событие. Как можно видеть, никакого специального слова-синхронизатора не используется.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Пт авг 26, 2016 11:35 
Не в сети
Аватара пользователя

Зарегистрирован: Чт дек 31, 2009 18:36
Сообщения: 1961
Откуда: Питер
Благодарил (а): 13 раз.
Поблагодарили: 32 раз.
Hishnik писал(а):
Код:
100 200 SET-XY BUTTON
300 300 SET-XY BUTTON

WIN-API уже имеет "скриптовый язык" для описания подобной фигни - описатель ресурсов/диалогов. Проще написать для него FORTH-оболочку, чем изобретать свой.
Код:
RESOURSE-RESET
85 229 0 0 HEX 80C800C0 DECIMAL >DIALOG EMPTY! EMPTY!
S" Mouse Hook Demo" UNISTR!
8 RESOURSE! S" MS Sans Serif" UNISTR! >CONTROL
-1 67 214 7 7 HEX 50000007 DECIMAL S" Window Information" BUTTON-IS
-1 8 39 22 21 HEX 50020000 DECIMAL S" Class name:" STATIC-IS
1000 12 139 20 69 HEX 50810880 DECIMAL EDIT-IS
-1 8 26 37 33 HEX 50020000 DECIMAL S" Handle:" STATIC-IS
1001 12 77 36 69 HEX 50810880 DECIMAL EDIT-IS
-1 8 46 52 13 HEX 50020000 DECIMAL S" Window Proc:" STATIC-IS
1002 12 77 51 69 HEX 50810880 DECIMAL edit-is
1004 14 50 35 159 HEX 50010001 DECIMAL S" &Hook" BUTTON-IS
1005 14 50 50 159 HEX 50010000 DECIMAL S" E&xit" BUTTON-IS
DROP

Конечно, шестнадцатеричные можно заменить на что-то осмысленное, но мне было лень разбираться.

Hishnik писал(а):
Это еще один принципиальный момент, который удалось прояснить (спасибо true-grue за идею), с взаимным увязыванием сообщений от компонентов и слов Форта. Если продолжить эту линию, то каждому компоненту можно назначить строку Форта на каждое событие. Как можно видеть, никакого специального слова-синхронизатора не используется.
Требуется, только ее скрыли от программиста. Повторю, гораздо проще поместить "акции" в словарь FORTH-машины, ПОТОК которой завязан на обработку событий.
Вот пример аналога WORDS для такой машины (звездочками, я, по лени, заменил табуляцию). Мы с коллегой Ethereal как-то подробно обсуждали этот вопрос, но, к сожалению, его "смодерировали" во флуд.


Вложения:
Clipboard.jpg
Clipboard.jpg [ 15.92 Кб | Просмотров: 2258 ]

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Вс сен 25, 2016 14:31 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 322
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 10 раз.
может и не в тему .... Тут провел натурное испытание forth (написан на D asm и может быть подключен в виде DLL) и QtE5 (моя адаптация Qt-5 к языку D).
https://vk.com/vk_dlang?z=photo-471951_431046872%2Fwall-471951_1861

https://github.com/MGWL/QtE5


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

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


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

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


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

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