Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт окт 20, 2017 23:52

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Qt-5 + Forth
СообщениеДобавлено: Пн мар 07, 2016 11:13 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 322
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 10 раз.
Я начал работы по написанию QtE5. Это связка Qt-5 + D.

Структура QtE5:
Код:
Qt-5(C++) ---> QtE5.dll(C) ---> QtE5.d(D) ---> программа на D


Однако есть все возможности по изготовлению:
Код:
Qt-5(C++) ---> QtE5.dll(C) ---> QtE5.d(D) ---> программа на D
                     +--------> QtE5.f(Forth) ---> программа на Forth

При сравнительно небольших усилиях, возможно получение доступа
к возможностям Qt-5 из форта.

Вопрос. Есть ли интерес к данной теме?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Qt-5 + Forth
СообщениеДобавлено: Пн мар 07, 2016 12:25 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1244
Благодарил (а): 3 раз.
Поблагодарили: 16 раз.
mgw писал(а):
Вопрос. Есть ли интерес к данной теме?

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Qt-5 + Forth
СообщениеДобавлено: Пн мар 07, 2016 12:49 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 708
Благодарил (а): 3 раз.
Поблагодарили: 31 раз.
VoidVolker писал(а):
mgw писал(а):
Вопрос. Есть ли интерес к данной теме?

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

QT, это вроде больше чем контролы мышкой?

P.S. Контролы можно и "нарисовать" при желании :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Qt-5 + Forth
СообщениеДобавлено: Пн мар 07, 2016 14:04 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1244
Благодарил (а): 3 раз.
Поблагодарили: 16 раз.
KPG писал(а):
QT, это вроде больше чем контролы мышкой? P.S. Контролы можно и "нарисовать" при желании

Да, вполне можно. Нарисовать можно вообще все что угодно "при желании". Только смысл рисовать, если можно взять готовое?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Qt-5 + Forth
СообщениеДобавлено: Пн мар 07, 2016 14:12 
Не в сети

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

Windows 32 - XP, Win7, Win10
Windows 64 - Win7, Win10
Linux 32 - Fedora 21 и 23
Linux 64 - Fedora 32 Plazma
Max OSX 64 - Mac OSX Maveric (10.9.5) хакинтош на процессоре FX-8320E

Исходный текст программы (в данном случае D) полностью переносим между различными платформами
без изменений. 32-x разрядную версию QtE5 можно спокойно крутить и на форте.

Кстати, установки на компьютер Qt-5 из дистрибутива не требуется. Достаточно скопировать несколько файлов, RunTime версию, которая есть несколько файлов DLL и пара каталогов с Plugin.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Qt-5 + Forth
СообщениеДобавлено: Пн мар 07, 2016 15:53 
Не в сети
Аватара пользователя

Зарегистрирован: Вт фев 17, 2009 19:58
Сообщения: 110
Откуда: Барнаул
Благодарил (а): 21 раз.
Поблагодарили: 16 раз.
mgw писал(а):
Однако есть все возможности по изготовлению:
Код:
Qt-5(C++) ---> QtE5.dll(C) ---> QtE5.d(D) ---> программа на D
                     +--------> QtE5.f(Forth) ---> программа на Forth

При сравнительно небольших усилиях, возможно получение доступа
к возможностям Qt-5 из форта.

Есть очень большой интерес к Qt5 + Forth, но есть вопросы:
1) Я так понял, проект лежит на Github (https://github.com/MGWL/QtE5)?
2) Где на Github файл QtE5.dll? Есть только QtE5Widgets32.dll и QtE5Widgets64.dll.
3) Где можно посмотреть список функций, которые можно экспортировать из QtE5.dll?
4) Можно почитать простейший пример на форте? Что-то вроде t5.d с Github, только на форте?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Qt-5 + Forth
СообщениеДобавлено: Пн мар 07, 2016 17:40 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 322
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 10 раз.
Проект на https://github.com/MGWL/QtE5

Основной файл имеет название не QtE5, а QtE5Widgets. В зависимости от ОС и разрядности выбираем
нужный. Например для 32 Windows ---> QtE5Widgets32.dll а для 32 Linux ---> libQtE5Widgets32.so

Список функций виден в 2-х местах:
1 - Файл QtE5.d, строки вида
Код:
   funQt(0,  bQtE5Widgets, hQtE5Widgets, sQtE5Widgets, "qteQApplication_create1",    showError);
   funQt(1,  bQtE5Widgets, hQtE5Widgets, sQtE5Widgets, "qteQApplication_exec",       showError);
   funQt(2,  bQtE5Widgets, hQtE5Widgets, sQtE5Widgets, "qteQApplication_aboutQt",    showError);
   funQt(3,  bQtE5Widgets, hQtE5Widgets, sQtE5Widgets, "qteQApplication_delete1",    showError);
