Forth http://www.fforum.winglion.ru/ |
|
QtE - "обёртка" для Qt. Windows 32/64 и Linux 32/64 http://www.fforum.winglion.ru/viewtopic.php?f=22&t=3008 |
Страница 1 из 1 |
Автор: | mgw [ Вт авг 05, 2014 16:34 ] |
Заголовок сообщения: | QtE - "обёртка" для Qt. Windows 32/64 и Linux 32/64 |
QtE – это библиотека, представляющая надстройку над стандартным Qt. Делал я её сугубо для себя и своих утилитарных нужд, по этому в ней нет системности и всеобъемлемости. Это эксперимент, развившийся до относительно законченного вида. QtE по принципу строения больше всего похожа на Lazarus c Qt. Классы Qt «разбиваются» на конструкторы, деструкторы и методы. Далее на базе этого «плоского (не ООП)» набора функций строится новая иерархия классов на базе того языка программирования, с которым будет использоваться. На данный момент есть версия для SPF 4.20 Win/Linux 32 и D (dlang) для Win/Linux 32/64. Сама QtE состоит из двух частей. Первая – это QtE.dll (so для Linux), которая представляет ту самую «плоскую» модель Qt. Вторая часть, это QtE.f (для SPF 4.20) или QtE.d (для D) дерево классов в терминах того языка, который будет использоваться. QtE.dll – написана на C++ 32/64. В Linux используется gcc, в Windows mingw и соответствующая версия Qt. Я принципиально отказался от Microsoft C++, в целях унификации исходного кода. Как выяснилось, после компиляции QtE.dll (so) для работы с Qt достаточно нескольких библиотек из Qt. Это позволяет не устанавливать Qt на компьютер, а просто скопировать несколько dll, этакий RunTime Qt, и спокойно работать с Форта или D. С 32 разрядной версией ни каких проблем нет. А с 64 разрядной я работал только с D, т.к. нет у меня 64 разрядной версии Форта. По большому счету, я не вижу большой необходимости в 64 разрядной версии, но в качестве эксперимента «раскрутил» и её. На данный момент я реализовал на QtE и D несколько «коммерческих» проектов (ПО на заказ). Всё 32 разрядное. Вот несколько скринов http://qte.ucoz.ru/index/screenshots/0-6 Может возникнуть вопрос, почему проекты на D а не на SPF например. Ответ – библиотеки, библиотеки и ещё раз библиотеки . Скорость написания на D раз в 10 выше скорости написания на Форте, именно благодаря стройному окружению. Интересное наблюдение. D активно использует интерпретацию, для предварительного разбора исходного кода. Отсюда такие Фортовские штучки, как CREATE … DOES>, там они называются активные шаблоны, или например предварительные вычисления. Всё, что компилятор может вычислить самостоятельно (типы, выражения, функции и т.д.) на этапе разбора, он вычисляет и активно использует при создании exe. За счет этого просто удивляет интеллектуальность компилятора. Предвижу вопрос, а причем тут вообще Форт? А при том, что D (на мой взгляд конечно) это то к чему надо двигаться Форту. Все исходные уже есть, только собрать всё в кучу проверить и написать документацию. Предвижу первый вопрос, тем более, что мне его уже задавали много раз. Зачем это всё нужно, QtE и всё такое. Ответ. Быстро написать кроссплатформенное приложение, используя мощь Qt и и при этом минимум инструментов, не заморачиваться с огромными IDE, компиляторами и т.д. Исходники QtE можно скачать с http://qte.ucoz.ru/load Готов ответить на вопросы. |
Автор: | mOleg [ Вт авг 05, 2014 20:49 ] |
Заголовок сообщения: | Re: QtE - "обёртка" для Qt. Windows 32/64 и Linux 32/64 |
Я так понял, для СПФ под вин32 вы не тестировали QtE от 060214 (я так понимаю, последний вариант). |
Автор: | gudleifr [ Ср авг 06, 2014 12:55 ] |
Заголовок сообщения: | Re: QtE - "обёртка" для Qt. Windows 32/64 и Linux 32/64 |
Воистину: Цитата: Мы сами куем свои собственные цепи... Взять высокоуровневую хрень и сделать ее еще более высокоуровневой, чтобы иметь возможность прицепить к совершенно высокоуровневой... Цитата: - Знаете, в чем беда этой страны, Андерсон? Слишком много деревень. Слишком много этих проклятых деревень - сотни, даже тысячи, и все похожи одна на другую. И слишком много в них людей. Если бы здесь не было такого множества удаленных друг от друга деревень, не было бы и войны и не надо нам было бы без конца ходить пешком. Вытащите-ка всех этих людей из деревень, сгоните их в один большой город - и не будет ни войны, ни маршей. А потом соберите ребят, которые служат в нашем Управлении экономической помощи и огребают по пятнадцать тысяч в год плюс деньжата на служебные расходы, и заставьте их изобрести большую машину, чтобы она сажала рис, и поливала рис, и пинала буйволов в зад, а потом собирала рис и посылала его в тот единственный город - пусть люди там делят его и едят. Вот тогда не будет войны и не будет американцев. Наша обязанность - дать им такие машины. /Вьетнам, 1968/ А я-то, дурак, со своим FOBOS... |
Автор: | mgw [ Ср авг 06, 2014 15:23 ] |
Заголовок сообщения: | Re: QtE - "обёртка" для Qt. Windows 32/64 и Linux 32/64 |
Сегодня смог собрать всё в кучу. Два архива: 1- SPF-420-QtE-Windows32.zip ссылка для скачивания: https://yadi.sk/d/gL5FVIi0ZAnLq 2 - spf-420-qte-linux32.zip ссылка для скачивания: https://yadi.sk/d/saGeqldGZAnRn Оба архива содержат полный каталог spf-420 с моими файлами QtE, консоли, вивера и всяких там мыслей. И там и там стоит самый свежий QtE. Исходники там же. Исходники QtE 32/64. Запуск: spf4 console.f - версия консоли форта, но со старой версией QtE spf4 console2.f - версия консоли форта, с новой версией QtE. Однако сама консоль не доделана увлекся D view.exe - просмотрщик с подсветкой файлов форта. Исходник view.f ff.exe и ffc.exe (ff.d и ffc.d) - быстрый поиск по файловой системе. ffc.exe - строит индексный файл, ff.exe - показывает и ищет. Мне очень помогает. У меня поиск по полному Linux 2 секунды, по Windows 3 секунды. Построить индексный файл: ffc.exe NameFileIndex.txt Dir1 Dir2 ... Работа с индексным файлом: ff.exe NameFileIndex.txt В версии windows лежит RunTime Qt 4.8.0 Windows 32, так что само Qt ставить не надо. В версии для Linux лежит qte.so. Обычно RunTime Qt в Linux уже присутствует. Если нет, то поставить пакет Qt.i686 Запуск файлов в Linux лучше делать через скрипты *.sh Например: sh console.sh В начале перехода на D я старался переписать QtE.f в QtE.d Обе они работают с QtE.dll. По этому частично они совместимы. Сейчас версия для D намного больше по возможностям версии для форта. Но у меня сейчас нет времени для развития версии для форта, быдлкодорство (как говорит gudleifr) задовило. |
Автор: | oco [ Ср авг 06, 2014 17:42 ] |
Заголовок сообщения: | Re: QtE - "обёртка" для Qt. Windows 32/64 и Linux 32/64 |
Offtopic mgw писал(а): ff.exe и ffc.exe (ff.d и ffc.d) - быстрый поиск по файловой системе. ffc.exe - строит индексный файл, ff.exe - показывает и ищет. Мне очень помогает. У меня поиск по полному Linux 2 секунды, по Windows 3 секунды. В Linux для этого есть команда locate /Offtopic |
Автор: | mgw [ Ср авг 06, 2014 18:13 ] |
Заголовок сообщения: | Re: QtE - "обёртка" для Qt. Windows 32/64 и Linux 32/64 |
Написать ff (поиск файла по имени) меня "сподвигла" одна контора. У них файловый сервер на котором более 600 тыс файлов, причем с чудными именами типа "……..\ «Ёлки в производстве» за 2013 год» ? доходности.xlsx". Поиск в этой "свалке" был ..... жуть. А тут как раз D увлекся, вот и "слепил" им. Индекс обновляется каждой ночью на сервере. Ну а потом перенес её на Linux. Посмотреть как там будет работать. На Linux вообще красиво смотрится А за locate - спасибо! Не знал. |
Автор: | mgw [ Вт авг 12, 2014 11:31 ] |
Заголовок сообщения: | Re: QtE - "обёртка" для Qt. Windows 32/64 и Linux 32/64 |
Вопрос: Что есть работающего из форта 64 разрядного? Хочу QtE на 64 разрядах протестировать. |
Автор: | VoidVolker [ Вт авг 12, 2014 18:05 ] |
Заголовок сообщения: | Re: QtE - "обёртка" для Qt. Windows 32/64 и Linux 32/64 |
gForth, iForth. |
Автор: | mOleg [ Ср авг 13, 2014 14:45 ] |
Заголовок сообщения: | Re: QtE - "обёртка" для Qt. Windows 32/64 и Linux 32/64 |
VoidVolker писал(а): iForth. на сколько знаю, платный? Есть у кого исходники сего форта? Интересно посмотреть внутрь. |
Автор: | KPG [ Ср авг 13, 2014 16:35 ] |
Заголовок сообщения: | Re: QtE - "обёртка" для Qt. Windows 32/64 и Linux 32/64 |
mOleg писал(а): VoidVolker писал(а): iForth. на сколько знаю, платный? Есть у кого исходники сего форта? Интересно посмотреть внутрь. Можно, в определённом виде получить дизасемблированный код для составления общего представления и далее по мере интереса просматривать полученный ассемблерный код (с вариантом перевода его в Форт, по возможности). Наверное можно и провести обратную сборку из асм лиcтинга полученного средствами SPF4 P.S. Есть некоторые "изыскания" в этом направлении "тела" VFX Форт системы, при наличии терпения читать асм код или обрабатывать листинг утилитами (из дампа кодофайла) для получения необходимой информации. Но задача дизасма плохо формализуема и специфична в путях её решения даже с применением Форт инструментария Могу проделать "черновой" пласт работы по IForth по заделу из VFX. |
Автор: | mOleg [ Ср авг 13, 2014 16:47 ] |
Заголовок сообщения: | Re: QtE - "обёртка" для Qt. Windows 32/64 и Linux 32/64 |
KPG писал(а): Можно, в определённом виде получить дизасемблированный код для составления общего представления не, это совсем не интересно. |
Автор: | mgw [ Чт авг 14, 2014 10:54 ] |
Заголовок сообщения: | Re: QtE - "обёртка" для Qt. Windows 32/64 и Linux 32/64 |
Поставил gForth 64 на Linux. Но с подключением DLL проблема. Он пытается вызвать внешний компилятор С (gcc) и при этом валится по ошибке (выкидывает исключение). Сам подход мне не нравится, на любой чих вызывать внешний компилятор. Пытался понять, что ему не хватает (gcc у меня стоит в полном объеме), но там довольно сложно. После SPF, где всё легко и просто, тяжко .... Порадовало, что в gForth есть OOP, правда не смотрел, как и что ... В общем, SPF 64 нужен ... без него тяжело |
Автор: | mOleg [ Чт авг 14, 2014 12:37 ] |
Заголовок сообщения: | Re: QtE - "обёртка" для Qt. Windows 32/64 и Linux 32/64 |
mgw писал(а): В общем, SPF 64 нужен ... без него тяжело что-то делал Михаил в этом направлении, пробегало тут недавно. На сколько качественно реализовано не знаю, не смотрел |
Автор: | VoidVolker [ Чт авг 14, 2014 13:49 ] |
Заголовок сообщения: | Re: QtE - "обёртка" для Qt. Windows 32/64 и Linux 32/64 |
mgw писал(а): Поставил gForth 64 на Linux. Но с подключением DLL проблема. Он пытается вызвать внешний компилятор С (gcc) и при этом валится по ошибке (выкидывает исключение). Сам подход мне не нравится, на любой чих вызывать внешний компилятор. Пытался понять, что ему не хватает (gcc у меня стоит в полном объеме), но там довольно сложно. После SPF, где всё легко и просто, тяжко .... Порадовало, что в gForth есть OOP, правда не смотрел, как и что ... В общем, SPF 64 нужен ... без него тяжело Он с си работает так примерно: Код: c-library socket \c #include <netdb.h> \c #include <unistd.h> c-function gethostname gethostname a n -- n ( c-addr u -- ior ) \c #include <errno.h> \c #define get_errno() errno c-function errno get_errno -- n ( -- value ) \c #include <sys/types.h> \c #include <sys/socket.h> c-function socket socket n n n -- n ( class type proto -- fd ) c-function closesocket close n -- n ( fd -- ior ) c-function connect connect n a n -- n ( fd sock size -- err ) c-function send send n a n n -- n ( socket buffer count flags -- size ) c-function recv recv n a n n -- n ( socket buffer count flags -- size ) c-function recvfrom recvfrom n a n n a a -- n ( socket buffer count flags srcaddr addrlen -- size ) c-function sendto sendto n a n n a n -- n ( socket buffer count flags srcaddr addrlen -- size ) c-function listen() listen n n -- n ( socket backlog -- err ) c-function bind bind n a n -- n ( socket sockaddr socklen --- err ) c-function accept() accept n a a -- n ( socket sockaddr addrlen -- fd ) \c #include <stdio.h> c-function fdopen fdopen n a -- a ( fd fileattr -- file ) \c #include <fcntl.h> c-function fcntl fcntl n n n -- n ( fd n1 n2 -- ior ) \c #include <arpa/inet.h> c-function htonl htonl n -- n ( x -- x' ) c-function htons htons n -- n ( x -- x' ) c-function ntohl ntohl n -- n ( x -- x' ) \c #define fileno1(file) fileno((FILE*)(file)) c-function fileno fileno1 a -- n ( file* -- fd ) \c #include <poll.h> c-function poll poll a n n -- n ( fds nfds timeout -- r ) e? os-type s" linux-gnu" str= [IF] c-function ppoll ppoll a n a a -- n ( fds nfds timeout_ts sigmask -- r ) \c #include <sys/epoll.h> c-function epoll_create epoll_create n -- n ( n -- epfd ) c-function epoll_ctl epoll_ctl n n n a -- n ( epfd op fd event -- r ) c-function epoll_wait epoll_wait n a n n -- n ( epfd events maxevs timeout -- r ) s" uname -r" r/o open-pipe throw dup >r slurp-fid r> close-pipe throw drop 2dup s" 3." string-prefix? >r drop free throw r> [IF] c-function recvmmsg recvmmsg n a n n a -- n ( sockfd hdr vlen flag timeout -- r ) c-function sendmmsg sendmmsg n a n n -- n ( sockfd hdr vlen flag -- r ) [THEN] [THEN] \c #include <netdb.h> c-function getaddrinfo getaddrinfo a a a a -- n ( node service hints res -- r ) c-function freeaddrinfo freeaddrinfo a -- void ( res -- ) c-function gai_strerror gai_strerror n -- a ( errcode -- addr ) c-function setsockopt setsockopt n n n a n -- n ( sockfd level optname optval optlen -- r ) end-c-library Этот код генерирует си-исходник, добавив к нему свои либы, отдает его GCC, который генерирует so-библиотеку. Напоминаю, что gforth64 есть только под линукс, под винду - только 32. При изменении кода внешней библиотеки надо удалить сгенерированную so-библиотеку (в домашнем каталоге пользователя). Репозиторий gforth тут: https://github.com/forthy42/gforth/ - самый свежий. Сборка в дистрибутивах популярных ОС отстает на год-три. СПФ64 под линуксом как бы есть: https://github.com/VoidVolker/spf64/ Это вот делал Михаил. Там еще куча багов, которые надо лечить. Я начал копать эту тему - но сейчас некогда :/ |
Автор: | KPG [ Пн дек 13, 2021 01:43 ] |
Заголовок сообщения: | Re: QtE - "обёртка" для Qt. Windows 32/64 и Linux 32/64 |
Интересно, что файл исходника qtforth_linux_source.zip на gcc по ссылке на этой страничке http://mgw.narod.ru/sourses.htm недоступен. (он, вероятно, одинаков с тем, что находится по ссылке из первого сообщения этого топика) P.S, spfqt_linux.zip из этого файла у меня выдал исключение при запуске, a qtforth нормально отработал и запустился в графике. Перекрёстная тема в статьях: Подключение графической библиотеки QT к SPF 4.20 и Qt-5 + Forth |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |