Forth http://fforum.winglion.ru/ |
|
Qt-5 + Forth http://fforum.winglion.ru/viewtopic.php?f=2&t=3090 |
Страница 1 из 2 |
Автор: | mgw [ Пн мар 07, 2016 11:13 ] |
Заголовок сообщения: | Qt-5 + Forth |
Я начал работы по написанию 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 из форта. Вопрос. Есть ли интерес к данной теме? |
Автор: | VoidVolker [ Пн мар 07, 2016 12:25 ] |
Заголовок сообщения: | Re: Qt-5 + Forth |
mgw писал(а): Вопрос. Есть ли интерес к данной теме? Да, интерес есть. Прежде всего интересует кросплатформенность. В идеале хотелось бы накидать контролов мышкой, а затем рулить ими из форта. |
Автор: | KPG [ Пн мар 07, 2016 12:49 ] |
Заголовок сообщения: | Re: Qt-5 + Forth |
VoidVolker писал(а): mgw писал(а): Вопрос. Есть ли интерес к данной теме? Да, интерес есть. Прежде всего интересует кросплатформенность. В идеале хотелось бы накидать контролов мышкой, а затем рулить ими из форта. QT, это вроде больше чем контролы мышкой? P.S. Контролы можно и "нарисовать" при желании |
Автор: | VoidVolker [ Пн мар 07, 2016 14:04 ] |
Заголовок сообщения: | Re: Qt-5 + Forth |
KPG писал(а): QT, это вроде больше чем контролы мышкой? P.S. Контролы можно и "нарисовать" при желании Да, вполне можно. Нарисовать можно вообще все что угодно "при желании". Только смысл рисовать, если можно взять готовое? |
Автор: | mgw [ Пн мар 07, 2016 14:12 ] |
Заголовок сообщения: | Re: Qt-5 + Forth |
Сейчас я смог запустить и проверить 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. |
Автор: | kzagradskiy [ Пн мар 07, 2016 15:53 ] |
Заголовок сообщения: | Re: Qt-5 + Forth |
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, только на форте? |
Автор: | mgw [ Пн мар 07, 2016 17:40 ] |
Заголовок сообщения: | Re: Qt-5 + Forth |
Проект на 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; } |
Автор: | vikt [ Пн мар 07, 2016 21:32 ] |
Заголовок сообщения: | Re: Qt-5 + Forth |
Скачал, Затем с сайта narod. который указан на странице, скачал версию для linux С самого гитхаба скачать почему то не удалось а в zip архиве не было. Запустид консоль load hello.zim Крнсоль захлопнулась Ошибка сегментирования |
Автор: | mgw [ Вт мар 08, 2016 16:23 ] |
Заголовок сообщения: | Re: Qt-5 + Forth |
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 для форта. По возможности готов отвечать на вопросы. |
Автор: | gudleifr [ Вт мар 08, 2016 23:38 ] |
Заголовок сообщения: | Re: Qt-5 + Forth |
Когда-то, в рамкам проекта "визуализации" FORTH, я писал: Цитата: ...мимо котлована и тупичка к далекому городу мечты на горизонте (нет, не так - к верхнему городу, нависающему над берегом на огромных ржавых сетчатых клепанных фермах) протянута ветка скоростного трамвайчика. С надписями "Perl", "C#", "Python"... на вагончиках. Какие-то оборванные люди с вещмешками выбираются из котлована и тайком походят к кассе, шепча: "До города..." Что же, проводим еще одного коллегу. Счастливого пути!
|
Автор: | KPG [ Вт мар 08, 2016 23:47 ] |
Заголовок сообщения: | Re: Qt-5 + Forth |
gudleifr писал(а): Что же, проводим еще одного коллегу. Счастливого пути! Раз это к никому не адресовано, то логика подсказывает что это что то сугубо личное и обозначает личные "переживания" P.S. Однако, похвально. Зачем Perl, C#, Питон? Бейсик наше Всё! |
Автор: | KPG [ Пт мар 11, 2016 00:36 ] |
Заголовок сообщения: | Re: Qt-5 + Forth |
Новая статья на хабре по теме QT (может будет чем то полезна) Костылик для сигнал-слот системы в Qt |
Автор: | kzagradskiy [ Сб мар 12, 2016 08:19 ] |
Заголовок сообщения: | Re: Qt-5 + Forth |
mgw писал(а): ... Что за "форт 32 на D"? Можно ссылку на него?
Накидал пример. Используется форт 32 на D ( Спасибо Олегу! ) и RunTime rt_Qt5_windows32.zip с github. ... |
Автор: | mgw [ Сб мар 12, 2016 10:44 ] |
Заголовок сообщения: | Re: Qt-5 + Forth |
kzagradskiy писал(а): mgw писал(а): ... Что за "форт 32 на D"? Можно ссылку на него?Накидал пример. Используется форт 32 на D ( Спасибо Олегу! ) и RunTime rt_Qt5_windows32.zip с github. ... Рекомендую полностью прочитать ветку форума 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 отказался работать. В чем ошибка, пока не понятно, но судя по всему изменился способ (адрес или его представление) вызова hard слов. |
Автор: | kzagradskiy [ Сб мар 12, 2016 22:41 ] |
Заголовок сообщения: | Re: Qt-5 + Forth |
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) |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |