Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 01:22

...
Google Search
Forth-FAQ Spy Grafic

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




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

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


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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
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 Кб | Просмотров: 21272 ]
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Вт авг 23, 2016 12:24 
Не в сети

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
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 
in4 писал(а):
Есть желание пообсуждать?
См. FOBOS.
Например, там: http://www.gudleifr.h1.ru/g90.html
Из последнего - http://fforum.winglion.ru/viewtopic.php?p=42297#p42297


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Код:
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 
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 Кб | Просмотров: 21113 ]
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Вс сен 25, 2016 14:31 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
может и не в тему .... Тут провел натурное испытание 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


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Lazarus ещё используется автором топика?
а, то зашёл на форум сайта freepascal.ru и не увидел какого то "применения" Форта + Паскаль в связке с Lazarus.

Ну, не обидно ли? :)

P.S. Хотя, какие то Форт на Паскаль, находятся и в проектах на Github.
А, то тут уже и из давно открытых и забытых исходников DN (Dos Navigator - оболочка типа Far) почти перенесли под Linux DN2L

Ради интереса собрал версию исходников DN 6.40 OSP для Windows (что интересно, собрались без ошибок с помощью Virtual Pascal 2004г. и заработали в Win10)

На github опубликован Linux порт Dos Navigator с открытым кодом (обсуждение новости на площадке ЛОР)

Топик на форуме NDN - закрытых последних "актуальных" версий DN


Последний раз редактировалось KPG Пт окт 30, 2020 13:33, всего редактировалось 1 раз.

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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Qt помощнее и лучше поддерживается.


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
В целом Lazarus 2.0 поинтереснее. OpenGL улучшили (не падает при попытке изменить размер окна в процессе отрисовки сцены), доступна многопоточная работа. Как и в случае Qt, основной вопрос лежит в плоскости "полезны ли компоненты Lazarus", а Форт выступает инструментом обеспечения интерактивности.


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Да, OpenGL + потоки.

Код:
unit uni_cat_main;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, AsyncProcess,
  ExtCtrls, OpenGLContext, gl;

type

  { TForm1 }

  TForm1 = class(TForm)
    AsyncProcess1: TAsyncProcess;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure GLboxPaint(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    GLBox: TOpenGLControl;
  public
  end;

  TForthThread = class(TThread)
  private
    fStatusText : string;
  protected
    procedure Execute; override;
  public
    Constructor Create(CreateSuspended : boolean);
  end;


var
  Form1: TForm1;
  ForthThread : TForthThread;

  red : real;

implementation

{$R *.lfm}

constructor TForthThread.Create(CreateSuspended : boolean);
begin
  inherited Create(CreateSuspended);
  FreeOnTerminate := True;
end;

procedure TForthThread.Execute;
var
  newStatus : string;
begin
  while (not Terminated) do
    begin
      red := red + 0.01;
      if (red > 0.99) then red := -1.0;
    end;
end;

procedure TForm1.GLboxPaint(Sender: TObject);
begin
  glClearColor(0.27, 0.53, 0.71, 1.0); // Задаем синий фон
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glLoadIdentity;
  glBegin(GL_TRIANGLES);
    glColor3f(1, 0, 0);
    glVertex3f(red, 1.0, 0.0);
    glColor3f(0, 1, 0);
    glVertex3f(-1.0,-1.0, 0.0);
    glColor3f(0, 0, 1);
    glVertex3f( 1.0,-1.0, 0.0);
  glEnd;
  GLbox.SwapBuffers;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Form1.GLboxPaint(Sender);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  GLbox := TOpenGLControl.Create(Self);
  GLbox.AutoResizeViewport := true;
  GLBox.Parent             := Self;
  GLBox.MultiSampling      := 4;
  GLBox.Align              := alClient;
  GLBox.OnPaint            := @GLboxPaint;
  GLBox.invalidate;
end;


begin
   ForthThread := TForthThread.Create(True); // This way it doesn't start automatically
   ForthThread.Start;

end.   


Вложения:
forth_lazarus_01.png
forth_lazarus_01.png [ 196.19 Кб | Просмотров: 12364 ]
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Вс ноя 08, 2020 02:24 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Ну так что, есть желание восстановить/создать Форт для управления виджетами Lazarus?


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Эх, а я как дурак через шейдеры треугольник рисую :weep; :D

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


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

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


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

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


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

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