Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт апр 23, 2019 21:49

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 47 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Quark C64
СообщениеДобавлено: Вт фев 12, 2019 09:46 
Не в сети

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 40
Благодарил (а): 6 раз.
Поблагодарили: 2 раз.
Hishnik писал(а):
Да, это получается вариант п.3 - продублировать адресный интерпретатор еще и в методе класса MainWindow. Собственно, это просто copy-paste, но вроде бы должно сработать.

Как раз дублирования не будет. Получится что-то такое:
Код:
int finished;
...
for (finished = Evaluate("SOME-FORTH"); !finished; finished = ResumeForth()) {
   // перерисовка элементов окна
}


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark C64
СообщениеДобавлено: Вт фев 12, 2019 19:49 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6636
Благодарил (а): 15 раз.
Поблагодарили: 106 раз.
Пока вот так:
Код:
void MainWindow::Run()
{
    const char * str = new char [256];
    QString s;
    s = Console->text();
    str = s.toLocal8Bit().constData();
    strncpy(Tib, str, MAXNAMELEN - 1);
    QFuture<void> f1 = QtConcurrent::run(EvaluateTib);
    Console->setText("");

    while (!(f1.isFinished())) {}
    QString info = QString::number(Depth);
    if (Depth > 0) info = info + " :  " + QString::number(Dstack[Depth - 1]);
    StackInfo->setText(info);
}


Предполагаю сделать из форт-машины отдельную очередь, проверять ее внутри while, и при наличии команд просто отрисовывать их. Минус в том, что придется реализовать отдельный набор сообщений и параметров, зато так удается избавиться от чрезмерно глубокого проникновения друг в друга Qt и Форта. В принципе, на основе потока сообщений из Форта в вызывающую программу можно и другие внешние фреймворки использовать.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark C64
СообщениеДобавлено: Ср фев 13, 2019 04:28 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6636
Благодарил (а): 15 раз.
Поблагодарили: 106 раз.
Да! Оно (пока) получается так, как я хочу.

Очередь, реализованная в форт-машине, кладет туда пакет из параметров. Параметры надо, конечно, расписывать отдельно, и вообще придумывать для них какую-то систематизацию, потому что по сути это дублирующееся перечисление свойств виджетов. Сейчас это: message (номер действия), object (номер типа объекта - увы, надо, чтобы избежать каких-то игр с преобразованиями типов в рантайме), index (это просто номер из внутренней БД программы). Дальше идут собственно параметры виджетов, пока этот объем не превысит разумные пределы. Очевидно - XYWH, т.е rect, дальше можно уже caption, checked, наличие рамок и т.д., т.е. придется, конечно же, все делать вручную.

Форт-машина имеет слова, которые укладывают в очередь сообщений пакеты со всем перечисленным. Т.е., например, так:

Код:
void ForthButtonShow()
{
    GMessage = SHOW;
    GObject = BUTTON;
    Depth--;
    GIndex = Dstack[Depth];
    PushGUI();
}


В вызывающей программе после запуска потока с форт-машиной проверяется эта очередь, и при наличии в ней сообщения оно разбирается. Сначала по типу объекта, потом каждый объект самостоятельно определяет, какие сообщения для него доступны. Будет дублирование (например, show/hide или setGeometry надо повторять для каждого типа виджета), зато новый виджет добавляется "концентрированно", а не размазыванием кода по нескольким обработчикам.

Главное, собственно, проверил.
Код:
0 BUTTON.SHOW
0 50 200 50  0 BUTTON.RECT


На форме новая кнопка. Показывать/прятать и перемещать можно прямо из консоли.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark C64
СообщениеДобавлено: Чт фев 14, 2019 04:22 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6636
Благодарил (а): 15 раз.
Поблагодарили: 106 раз.
Ну, кажется, дело сдвинулось с мертвой точки.
Код:
" +" 0 BUTTON.ACTION


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

Больше всего радует, что весь интерфейс собирается прямо на ходу, в рантайме.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark C64
СообщениеДобавлено: Сб фев 16, 2019 22:33 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6636
Благодарил (а): 15 раз.
Поблагодарили: 106 раз.
Код:
0 BUTTON.SHOW
100 100 75 25 0 BUTTON.RECT
" +" 0 BUTTON.TEXT
" +" 0 BUTTON.ACTION

1 BUTTON.SHOW
100 140 75 25 1 BUTTON.RECT
" -" 1 BUTTON.TEXT
" -" 1 BUTTON.ACTION