...........

либо в файле исходнике qte5widgets.cpp, где описаны сами функции "обертки". Пример:
Код:
extern "C" QtRefH qteQApplication_create1(int* argc, char *argv[], int AnParam3) {
    return (QtRefH)new QApplication(*argc, argv, AnParam3);
}
extern "C" void qteQApplication_delete1(QtRefH app) {
    delete (QApplication*)app;
}
extern "C" int qteQApplication_exec(QtRefH app) {
    return ((QApplication*)app)->exec();
}
extern "C" void qteQApplication_aboutQt(QtRefH app) {
    ((QApplication*)app)->aboutQt();
}
..........

rt_Qt5_windows32.zip - это RunTime 5.5.1 для windows 32. Запуск примеров осуществлять в этом каталоге.

С примером на Форте проблема. Таковой отсутствует. Основной алгоритм следующий:
1 - Подключить (загрузить) QtE5Widgets32.dll
2 - Определить слова вызова функций. Для простейшего примера нужно 4 - 5 функций
Код:
..... код на Псевдо форте ... в качестве примера
1 argc argv qteQApplication_create1 VAR app ! \ Запомнили ссылку на QApplication
0 0 qteQWidget_create1 VAR окошко ! \ Создать QWidget и запомнить ссылку на него
true окошко @ qteQWidget_setVisible  \ Сказать, что окошко видно на экране
app @ qteQApplication_aboutQt \ Вызвать окно версии Qt
app @  qteQApplication_exec \ Войти в цикл обработки событий.


Накидал пример. Используется форт 32 на D ( Спасибо Олегу! ) и RunTime rt_Qt5_windows32.zip с github.
Код:
1 2 3 4 5 // Проверка стека на выходе

S" stdlib.f" 1+ INCLUDED
IF=W Lib" QtE5Widgets32.dll" QtE5Widgets
IF=W Library@ QtE5Widgets 3 CDECL-Call" qteQApplication_create1"  new_qteQApplication
IF=W Library@ QtE5Widgets 1 CDECL-Call" qteQApplication_exec"     qteExec
IF=W Library@ QtE5Widgets 1 CDECL-Call" qteQApplication_aboutQt"  aboutQt
IF=W Library@ QtE5Widgets 2 CDECL-Call" qteQWidget_create1"       new_QWidget
IF=W Library@ QtE5Widgets 2 CDECL-Call" qteQWidget_setVisible"    setVisible
IF=W LibraryLoad QtE5Widgets

// Лень изготавливать argc и argv, просто моделирую их
VAR argc 1 argc ! // Это argc
VAR s2 VAR s3 VAR s1 0 s1 ! s1 @ s2 ! s2 @ s3 ! // s3 - это argv
argc s3 1 new_qteQApplication VAR app app !  // app = new QApplication(argc, s3, 1);
app @ aboutQt  // app.aboutQt();

0 0 new_QWidget VAR win1 win1 ! DROP // win1 = new QWidget(null, 0);
1 win1 @ SWAP setVisible DROP // win1.setVisible(true);
app @ qteExec DROP // app.exec();

S" --1--" 1+ TYPE // Визуализация загрузки
. . . . . // Проверка стека на выходе


Вот как выглядит программа на D которая выполняет этот код:
Код:
import forth;
int main(string[] args) {
   initForth();         // Активизируем Форт
   includedForth("f5.f");   // Читаю файл
   return 0;
}


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Qt-5 + Forth
СообщениеДобавлено: Пн мар 07, 2016 21:32 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 199
Откуда: Москва
Благодарил (а): 22 раз.
Поблагодарили: 2 раз.
Скачал, Затем с сайта narod. который указан на странице, скачал версию
для linux С самого гитхаба скачать почему то не удалось а в zip архиве не было.
Запустид консоль
load hello.zim
Крнсоль захлопнулась
Ошибка сегментирования

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Qt-5 + Forth
СообщениеДобавлено: Вт мар 08, 2016 16:23 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 322
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 10 раз.
vikt писал(а):
Скачал, Затем с сайта narod. который указан на странице, скачал версию
для linux С самого гитхаба скачать почему то не удалось а в zip архиве не было.
Запустид консоль
load hello.zim
Крнсоль захлопнулась
Ошибка сегментирования

