Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 23:54

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Qt-5 + Forth
Автор Сообщение
  Заголовок сообщения:  Re: Qt-5 + Forth  Ответить с цитатой
Консоль для управления forthD. Этакая заявка на IDE.

https://yadi.sk/d/sFSsybY1qs68J

В архиве все необходимое для запуска в Windows 32.
Файлов много, т.к. содержит Qt-5 RunTime 32.
Сообщение Добавлено: Вс апр 10, 2016 09:22
  Заголовок сообщения:  Re: Qt-5 + Forth  Ответить с цитатой
kzagradskiy писал(а):
Теперь на SP-Forth можно Qt-приложения писать без лишних "танцев с бубнами".

Это уже осуществимо на более высоком уровне, причем из SPF-420 для Qt 4.8.
http://qte.ucoz.ru/load/qte_ot_080913/1-1-0-4#comments

Если взять и переписать ( немного :D ) модуль qte.f под вызовы Qt-5 .... можно творить чудеса!

Ну а если совсем помечтать, то можно взять forthd и переписать его на 64 разряда. Всё для этого есть :D
Сообщение Добавлено: Вс мар 13, 2016 19:36
  Заголовок сообщения:  Re: Qt-5 + Forth  Ответить с цитатой
kzagradskiy писал(а):
Всё заработало -- спасибо. Нюанса с поиском dll я не знал. Надо бы это в документацию по SP-Forth добавить. Теперь на SP-Forth можно Qt-приложения писать без лишних "танцев с бубнами".

Вообще-то это стандартная логика поиска пути dll в ОС windows - текущий каталог, каталог запуска, системные каталоги.
Сообщение Добавлено: Вс мар 13, 2016 19:30
  Заголовок сообщения:  Re: Qt-5 + Forth  Ответить с цитатой
mgw писал(а):
Всё работает ...

Кстати, при запуске:
c:\spf420\spf c:\rt5\ff.f
поиск всех dll начнется в каталоге c:\spf420 а не в каталоге c:\rt5

Всё заработало -- спасибо. Нюанса с поиском dll я не знал. Надо бы это в документацию по SP-Forth добавить. Теперь на SP-Forth можно Qt-приложения писать без лишних "танцев с бубнами". Эту программку можно добавить в репозиторий на Github, как действующий пример работы для SP-Forth. Назвать её более информативно чем "ff.f", например "spf_sample.f".

Код:
\ Файл: spf_sample.f
\ Описание: выводит на экран окно About для Qt
\
\ Пошаговый примерный алгоритм:
\ 1 - Скачать чистый дистрибутив SPF-420 и распаковал его в папку C:\SPF420
\ 2 - Скачать c github архив с QtE5. Из него содержимое папки rt_Qt5_windows32 скопировать в каталог C:\SPF420
\ 3 - Cкопировать в каталог C:\SPF420 файл QtE5-master\QtE5Widgets32.dll
\ 4 - Файл spf_sample.f с примером запустил прямо в каталоге C:\SPF420
\ Кстати, при запуске:
\ c:\spf420\spf c:\rt5\spf_sample.f
\ поиск всех dll начнется в каталоге c:\spf420 а не в каталоге c:\rt5

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
S" app = new QApplication(argc, s3, 1);" TYPE CR
0 s3 argc qteQApplication_create1 VARIABLE app app !  \ app = new QApplication(argc, s3, 1);
S" app.aboutQt();" TYPE CR
app @ qteQApplication_aboutQt  \ app.aboutQt();

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

S" --1--" 1+ TYPE \ Визуализация загрузки
. . . . . \ Проверка стека на выходе
Сообщение Добавлено: Вс мар 13, 2016 19:01
  Заголовок сообщения:  Re: Qt-5 + Forth  Ответить с цитатой
1 - Скачал чистый дистрибутив SPF-420 и распаковал его в папку C:\SPF420
2 - Скачал c github архив с QtE5. Из него содержимое папки rt_Qt5_windows32 скопировал в каталог C:\SPF420
3 - Cкопировал в каталог C:\SPF420 файл QtE5-master\QtE5Widgets32.dll
4 - Создал файл f.f с примером и запустил прямо в каталоге C:\SPF420

Вот как выглядит:
Код:
Directory of C:\SPF420

13.03.2016      9:17  <DIR>         .
13.03.2016      9:04  <DIR>         ..
13.03.2016      9:04  <DIR>         devel
13.03.2016      9:04  <DIR>         docs
13.03.2016      9:17           881  f.f
22.01.2003      7:19           299  help.fhlp
26.02.2008     11:07        39,424  JPF375C.EXE
13.03.2016      9:04  <DIR>         lib
21.12.2014     19:07       119,822  libgcc_s_dw2-1.dll
21.12.2014     19:07     1,026,062  libstdc++-6.dll
21.12.2014     19:07        49,152  libwinpthread-1.dll
13.03.2016      9:09  <DIR>         platforms
20.02.2016      5:04     5,391,360  Qt5Core.dll
12.10.2015     22:31     5,334,528  Qt5Gui.dll
12.10.2015     22:37     6,541,824  Qt5Widgets.dll
12.03.2016     22:09        37,376  QtE5Widgets.dll
07.03.2016      5:04        33,792  QtE5Widgets32.dll
13.03.2016      9:04  <DIR>         samples
21.01.2009     20:38       112,128  spf4.exe
15.11.2006     22:42           328  spf4.ini
13.03.2016      9:04  <DIR>         src
13.03.2016      9:04        26,233  uninstall.exe
      14 files               18,713,209 bytes
       8 directories     36,530,601,984 bytes free

C:\SPF420>type f.f
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
1 s3 argc 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 @ qteQWidget_setVisible DROP \ win1.setVisible(true);
app @ qteQApplication_exec DROP \ app.exec();