Уф, кажется, принципиальный шаг отвоеван у Qt. Вопрос был в том, что при наличии MAXBUTTONS кнопок (потенциально на форме, а не в конкретный момент), каждая кнопка генерирует сигнал (в терминах Qt). Покопавшись в рекомендациях, я нашел довольно хорошо подходящий к ситуации QSignalMapper, который преобразует сигналы от многих компонентов в сигнал другого типа, куда можно подмешать еще и номер компонента, который этот сигнал генерирует. Иначе clicked() никак не помогал понять, как из кнопок нажата.

Код:
    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)));

Вот теперь после того, как все кнопки подключились к mapper-у, передав ему дополнительно свой номер, можно сгенерировать сигнал ButtonClick с номером кнопки.

Но ощущение от сборки GUI прямо в рантайме (причем каждая кнопка тут же начинает работать по прямому назначению) - непередаваемо :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark C64
СообщениеДобавлено: Вт фев 19, 2019 04:52 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6636
Благодарил (а): 15 раз.
Поблагодарили: 106 раз.
Вот пока так...


Вложения:
screen01.png
screen01.png [ 27.9 Кб | Просмотров: 877 ]
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark C64
СообщениеДобавлено: Вт фев 19, 2019 08:41 
Не в сети

Зарегистрирован: Пн янв 28, 2019 03:10
Сообщения: 40
Благодарил (а): 6 раз.
Поблагодарили: 2 раз.
Главное меню тоже через Форт настраивается?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark C64
СообщениеДобавлено: Вт фев 19, 2019 13:03 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Выглядит круто! А билды для ОСХ и линукса будут же, да? А как на счет компиляции программы в бинарный вид, чтобы не тащить исходник? Жду релиза :)

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark C64
СообщениеДобавлено: Вт фев 19, 2019 17:22 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6636
Благодарил (а): 15 раз.
Поблагодарили: 106 раз.
zma писал(а):
Главное меню тоже через Форт настраивается?

Да, в принципе, все динамически создаваемые виджеты Qt можно создавать из Форта. Другое дело, что система сигнал-слот требует отдельной настройки, и для меню получается чуть сложнее.

VoidVolker писал(а):
Выглядит круто! А билды для ОСХ и линукса будут же, да? А как на счет компиляции программы в бинарный вид, чтобы не тащить исходник? Жду релиза

Qt для Линукса есть, билд наверное будет. Для OSX ни разу не требовалось. А компиляция как раз не предполагается, потому что теряется смысл ВМ с кодом, не зависящим от платформы. К тому же общая идея как раз в том, чтобы проекты были максимально интерактивными, и можно было править GUI или из консоли, или крупно, редактированием скрипта.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark C64
СообщениеДобавлено: Вт фев 19, 2019 22:42 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Код:
Qt для Линукса есть, билд наверное будет. Для OSX ни разу не требовалось. А компиляция как раз не предполагается, потому что теряется смысл ВМ с кодом, не зависящим от платформы. К тому же общая идея как раз в том, чтобы проекты были максимально интерактивными, и можно было править GUI или из консоли, или крупно, редактированием скрипта.

Билд самого приложения для любой ОС все равно будет зависеть от ОС. Смысл таки как раз и не теряется: один раз написал код, собрал бинарник/бинарники, упаковал все в установщик/архив и отдал пользователям или загрузил небольшой файл на сервер обновлений. При этом совсем не хочется давать пользователям доступ к исходному коду приложения, который может являться интеллектуальной собственностью или просто требуется иметь закрытый исходный код. На мой взгляд, эта функция вообще никак не влияет на смысл приложения.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark C64
СообщениеДобавлено: Вт фев 19, 2019 22:58 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6636
Благодарил (а): 15 раз.
Поблагодарили: 106 раз.
VoidVolker писал(а):
Билд самого приложения для любой ОС все равно будет зависеть от ОС. Смысл таки как раз и не теряется: один раз написал код, собрал бинарник/бинарники, упаковал все в установщик/архив и отдал пользователям или загрузил небольшой файл на сервер обновлений.

А что делать с x86/ARM? Сейчас forth.h прекрасно собирается и под ARM (причем и в варианте bare metal). Для этого нужно, чтобы исходные тексты компилировались ну хотя бы в ШК, а оттуда все достаточно легко можно достать.

VoidVolker писал(а):
При этом совсем не хочется давать пользователям доступ к исходному коду приложения, который может являться интеллектуальной собственностью или просто требуется иметь закрытый исходный код.

Приложение может иметь и дополнительный код на Qt, собранный для конкретной ОС. Форт нужен именно для того, чтобы расширять возможности пользователя - например как nnCron.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark C64
СообщениеДобавлено: Ср фев 20, 2019 10:29 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Hishnik писал(а):
А что делать с x86/ARM? Сейчас forth.h прекрасно собирается и под ARM (причем и в варианте bare metal). Для этого нужно, чтобы исходные тексты компилировались ну хотя бы в ШК, а оттуда все достаточно легко можно достать.