Это всё лишнее ... На mgw.narod.ru лежит совсем другой проект...

Первое, что за Linux? Без разницы как он называется Ubuntu, Fedora или ещё как то ...
Важно:
- разрядность 32 или 64.
- если 32 то обычный или PAE.
- установлена ли на нем Qt5. А именно есть ли в наличии файлы: libQt5Core.so, libQt5Gui.so и т.д. На всех современных дистрибутах Linux уже установлен по умолчанию Qt5 и эти файлы уже имеются. Если их нет (дистрибут старый) то скачать с репо и установить.

С github качается всё по кнопке "Download.zip", которая расположена под темно-красной полосой во всю ширину заглавной страницы проекта.

Повторяю, что под форт нет готовой реализации.

В чем основная идея QtE. В том, что бы "прицепится" к объектам С++ из которых состоит сама Qt. Самое универсальное, это обычные вызовы "C", именно они и
использованы в QtE. Хорошо, есть набор готовых вызовов, а что дальше?А дальше
их можно использовать с любого (почти, так как нужна поддержка callback) языка программирования. Но лично мне в "лом" ползать по километровому списку функций
с их параметрами. Поэтому, этот список вызовов опять собирается в набор взаимосвязанных объектов. Я сейчас это делаю на D (так как все программы пишу на нем), но МОЖНО сделать такой набор объектов (словарей, списков ... кому что нравится) и для форта. В своё время я пытался сделать такую библиотеку для spf-4.20. Вполне реально возродить это направление, но для Qt-5.

К чему, я все это говорю. К тому, что сейчас, я в начале пути и могу рассказывать об архитектуре QtE5, так как она отличается от Qt (нет метакомпилятора и т.д.), но я не могу сам писать для форта (все форты разные, да к тому же нет 64 раз нормальной поддержки). Для меня основная задача D, так как на нем я пишу коммерческие проекты.
Предлагаю заинтересованным лицам взяться за написание (изучение, тестирование) куска QtE5 для форта.

По возможности готов отвечать на вопросы.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Qt-5 + Forth
СообщениеДобавлено: Вт мар 08, 2016 23:38 
Не в сети
Аватара пользователя

Зарегистрирован: Чт дек 31, 2009 18:36
Сообщения: 1961
Откуда: Питер
Благодарил (а): 13 раз.
Поблагодарили: 32 раз.
Когда-то, в рамкам проекта "визуализации" FORTH, я писал:
Цитата:
...мимо котлована и тупичка к далекому городу мечты на горизонте (нет, не так - к верхнему городу, нависающему над берегом на огромных ржавых сетчатых клепанных фермах) протянута ветка скоростного трамвайчика. С надписями "Perl", "C#", "Python"... на вагончиках. Какие-то оборванные люди с вещмешками выбираются из котлована и тайком походят к кассе, шепча: "До города..."
Что же, проводим еще одного коллегу. Счастливого пути!

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Qt-5 + Forth
СообщениеДобавлено: Вт мар 08, 2016 23:47 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 708
Благодарил (а): 3 раз.
Поблагодарили: 31 раз.
gudleifr писал(а):
Что же, проводим еще одного коллегу. Счастливого пути!

Раз это к никому не адресовано, то логика подсказывает что это что то сугубо личное и обозначает личные "переживания" :)
P.S. Однако, похвально. Зачем Perl, C#, Питон? Бейсик наше Всё! :hey;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Qt-5 + Forth
СообщениеДобавлено: Пт мар 11, 2016 00:36 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 708
Благодарил (а): 3 раз.
Поблагодарили: 31 раз.
Новая статья на хабре по теме QT (может будет чем то полезна)
Костылик для сигнал-слот системы в Qt


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Qt-5 + Forth
СообщениеДобавлено: Сб мар 12, 2016 08:19 
Не в сети
Аватара пользователя

Зарегистрирован: Вт фев 17, 2009 19:58
Сообщения: 110
Откуда: Барнаул
Благодарил (а): 21 раз.
Поблагодарили: 16 раз.
mgw писал(а):
...
Накидал пример. Используется форт 32 на D ( Спасибо Олегу! ) и RunTime rt_Qt5_windows32.zip с github.
...
Что за "форт 32 на D"? Можно ссылку на него?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Qt-5 + Forth
СообщениеДобавлено: Сб мар 12, 2016 10:44 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 322
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 10 раз.
kzagradskiy писал(а):
mgw писал(а):
...
Накидал пример. Используется форт 32 на D ( Спасибо Олегу! ) и RunTime rt_Qt5_windows32.zip с github.
...
Что за "форт 32 на D"? Можно ссылку на него?


