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

...
Google Search
Forth-FAQ Spy Grafic

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




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

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 174
Благодарил (а): 20 раз.
Поблагодарили: 13 раз.
Victor__v писал(а):
Эх, а я как дурак через шейдеры треугольник рисую :weep; :D

Ну это же только для примера.
А что это такое интересное с шейдерами будет?


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

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

Зачем так-то? Есть же "hello world для OpenGL".


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

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
В Lazarus оказалось существенно проще организовать аналог SignalMapper из Qt.
Вкратце - если динамически генерировать объекты (например, кнопки), то у кнопок должен быть обработчик - естественно, у каждой. Однако писать такое же количество независимых функций - совершенно нерациональное занятие. Обработчик должен быть один... но тогда все кнопки будут делать одно и то же. В Qt для решения такой задачи существует понятие SignalMapper (с учетом используемой терминологии Signal + Slot). Идея заключается в том, чтобы расширить передаваемое кнопке сообщение, включив в него индекс самой кнопки. Поэтому в Qt о при инициализации кнопок передаваемый кнопке сигнал "расширяется" индексом самой кнопки:

Код:
    for (int i = 0; i < MAXBUTTONS; i++)
    {
        FButton[i] = new QPushButton(this);
        FButton[i]->hide();

        signalButtonMapper->setMapping(FButton[i], i);
        connect(FButton[i], SIGNAL(clicked()), signalButtonMapper, SLOT(map()));
    }
    connect(this, SIGNAL(ButtonClicked(int)), this, SLOT(ButtonClick(int)));


Lazarus такого объекта не содержит. Однако отсутствие системы сигнал+слот позволяет просто создать производный класс от TButton, добавив в него поле "индекс" (ну и функцию, конечно же - инкапсуляция):

Код:
  TVButton = class(TButton)
     private
      Index : integer;
     public
       function GetIndex : integer;
  end;


При инициализации кнопке просто сообщается ее номер:
Код:
  for i := 0 to MAXBUTTONS - 1 do
  begin
    VButton[i] := TVButton.Create(Self);
    VButton[i].Parent := Self;
    VButton[i].Hide;
    VButton[i].OnClick:=@aButtonClick;
    VButton[i].Index := i;
  end; 


Внутри обработчика выражение
Код:
(Sender as TVButton).GetIndex


дает индекс этой кнопки.


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Код:
  ForthVM : array [0..15] of PForth;


:shuffle;


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

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 174
Благодарил (а): 20 раз.
Поблагодарили: 13 раз.
Hishnik писал(а):
Код:
  ForthVM : array [0..15] of PForth;


:shuffle;

16-ядерная виртуальная Форт-машина? :)


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

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

Именно! :)

Ну понятно, что тут 16 - пока просто число с потолка для экспериментов. Просто сам факт, что общая структура Форт-машины таки упихнулась в один объект, и оно посылает сообщения основному движку. Можно и динамически количество менять, это вполне поддерживается компиляторами в ООП. Интересно посмотреть, как будут загружены ядра/потоки современного многоядерного процессора на такой штуке. Это уже не 1-2% производительности прирост.


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

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 174
Благодарил (а): 20 раз.
Поблагодарили: 13 раз.
Hishnik писал(а):
Интересно посмотреть, как будут загружены ядра/потоки современного многоядерного процессора на такой штуке.

Если каждый экземпляр будет выполняться в своём потоке ОС, то очень хорошо всё раскидывается по ядрам (в Windows по крайней мере). Нужно только организовать совместный доступ к разделяемым ресурсам.


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
zma писал(а):
Если каждый экземпляр будет выполняться в своём потоке ОС, то очень хорошо всё раскидывается по ядрам (в Windows по крайней мере).

Да, я пока это не проверял с цифрами, но из общих соображений очень надеюсь именно на такой эффект.
zma писал(а):
Нужно только организовать совместный доступ к разделяемым ресурсам.