А, да, арм же еще есть. А во что сейчас компилируется? Сразу в инструкции процессору? Вообще, как внутри реализуется форт в этой новой версии кварка? Если не секрет, конечно.
Hishnik писал(а):
Приложение может иметь и дополнительный код на Qt, собранный для конкретной ОС. Форт нужен именно для того, чтобы расширять возможности пользователя - например как nnCron.

Это-то да, но вот мне не нравится писать на С — поэтому и не использую Qt, а вот на форте нравится. Соответственно форт в Qt — это круто и интересно. На форте и общая логика приложения тоже вполне отлично реализуется, а благодаря его скорости и компактности даже сложный GUI будет работать быстро. Ну и плюс кроссплатформенность, да.
Кстати, могу потестировать работу нового кварка с 4к/HiDPI, если что.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark C64
СообщениеДобавлено: Ср фев 20, 2019 19:23 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6636
Благодарил (а): 15 раз.
Поблагодарили: 106 раз.
VoidVolker писал(а):
Сразу в инструкции процессору? Вообще, как внутри реализуется форт в этой новой версии кварка? Если не секрет, конечно.


Внутри адресный интерпретатор. Но это все совсем не имеет машинных кодов.

Код:
void Step()
{
    void(*fword)();
    fword = (void(*)())ReadCode(pc);
    pc += sizeof(CELL);
    fword();
}

void Execute()
{
    CELL RdepthOnEntry = Rdepth;
    do
    {
        Step();
    }
    while (RdepthOnEntry <= Rdepth) ;
}


VoidVolker писал(а):
Это-то да, но вот мне не нравится писать на С — поэтому и не использую Qt, а вот на форте нравится. Соответственно форт в Qt — это круто и интересно. На форте и общая логика приложения тоже вполне отлично реализуется, а благодаря его скорости и компактности даже сложный GUI будет работать быстро. Ну и плюс кроссплатформенность, да.

В переходе к Форту и состоит основная цель. На Qt делается то, что "пишется один раз", а вот размеры виджетов, положение, текст, да и действие - это все меняется от проекта к проекту и даже в рамках модификаций одного проекта. Поэтому Форт нужен в роли консоли для управления виджетами. Конечно, тут будет некоторое подмножество Qt, а не универсальный интерфейс ко всей библиотеке. До широкого тестирования еще далеко, конечно. Тут и так много интересного вылезает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark C64
СообщениеДобавлено: Ср фев 20, 2019 23:36 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Ага, в целом понятно. Думаю, компиляции в ШК и проходом каким-нибудь шифром сверху для большинства задач упаковки приложения будет вполне достаточно.
Hishnik писал(а):
На Qt делается то, что "пишется один раз", а вот размеры виджетов, положение, текст, да и действие - это все меняется от проекта к проекту и даже в рамках модификаций одного проекта

Это да, тут полностью согласен.
Какие еще ожидаются новые функции по сравнению с предыдущей версией кварка? А как работает и взаимодействует виртуальный экрана совместно с Qt и его виджетами? Я так понимаю Qt создает этот виртуальный экран и отдает его кварку? При этом в него можно рендерить как OpenGL и отдельные пиксели как раньше, так и виджеты Qt? Или это несколько разных слоев?

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Quark C64
СообщениеДобавлено: Ср фев 20, 2019 23:48 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6636
Благодарил (а): 15 раз.
Поблагодарили: 106 раз.
VoidVolker писал(а):
Думаю, компиляции в ШК и проходом каким-нибудь шифром сверху для большинства задач упаковки приложения будет вполне достаточно.

В целом там форт-машина упакована в два массива - код и данные. Если их сохранить и потом загрузить, компиляцию можно будет пропустить. Правда, возможен вариант, когда при старте будет генерироваться много данных, и попытка записи непомерно раздует сохраняемые файлы.

VoidVolker писал(а):
Какие еще ожидаются новые функции по сравнению с предыдущей версией кварка? А как работает и взаимодействует виртуальный экрана совместно с Qt и его виджетами? Я так понимаю Qt создает этот виртуальный экран и отдает его кварку? При этом в него можно рендерить как OpenGL и отдельные пиксели как раньше, так и виджеты Qt? Или это несколько разных слоев?


Свой экран есть у форт-машины, его можно достать в Qt при необходимости. Виджеты создаются движком Qt, но их параметрами управляет форт-машина. Наложение виджетов на экран Форта может быть некоторой проблемой из-за особенностей отрисовки, но можно будет делать виджет "изображение" и связывать его с экраном Форта.


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

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


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

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


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

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