Russian Qt Forum
Ноябрь 25, 2024, 12:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: Qt binding к языку программирования D.  (Прочитано 33902 раз)
Eldar
Гость
« : Октябрь 26, 2008, 22:57 »

Раньше я программировал на С++ и Qt все устраивало, да захотелось новых ощущений - решил попробовать D - понравилось настолько что теперь возвращаться на плюсы абсолютно не хочется. Это тема отдельного разговора.
С D я использовал долгое время gtk - все устраивало вроде, по возможностям это очень близкие тулкиты, но если начинать копать в глубь - то гтк намного отстает от Qt. Родилась идея сделать биндинг. Последнюю неделю занимаюсь этим вплотную и столкнулся с большой проблемой - виртуальные функции. С обычными методами Qt классов все в порядке - создаем extern C прослойку для каждого метода:
Код:
extern (C) int QWidget_minimumWidth(QWidget* widget)
{
    return widget->minimumWidth();
}
А далее цепляем этот набор Си функций в коде D и воссоздаем новый объект обертку с реализующий такой же набор методов.
С виртуальными функциями сложнее:
Код:
class QWidget_Proxy: public QWidget
{
   Q_OBJECT
   public:
      QWidget_Proxy(QWidget* parent = 0);

      void ancestor_mousePressEvent(QMouseEvent* qme);
      virtual void mousePressEvent(QMouseEvent* qme);
}

void QWidget_Proxy::ancestor_mousePressEvent(QMouseEvent* qme)
{
   mousePressEvent(qme);
}

void QWidget_Proxy::mousePressEvent(QMouseEvent* qme)
{
   Dispatch_QWidget_MousePressEvent(this, qme);
}
Dispatch_QWidget_MousePressEvent - это extern C функция объявленная в Ди которая вызывает по умолчанию ancestor_mousePressEvent - то есть реализацию по умолчанию для виджета. Если мы унаследуемся в Ди коде - то все будет в порядке - будет вызвана новая реализация.
Проблема начинается тогда когда мы таким же методом создадим к примеру QPushButton_Proxy - он будет наследоваться от QPushButton, а этот в свою очередь от QWidget. Но реализацию виртуальных методов мы же сделали для QWidget_proxy - то есть для унаследованных классов схема с proxy - не  будет работать. Где-то слышал, что в биндингах перехватывают виртуальные функции - но это ведь связано с модификацией vtable[] - что большое зло. У кого-нибудь есть какие-нибудь соображения на этот счет?
Записан
Detonator
Гость
« Ответ #1 : Октябрь 27, 2008, 09:50 »

Может не страдать а писать просто на C++?
Мне вот тоже хочется писать под Qt на C# вместо C++, но ничего, терплю Улыбающийся
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #2 : Октябрь 27, 2008, 10:13 »

Создали бы топик - зто за язык D.

PS: А лучше начать с языка A. Что за мода называть язык 1 буквой - я раньше еле находил статьи по C. Сорри, отвлекся.
Записан
Rcus
Гость
« Ответ #3 : Октябрь 27, 2008, 10:39 »

http://www.digitalmars.com/d/index.html
Вам не кажется что писать биндинги к такой библиотеке как Qt непосильная задача для одного человека? Не вдаваясь в детали в Qt очень много специфичных решений (но если так хочется думаю вам можно посмотреть на Qt Jambi, PyQt(+SIP) и т.д.)
Записан
ритт
Гость
« Ответ #4 : Октябрь 27, 2008, 10:55 »

[offtop]
"я написала этот вирус на связке паскаля, объектного си, жавы, ассемблера и некоторых малоизвестных языков..." ©какой-то_старый_тупой_фильм

Код:
specs* s = new specs;
// no need for '->'
s.count = args.length;
надо это xintreya показать Улыбающийся
[/offtop]

я не понял почему схема с прокси не будет работать (точнее, в чём сама суть проблемы).
и хотелось бы услышать чем д превосходит с/с++, что плюсы уже обзывают "устаревшим" языком?
« Последнее редактирование: Октябрь 27, 2008, 11:31 от Константин » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Октябрь 27, 2008, 12:35 »

Вроде как D - сверхвысокий язык программирования. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
constvipn
Гость
« Ответ #6 : Октябрь 27, 2008, 12:36 »

Мне вот тоже хочется писать под Qt на C# вместо C++, но ничего, терплю Улыбающийся

Что мешает? По крайней мере под Linux: http://qyoto.org/
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Октябрь 27, 2008, 12:41 »

У D, насколько я понял, есть в C компиль. Хотя утверждать не буду. Легче в вики посмотреть.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Detonator
Гость
« Ответ #8 : Октябрь 27, 2008, 17:08 »

Что мешает? По крайней мере под Linux: http://qyoto.org/

Линукс мешает Улыбающийся
Записан
SASA
Гость
« Ответ #9 : Октябрь 27, 2008, 17:34 »

Что такое D, и с чем его едят Непонимающий Может кто кинет ссылочку на обзорную статью.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #10 : Октябрь 27, 2008, 17:39 »

Что такое D, и с чем его едят Непонимающий Может кто кинет ссылочку на обзорную статью.

НАшел немного инфы на википедии: D (язык программирования)
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #11 : Октябрь 27, 2008, 17:43 »

Предлагаю перенести обсуждение языка D и С++ в другую тему: http://www.prog.org.ru/topic_7933_0.html
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #12 : Октябрь 28, 2008, 00:29 »

Вам не кажется что писать биндинги к такой библиотеке как Qt непосильная задача для одного человека? Не вдаваясь в детали в Qt очень много специфичных решений (но если так хочется думаю вам можно посмотреть на Qt Jambi, PyQt(+SIP) и т.д.)

Если писать биндинги только к тем вещам, которые используются из Qt в конкретном проекте, то вполне посильная для одного человека.

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

Что-то подсказывает что здесь по вашему вопросу вряд ли помогут. Хотя бы до тех пор, пока вы не поясните Константину, почему схема с прокси не будет работать и в чём сама суть проблемы. Улыбающийся
Записан

Собираю информацию по крупицам
http://webhamster.ru
ритт
Гость
« Ответ #13 : Октябрь 28, 2008, 15:51 »

http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.announce&article_id=13832
мне сложно представить как можно писать на Д и получать удовольствие, если между обновлениями _столько_ изменений (в т.ч. и в сторону синтаксиса/логики)!
и ещё мне интересно: Д стандартизован? где-нибудь можно почитать стандарты языка Д?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #14 : Октябрь 28, 2008, 16:00 »

и ещё мне интересно: Д стандартизован? где-нибудь можно почитать стандарты языка Д?

Я также заинтересовался этим вопросом. Искал - не нашел.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 23.