А тут предполагается, что основной движок монопольно управляет виджетами и теми ресурсами, доступ к которым критичен. Все важное проходит через очередь сообщений (у каждого потока она своя). Пока не проверялась многопоточная работа с отсылкой сообщений вида "поток 1 посылает сообщение, чтобы потоку 2 была передана вот такая строка для интерпретации", но в целом должно работать, и заодно разрешать "проблему обедающих философов".


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

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 174
Благодарил (а): 20 раз.
Поблагодарили: 13 раз.
Это просто эксперименты или планируете применять такую систему в реальном проекте?


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
zma писал(а):
Это просто эксперименты или планируете применять такую систему в реальном проекте?

Проектов уже набирается много:
1. Кросс-ассемблирование для форт-процессоров.
Это удобно. Форт-процессор вообще удобнее Microblaze и даже ARM. Его быстрее поставить в проект, к нему удобнее подключать периферию, у него нет каких-то bootloader-ов и прочего. К нему нужна интегрированная среда разработки с кнопкой "скомпилировать и запустить в ПЛИС". На Qt такое уже работает, что окажется удобнее - посмотрим.
2. Скриптование вычислений.
Можно оформить код как dll и подключить к Форту - ассемблерные функции, GPU, ПК-библиотеки для запуска кода на FPGA. У всего этого зависимость от производительности форт-машины стремится к нулю, но постоянно пересобирать проекты в CUDA SDK или, того хуже, в Vitis HLS - ужас. Если работа сводится к изменению входных параметров, то это как раз задача для скрипта. Что-то можно писать и на Форте, конечно.

Потоки - да, реальность. Например, при подключенном оборудовании нужно постоянно смотреть на COM-порт. Там идет обмен, и если что-то висит или пропало питание, зависание основной программы крайне неуместно. Если же это в отдельном потоке - вполне можно принудительно остановить поток. Ну и дополнительно, явно разложить вычислительную задачу по потокам, выделив каждому свой диапазон параметров для расчета, видится полезным.



За это сообщение автора Hishnik поблагодарил: zma
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth + Lazarus IDE
СообщениеДобавлено: Чт июл 08, 2021 05:18 
Не в сети
Аватара пользователя

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
Hishnik писал(а):
В Lazarus оказалось существенно проще организовать аналог SignalMapper из Qt.
...
Код:
(Sender as TVButton).GetIndex
дает индекс этой кнопки.
да, обычно, там и наследников вводить не нужно. Можно просто стандартное поле Tag контролов использовать.


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

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

Про это я не видел описаний. Оно обнаружилось аж в TComponent.Tag, и написано, что оно может использоваться для хранения целого числа. Явное наследование с заданием индекса выглядит надежнее.


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

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 303
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
Hishnik писал(а):
Wlad писал(а):
Можно просто стандартное поле Tag контролов использовать.

Про это я не видел описаний. Оно обнаружилось аж в TComponent.Tag, и написано, что оно может использоваться для хранения целого числа. Явное наследование с заданием индекса выглядит надежнее.

Не только целого. Размер его предполагает возможность, например, указатель сохранять (через приведение типа).
На счёт наследования. Наследование увеличивает связность частей программы (снижает модульность) и вводит лишние сущности при уже имеющемся (специально выделенном, под такие случаи) средстве.


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Я не увидел конкретных рекомендаций использовать Tag для хранения индекса этого виджета в массиве виджетов. Нужен не "тэг компонента", а "индекс кнопки в массиве указателей на динамически создаваемые объекты". Подобная идея описана в signalMapper из Qt, но он объявлен устаревшим в 5.x.

Wlad писал(а):
Наследование увеличивает связность частей программы (снижает модульность) и вводит лишние сущности при уже имеющемся (специально выделенном, под такие случаи) средстве.

Ну это скорее теоретически. Наследование по принципу "такое же, только еще несколько полей" ничего критического не создает. К тому же там не только индекс, а еще и строка Форта для выполнения при нажатии.


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

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


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

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


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

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