. . . . . \ ╧ЁютхЁър ёЄхър эр т√їюфх

Всё работает ...

Кстати, при запуске:
c:\spf420\spf c:\rt5\ff.f
поиск всех dll начнется в каталоге c:\spf420 а не в каталоге c:\rt5
Сообщение Добавлено: Вс мар 13, 2016 10:27
  Заголовок сообщения:  Re: Qt-5 + Forth  Ответить с цитатой
mgw писал(а):
В SPF аргументы идут в противоположном порядке ...

Таким образом для SPF правильным будет:
Код:
1 s3 argc qteQApplication_create1 VARIABLE app app !  \ app = new QApplication(argc, s3, 1);
....
1 win1 @ qteQWidget_setVisible DROP \ win1.setVisible(true);

Может пригодится: http://mgw.narod.ru/doc.htm

Поменял последовательность параметров на стеке, теперь qteQApplication_create1 запускается, но не может найти путь к qwindows.dll. Теперь подробнее алгоритм запуска:
1) Скачал rt_Qt5_windows32.zip
2) Распаковал rt_Qt5_windows32.zip в папку rt_Qt5_windows32
3) Скачал QtE5Widgets32.dll (у меня Windows XP 32-bit)
4) Скопировал QtE5Widgets32.dll в папку rt_Qt5_windows32
5) В папке rt_Qt5_windows32 создал файл с исходным кодом от сюда же и запустил.

Выдает следующее сообщение:
Код:
This application failed to start because it could not find or load the Qt platform plugin Windows

и окошко с текстом: "Runtime error!"

Погуглил в сети: самое адекватное решение нашел здесь [https://habrahabr.ru/post/188816/]. Но для этого нужно добавить биндинг для QCoreApplication::libraryPaths(); и для QCoreApplication::setLibraryPaths(paths);
Код:
int main(int argc, char *argv[])
{
    Q_INIT_RESOURCE(resources);

    QStringList paths = QCoreApplication::libraryPaths();
    paths.append(".");
    paths.append("imageformats");
    paths.append("platforms");
    paths.append("sqldrivers");
    QCoreApplication::setLibraryPaths(paths);

    QApplication a(argc, argv);

    a.setQuitOnLastWindowClosed(false);

    QDbc::init();

    MainWindow w;
    w.showFullScreen();

    a.exec();

    QDbc::finalize();
}

Это если без установки официального дистрибутива Qt5.

Попробую установить дистрибутив. Видимо вся проблема в путях.
Сообщение Добавлено: Вс мар 13, 2016 06:21
  Заголовок сообщения:  Re: Qt-5 + Forth  Ответить с цитатой
В SPF аргументы идут в противоположном порядке ...

Таким образом для SPF правильным будет:
Код:
1 s3 argc qteQApplication_create1 VARIABLE app app !  \ app = new QApplication(argc, s3, 1);
....
1 win1 @ qteQWidget_setVisible DROP \ win1.setVisible(true);


Может пригодится: http://mgw.narod.ru/doc.htm
Сообщение Добавлено: Вс мар 13, 2016 00:16
  Заголовок сообщения:  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)
Сообщение Добавлено: Сб мар 12, 2016 22:41
  Заголовок сообщения:  Re: Qt-5 + Forth  Ответить с цитатой
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 слов.
Сообщение Добавлено: Сб мар 12, 2016 10:44
  Заголовок сообщения:  Re: Qt-5 + Forth  Ответить с цитатой
mgw писал(а):
...
Накидал пример. Используется форт 32 на D ( Спасибо Олегу! ) и RunTime rt_Qt5_windows32.zip с github.
...
Что за "форт 32 на D"? Можно ссылку на него?
Сообщение Добавлено: Сб мар 12, 2016 08:19
  Заголовок сообщения:  Re: Qt-5 + Forth  Ответить с цитатой
Новая статья на хабре по теме QT (может будет чем то полезна)
Костылик для сигнал-слот системы в Qt
Сообщение Добавлено: Пт мар 11, 2016 00:36
  Заголовок сообщения:  Re: Qt-5 + Forth  Ответить с цитатой
gudleifr писал(а):
Что же, проводим еще одного коллегу. Счастливого пути!

Раз это к никому не адресовано, то логика подсказывает что это что то сугубо личное и обозначает личные "переживания" :)
P.S. Однако, похвально. Зачем Perl, C#, Питон? Бейсик наше Всё! :hey;
Сообщение Добавлено: Вт мар 08, 2016 23:47
  Заголовок сообщения:  Re: Qt-5 + Forth  Ответить с цитатой
Когда-то, в рамкам проекта "визуализации" FORTH, я писал:
Цитата:
...мимо котлована и тупичка к далекому городу мечты на горизонте (нет, не так - к верхнему городу, нависающему над берегом на огромных ржавых сетчатых клепанных фермах) протянута ветка скоростного трамвайчика. С надписями "Perl", "C#", "Python"... на вагончиках. Какие-то оборванные люди с вещмешками выбираются из котлована и тайком походят к кассе, шепча: "До города..."
Что же, проводим еще одного коллегу. Счастливого пути!
Сообщение Добавлено: Вт мар 08, 2016 23:38
  Заголовок сообщения:  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 для форта.

По возможности готов отвечать на вопросы.
Сообщение Добавлено: Вт мар 08, 2016 16:23
  Заголовок сообщения:  Re: Qt-5 + Forth  Ответить с цитатой
Скачал, Затем с сайта narod. который указан на странице, скачал версию
для linux С самого гитхаба скачать почему то не удалось а в zip архиве не было.
Запустид консоль
load hello.zim
Крнсоль захлопнулась
Ошибка сегментирования
Сообщение Добавлено: Пн мар 07, 2016 21:32

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


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