Forth
http://fforum.winglion.ru/

Forth++
http://fforum.winglion.ru/viewtopic.php?f=4&t=2674
Страница 1 из 8

Автор:  mgw [ Вт окт 26, 2010 18:17 ]
Заголовок сообщения:  Forth++

Достоинства Форта известны. Это и расширяемый синтаксис, и встроенный ассемблер и т.д. и т.п. Однако позиционировать его можно только на уровень языка С. Кстати отсюда стремление народа написать Форт ОС. И это реально. Пишут же на С операционные системы.

Однако современная действительность требует взаимодействия языка программирования с объектно-ориентированными библиотеками, которые в большинстве написаны на C++. И Python и Java объектные с низу до верху. Вот если бы с Форта (с SPF например) можно было бы использовать объекты С++ из DLL или SO, это дало бы мощнейший толчок популяризации форта, как языка программирования.

Нужно модернизировать C-CALL для вызова конструкторов или написать новый вариант, например C-CALL++.

Может быть, сосредоточимся на реализации ОО в Фоте (Forth++) и попытаемся научиться использовать С++ библиотеки из Форта?

Автор:  mOleg [ Вт окт 26, 2010 18:34 ]
Заголовок сообщения:  Re: Forth++

Объекты делали для разных Форт-систем все, кому не лень. Для того же СПФа этих вариантов было...

Автор:  mgw [ Вт окт 26, 2010 18:36 ]
Заголовок сообщения:  Re: Forth++

Я не об объектах, а об использовании С++ библиотек из Форта …

Автор:  Antender [ Вт окт 26, 2010 19:19 ]
Заголовок сообщения:  Re: Forth++

А ничего и не мешает использованию библиотек. Посмотрите /devel в SP-Forth.

Автор:  mgw [ Вт окт 26, 2010 19:28 ]
Заголовок сообщения:  Re: Forth++

Цитата:
А ничего и не мешает использованию библиотек. Посмотрите /devel в SP-Forth.

Мешает Name Mangling in C++ (перегрузка имен), передача параметров в конструктор и т.д. Конечно, можно взять компилятор C++, написать wrapping (обертку) на объекты (при этом потеряв наследование) и получить очередную DLL или SO. Потом подключить её к Форту и т.д., а вот как использовать объекты непосредственно с Форта? И возможно ли это вообще?

Автор:  Ilya [ Вт окт 26, 2010 19:32 ]
Заголовок сообщения:  Re: Forth++

Antender писал(а):
А ничего и не мешает использованию библиотек. Посмотрите /devel в SP-Forth.

И примеры вызова ООП-ных есть?
Например QT. ;)

Автор:  ArtemKAD [ Вт окт 26, 2010 19:58 ]
Заголовок сообщения:  Re: Forth++

mgw писал(а):
Вот если бы с Форта (с SPF например) можно было бы использовать объекты С++ из DLL или SO, это дало бы мощнейший толчок популяризации форта, как языка программирования.

А в DLL есть объекты? Насколько помню они исчезают сразу после компиляции.
Ну а вызов функции из dll-ки примерно так:

WINAPI: FreeLibrary KERNEL32.DLL

и дальше работаешь с ней как с обычным словом...

Автор:  mgw [ Вт окт 26, 2010 20:19 ]
Заголовок сообщения:  Re: Forth++

Судя по ответам выше я не могу раскрыть суть проблемы.
Попробую на примере:
Задача, имея SPF и имея QtGui.dll и QtCore.dll (и ни чего более) с SPF инициализировать графическую оболочку Qt, вызвать конструктор (например QWidget(…)) и отобразить на экране полученное окошко. Только и всего :)

Автор:  Antender [ Вт окт 26, 2010 20:24 ]
Заголовок сообщения:  Re: Forth++

WINAPI: Init QtСore.dll
WINAPI: QWidget QiGui.dll
Init
QWidget

Что-то в этом духе

Автор:  mgw [ Вт окт 26, 2010 20:33 ]
Заголовок сообщения:  Re: Forth++

так не получиться ... из за Name Mangling in C++ (перегрузка имен), передача параметров в конструктор и т.д.

Автор:  Гость [ Ср окт 27, 2010 05:55 ]
Заголовок сообщения:  Re: Forth++

mgw писал(а):
а вот как использовать объекты непосредственно с Форта? И возможно ли это вообще?

Вариант: использовать объекты через COM (да, это возможно)

Автор:  mgw [ Ср окт 27, 2010 10:51 ]
Заголовок сообщения:  Re: Forth++

Можно подключиться и напрямую к DLL с объектами. Пример http://mgw.narod.ru/algoritms.htm#fromDLLCPP Но это макет. А вот ввести бы в SPF поддержку такого механизма было бы очень хорошо!

Автор:  mOleg [ Ср окт 27, 2010 14:48 ]
Заголовок сообщения:  Re: Forth++

mgw писал(а):
А вот ввести бы в SPF поддержку такого механизма было бы очень хорошо!

вводите

Автор:  mgw [ Ср окт 27, 2010 18:16 ]
Заголовок сообщения:  Re: Forth++

Проблема в C-CALL при вызове конструктора. В win вроде работает, а в Linux нет. В чем проблема понять не могу. Тут нужен спец по ассемблеру. Моих знаний не хватает :(

Автор:  chess [ Чт окт 28, 2010 14:39 ]
Заголовок сообщения:  Re: Forth++

mgw писал(а):
Проблема в C-CALL при вызове конструктора. В win вроде работает, а в Linux нет.

Смотрим в SPF420:
Код:
CODE C-CALL ( x1 ... xn n adr -- res)
\ Порядок экспортируемых аргументов обратный, по сравнению
\ со словами API-CALL (spf_win_api.f) и CAPI-CALL (~af/lib/c/capi.f).
\ Порядок обращается при их переносе на R-стек.

     MOV EBX, [EBP]      \ число аргументов
     MOV ESI, # 4
@@1: OR EBX, EBX
     JZ @@2
\     PUSH [EBP] [ESI]
A;   0xFF C, 0x74 C, 0x35 C, 0x00 C,
     LEA ESI, 4 [ESI]
     DEC EBX
     JMP @@1
@@2: CALL EAX
     MOV ECX, [EBP]
     SHL ECX, # 2
     ADD ESP, ECX
     ADD ECX, # 4
     ADD EBP, ECX
     RET
END-CODE

Код выполняет копирование параметров со стека параметров на стек возвратов, затем идет
вызов по адресу в EAX и убирание параметров со стека параметров. В EAX после вызова процедуры должен оказаться ее результат.
Видим несоответствие комментария и самого кода:
Код:
   \  PUSH [EBP] [ESI]
A;   0xFF C, 0x74 C, 0x35 C, 0x00 C,


тут должно быть
Код:
\ PUSH [ESI][EBP]
A;   0xFF C, 0x74 C, 0x2E C, 0x00 C,

Это просто навскидку, сам окнами и GUI не занимаюсь, тем более в Linux, поэтому ничего не проверяю.

Страница 1 из 8 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/