Рекомендую полностью прочитать ветку форума
viewtopic.php?f=2&t=3044

Готовый вариант forthd (для Windowd 32 и Linux 32) лежит на
https://github.com/MGWL/QtE-Qt_for_Dlang_and_Forth

P.S. Я тут столкнулся с неприятным явлением. На Linux 32 PAE (это архитектура позволяющая 32 разрядным программам
работать за пределами 4G памяти) forthd отказался работать. :cry: В чем ошибка, пока не понятно, но судя по всему
изменился способ (адрес или его представление) вызова hard слов.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Qt-5 + Forth
СообщениеДобавлено: Сб мар 12, 2016 22:41 
Не в сети
Аватара пользователя

Зарегистрирован: Вт фев 17, 2009 19:58
Сообщения: 110
Откуда: Барнаул
Благодарил (а): 21 раз.
Поблагодарили: 16 раз.
mgw писал(а):
Код:
1 2 3 4 5 // Проверка стека на выходе

S" stdlib.f" 1+ INCLUDED
IF=W Lib" QtE5Widgets32.dll" QtE5Widgets
IF=W Library@ QtE5Widgets 3 CDECL-Call" qteQApplication_create1"  new_qteQApplication
IF=W Library@ QtE5Widgets 1 CDECL-Call" qteQApplication_exec"     qteExec
IF=W Library@ QtE5Widgets 1 CDECL-Call" qteQApplication_aboutQt"  aboutQt
IF=W Library@ QtE5Widgets 2 CDECL-Call" qteQWidget_create1"       new_QWidget
IF=W Library@ QtE5Widgets 2 CDECL-Call" qteQWidget_setVisible"    setVisible
IF=W LibraryLoad QtE5Widgets

// Лень изготавливать argc и argv, просто моделирую их
VAR argc 1 argc ! // Это argc
VAR s2 VAR s3 VAR s1 0 s1 ! s1 @ s2 ! s2 @ s3 ! // s3 - это argv
argc s3 1 new_qteQApplication VAR app app !  // app = new QApplication(argc, s3, 1);
app @ aboutQt  // app.aboutQt();

0 0 new_QWidget VAR win1 win1 ! DROP // win1 = new QWidget(null, 0);
1 win1 @ SWAP setVisible DROP // win1.setVisible(true);
app @ qteExec DROP // app.exec();

S" --1--" 1+ TYPE // Визуализация загрузки
. . . . . // Проверка стека на выходе


Переписал этот пример на SP-Forth'е. Получилось так:
Код:
1 2 3 4 5 \ Проверка стека на выходе

REQUIRE CAPI: ~af/lib/c/capi.f

3 CAPI: qteQApplication_create1 QtE5Widgets32.dll
1 CAPI: qteQApplication_exec    QtE5Widgets32.dll
1 CAPI: qteQApplication_aboutQt QtE5Widgets32.dll
2 CAPI: qteQWidget_create1      QtE5Widgets32.dll
2 CAPI: qteQWidget_setVisible   QtE5Widgets32.dll

\ Лень изготавливать argc и argv, просто моделирую их
VARIABLE argc 1 argc ! \ Это argc
VARIABLE s2 VARIABLE s3 VARIABLE s1 0 s1 ! s1 @ s2 ! s2 @ s3 ! \ s3 - это argv
argc s3 1 qteQApplication_create1 VARIABLE app app !  \ app = new QApplication(argc, s3, 1);
app @ qteQApplication_aboutQt  \ app.aboutQt();

0 0 qteQWidget_create1 VARIABLE win1 win1 ! DROP \ win1 = new QWidget(null, 0);
1 win1 @ SWAP qteQWidget_setVisible DROP \ win1.setVisible(true);
app @ qteQApplication_exec DROP \ app.exec();

S" --1--" 1+ TYPE \ Визуализация загрузки
. . . . . \ Проверка стека на выходе

Выдает ошибку:
Код:
argc s3 1 qteQApplication_create1 VARIABLE app app !  \ app = new QApplication(argc, s3, 1);
                                ^ 0xC0000005L ACCESS_VIOLATION

Я и не ожидал, что сразу заработает. Что можете сказать?
P.S. (Вопрос скорее к mOleg, чем к mgw)


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

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


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

Сейчас этот форум просматривают: Google [Bot] и гости: 5


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

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