LINUX.ORG.RU

Планы по выпуску GTK+ версии 3

 


1

0

В списке рассылки gtk-devel-list обсуждаются планы выпуска GTK+ версии 3. Основные подготовительные действия, которые необходимо предпринять в текущей ветке:

  • Спрятать все открытые поля структур с помощью макроса GSEAL(). В случае необходимости предоставить новые методы доступа к этим полям. Также должны быть скрыты поля-указатели "priv" на структуры, содержащие закрытые данные. Эти действия уже практически полностью проведены в репозитории git://git.imendio.com/projects/gtk+.git
  • Реализовать закрытые члены класса, что включает изменения в коде GType.
  • Объявить как deprecated публичные данные класса с помощью макроса GSEAL().
  • Поскольку не останется простого способа для доступа к полям класса, а использование g_object_[sg]et() утомительно, необходимо ввести новые методы доступа, вроде g_object_get_int(), *double(), *string() и т.д.
  • Существует множество макросов, таких как GTK_WIDGET_GET_FLAGS(), которые всегда были причиной многочисленных проблем (см. bug #69872). Необходимо реализовать нормальные методы доступа (в виде функций) и избавиться от этих макросов.
  • GtkStyle, без сомнений, самый сложный тип, нуждающийся в скрытии публичных полей, и до релиза должно быть проведено множество исследований.
  • Избавиться от всего кода, объявленного deprecated в 2.x. Это подразумевает все соответствующие виджеты и функции.
  • Удалить все поля структур из публичного API. Есть два способа достичь этого:
    a) переместить все структуры в закрытые заголовки;
    b) переместить структуры в C-файл реализации, но тогда всей библиотеке придётся использовать соответствующие методы доступа.
    Эти варианты ещё обсуждаются.
  • Отключить deprecated-код по умолчанию во флагах компиляции.
Таким образом, версия 3.0 будет готова к релизу. Все приложения, которые собираются для ветки 2.x с макросом GSEAL() и не используют deprecated-кода, будут без проблем собираться для ветки 3.x. Наверное, таким образом разработчики пытаются избежать кошмара миграции, который можно видеть на примере библиотеки Qt.

>>> Подробности

★★★★

Проверено: JB ()

Ответ на: комментарий от anonymous

> Вот как у тебя всё весело. А тестировать кто будет? Или у тебя это калькулятор на 20.000 строк, 90% из которых - комментарии со смайликами?

Не угадал, программа средней сложности для работы с железом.

> 90% из которых - комментарии со смайликами?

Товарищ не любит комментарии в коде? Вижу "профессионала" ::))

anonymous
()
Ответ на: комментарий от V0ID

>Не так уж давно все С++ "компилеры" были препроцессорами к С.

хочу такой компилер... Это ж оно наверно в разы быстрей компилить будет %)

anonymous
()
Ответ на: комментарий от V0ID

>Не так уж давно все С++ "компилеры" были препроцессорами к С.

Я правильный делаю вывод: гтк'шники решили повторить то, что делалось 20 лет назад - прикрутить к С препроцессор?

anonymous
()
Ответ на: комментарий от V0ID

> Но сути это не меняет 8)

Нет, конечно. Си разрабатывался как портабельный ассемблер, и в него многие языки компилировались - Модула3, Эйфель, Scheme... Так что аргумент про "препроцессор в Си" к делу не относится совсем.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

> Mono, единственного вменяемого фреймворка под все платформы

<troll_mode>4.2 Единственный вменяемый фреймворк под все платформы - llvm+Tango...</troll_mode> Когда допилят... Но это тоже offtopic.

naryl ★★★★★
()
Ответ на: комментарий от anonymous

> Не угадал, программа средней сложности для работы с железом.

Железо vs. кривожопый порт. Попкорна мне.

> Товарищ не любит комментарии в коде? Вижу "профессионала" ::))

Обожаю. Но только если со смайликами.

anonymous
()
Ответ на: комментарий от anonymous

>>хочу такой компилер... Это ж оно наверно в разы быстрей компилить будет %)

>генту?

ты знал...

anonymous
()
Ответ на: комментарий от anonymous

>Ну покажи пример тонкого троллинга, я исправлюсь.

Перечитай эту тему сначала. Тему о экстрасенсах можно, о коровах летающих (это из последних). Творчество Батарейкина не помешает.

Потом приходи, будем проверять.

anonymous
()
Ответ на: комментарий от anonymous

> гтк'шники решили повторить то, что делалось 20 лет назад - прикрутить к С препроцессор?

Не, это Vala'исты. Gtk'шники настолько суровы, что решили обойтись стандартным Си-препроцессором.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

> Я правильный делаю вывод: гтк'шники решили повторить то, что делалось 20 лет назад - прикрутить к С препроцессор?

Страшно сказать, но цппшники до сих пор не рискуют множественную диспетчеризацию к своему чаду прикрутить. Хотя очень хочется.

mv ★★★★★
()
Ответ на: комментарий от xTERM

>К тому же Qt3 был монолитным, не забывай.

поясни

anonymous
()
Ответ на: комментарий от anonymous

Как по мне - то лучше иметь набор жестко специализированных макросов (читай препроц) чем весьма расплывчатый и труднопредсказуемый "универсальный" механизмЪ 8)

V0ID ★★★
()
Ответ на: комментарий от anonymous

> Я правильный делаю вывод: гтк'шники решили повторить то, что делалось 20 лет назад - прикрутить к С препроцессор?

Я правильно понимаю: цпп-шники решили забить на опыт последних 20 лет и сделать очередной велосипед с треугольными колёсами?

anonymous
()
Ответ на: комментарий от anonymous

> Независимого от языка.

Как минимум: в настоящем ООП языке объектом является ВСЕ. Включая функции и классы. Еще - в настоящем ООП язык должен быть способ узнать у объекта все его свойства-методы-...

Где это все в плюсах?

> Почему не использовать язык, где уже она есть?

Можно. Но только если он не крив как плюсы. Я люблю ООП, на уровне языка. Но к плюсам это не относится.

svu ★★★★★
()
Ответ на: комментарий от svu

> Видать, колючий кактус ООП на си все-таки не так наводит панику на мышей, как тортик с битым стеклом ООП на плюсах. Когда в плюсах можно будет менять объектную модель, не сваливаясь в обычный "С с парочкой синтаксических сахаринок" - тогда поговорим.

Вот что удивительно: все защитники "ООП на C" противопоставляют его C++, в то время как существует ещё довольно много других реализаций ООП.

gaa ★★
()
Ответ на: комментарий от svu

>Как минимум: в настоящем ООП языке объектом является ВСЕ.

Жаба и сишарп ... А царь ненастоящий!!!!

wfrr ★★☆
()
Ответ на: комментарий от svu

> Как минимум: в настоящем ООП языке объектом является ВСЕ

где это написано?

troorl ★★
()
Ответ на: комментарий от svu

>> + того, чего в С++ нет на уровне языка

>Вы зачем слова из моей головы достаете?!

закончу школу, зарегистрируюсь и своих слов понапридумываю))

anonymous
()
Ответ на: комментарий от gaa

Да, скажите на 7 страницах бреда ктонить упомянул objective-c на котором написана много в макоси? Нет. А почему? Потому что gtk с их Гов.обжектом садится в лужу и нервно курит .

wfrr ★★☆
()
Ответ на: комментарий от xTERM

> В какой-то степени это приемущество Gtk. Он делает то, что должен, и не больше. Нужны БД и прочее - обратитесь к соответствующим либам.

А потом трахайся с тем, что либа для работы с бд вернула тебе текст как wchar_t*, а не Glib::ustring. Ну ладно, настоящий индеец и это заборет кучей макросов и биндингов.

gaa ★★
()
Ответ на: комментарий от gaa

>> Видать, колючий кактус ООП на си все-таки не так наводит панику на мышей, как тортик с битым стеклом ООП на плюсах. Когда в плюсах можно будет менять объектную модель, не сваливаясь в обычный "С с парочкой синтаксических сахаринок" - тогда поговорим.

>Вот что удивительно: все защитники "ООП на C" противопоставляют его C++, в то время как существует ещё довольно много других реализаций ООП.

>Вот что удивительно: все защитники "ООП на C++" противопоставляют его C, в то время как существует ещё довольно много других реализаций ООП.

anonymous
()
Ответ на: комментарий от tailgunner

#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>

int main(int argc, char **argv) {
  void *handle;
  double (*cosine)(double);
  char *error;

  handle = dlopen ("/lib/libm.so.6", RTLD_LAZY);
  if (!handle) {
    fputs (dlerror(), stderr);
    exit(1);
  }

  cosine = dlsym(handle, "cos");
  if ((error = dlerror()) != NULL)  {
  fputs(error, stderr);
  exit(1)
  }

  printf ("%f\n", (*cosine)(2.0));
  dlclose(handle);
}

Это импорт произвольной, заметьте, именно _произвольной_ функции Си
с _произовольным_ именем _откуда угодно_. С++ нам такой легкости и красоты не предоставляет.

Советуется сделать следующий костыль, лишающий нас гибкости и удобства:

/*
 * cfuncs.cc
 */
#include <stdio.h>
#include <stdlib.h>
#include "myclass.h"

// These type of externs mean to export the function
extern "C" IUnknown* create() {
  return new MyClass;
}

extern "C" void destroy(IUnknown *p) {
  delete (MyClass*)p;
}

Притом это при использовании С++ в качестве целевого языка.

xTERM ★★
()
Ответ на: комментарий от gaa

> А потом трахайся с тем, что либа для работы с бд вернула тебе текст как wchar_t*, а не Glib::ustring. Ну ладно, настоящий индеец и это заборет кучей макросов и биндингов.

+1 Вы не сравнивайте RAD Qt и SAD GTK+какая-то_либа

troorl ★★
()
Ответ на: комментарий от gaa

> Вот что удивительно: все защитники "ООП на C" противопоставляют его C++, в то время как существует ещё довольно много других реализаций ООП.

4.2 Я защитник ООП на С. Я очень уважаю ООП на других языках (хотя чистый ОО встречается редко). Но я ООП на плюсах - это костыль. Если С - это ассемблер pdp11, возомнивший себя языком высогого уровня, то С++, это ассемблер pdp11, возомнивший себя ОО языком. Прыжок через два уровня (очень условной) иерархии языков породил уродца.

svu ★★★★★
()
Ответ на: комментарий от wfrr

Ты дохера программ написал на objective-c или С++? Чё ты всё время выпендриваешься неагрументированно?

anonymous
()
Ответ на: комментарий от Absurd

> Я бы задал вопрос о том что вообще в std:: есть полезного.

Не свети на весь ЛОР своей ограниченностью и осиль хотя бы std::list и std::map :) А там авось и до <algorythm> дело дойдёт

gaa ★★
()
Ответ на: комментарий от gaa

>Ну ладно, настоящий индеец и это заборет кучей макросов и биндингов.

Посмеялся)

xTERM ★★
()
Ответ на: комментарий от xTERM

> Советуется сделать следующий костыль, лишающий нас гибкости и удобства:

Не слушай этого человека, он над тобой издевается, а ты ведешься.

Мля, да посмотри ты на _реальный_ биндинг, не на игрушки из своей головы. PyGtk вполне подойдет.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Относится - по крайней мере в разрезе того вопроса на который я отвечал 8). Кстати, какую реализацию модулы3 Вы имеете ввиду ? Я что-то упустил, очевидно, - такая мне не попадалась. Подробнее если можно...

V0ID ★★★
()
Ответ на: комментарий от mitya79

>Что только не придумают люди, чтобы на C++ не переходить: Макро GSEAL(), указатели "priv", закрытые члены класса...

зато оно под mcs51 собирается и тормозит и тормозит

anonymous
()
Ответ на: комментарий от mv

>Страшно сказать, но цппшники до сих пор не рискуют множественную диспетчеризацию к своему чаду прикрутить. Хотя очень хочется.

А вот сишники взяли да и прикрутили? Или к чему вы клоните?

З.Ы. О замыканиях не забудьте

anonymous
()
Ответ на: комментарий от xTERM

>то импорт произвольной, заметьте, именно _произвольной_ функции Си

Буэ, белки ржут над хомяком запхавшим кактус за щеку. В яве это делается проще и безопаснее. Хуже того, автоматически.

wfrr ★★☆
()
Ответ на: комментарий от V0ID

> Кстати, какую реализацию модулы3 Вы имеете ввиду ?

IIRC, самая первая реализация Модулы3, в SRC, была сделана как транслятор в Си.

tailgunner ★★★★★
()
Ответ на: комментарий от svu

> 4.2 Я защитник ООП на С. Я очень уважаю ООП на других языках (хотя чистый ОО встречается редко). Но я ООП на плюсах - это костыль.

Ну и ладно. Но зачем огрызаться на мой пост про мышей и ООП на C словами, что "у вас в плюсах всё ещё хуже"? С логикой какие-то проблемы...

gaa ★★
()
Ответ на: комментарий от gaa

> Вот что удивительно: все защитники "ООП на C" противопоставляют его C++, в то время как существует ещё довольно много других реализаций ООП.

Ключевое слово - защитники. Соответственно, они защищают от нападо C++ников. Потому у не упоминаются другие языки.

atrus ★★★★★
()

>Теперь gtk r.i.p. ибо гтк не модульный и пособствует пропритеарщине своей лицензией.

anonymous
()
Ответ на: комментарий от anonymous

>> Я правильный делаю вывод: гтк'шники решили повторить то, что делалось 20 лет назад - прикрутить к С препроцессор?

>Я правильно понимаю: цпп-шники решили забить на опыт последних 20 лет и сделать очередной велосипед с треугольными колёсами?

цпп-шники как раз сидят с попкорном и смотрят на жалкие попытки сишников (точнее гтк-шников) прикрутить плюсовый велосипед к своему продукту

anonymous
()
Ответ на: комментарий от gaa

>Не свети на весь ЛОР своей ограниченностью и осиль хотя бы std::list и std::map

Мне хватает того что каждая *инстанциация* шаблона std::vector увеличивает бинарь на 4Кб.

Absurd ★★★
()
Ответ на: комментарий от xTERM

> Тем, кто спрашивает, почему тяжело делать байндинги к Qt: дело в том, что к классам С++ почти нереально подобраться из других языков. Си ф-ии можно вызывать непосредственно, поэтому доступ к Gtk из (в том числе) скриптовых языком можно осуществить почти непосредственно, не напрягаясь и не теряя производительность. Для С++ прийдется писать/юзать вропперы. Это сложно, тормознуто, и к тому же приводит по сути к корявому разбиению цпп классов на процедуры (что не надежно и запутанно). Добавьте сюда еще препроцессор moc от Trolltech, который в виде дополнительной надстройки к С++ еще больше все усложнит.

похоже вы никогда не писали биндинги, ваш пост имеет мало общего с действительностью :)

rudchenkos
()
Ответ на: комментарий от anonymous

объектную модель, не сваливаясь в обычный "С с парочкой синтаксических сахаринок" - тогда поговорим.

>Вот что удивительно: все защитники "ООП на C" противопоставляют его C++, в то время как существует ещё довольно много других реализаций ООП.

>Вот что удивительно: все защитники "ООП на C++" противопоставляют его C, в то время как существует ещё довольно много других реализаций ООП.

Идиот? На сабж посмотри.

gaa ★★
()
Ответ на: комментарий от svu

>4.2 Я защитник ООП на С. Я очень уважаю ООП на других языках (хотя чистый ОО встречается редко). Но я ООП на плюсах - это костыль. Если С - это ассемблер pdp11, возомнивший себя языком высогого уровня, то С++, это ассемблер pdp11, возомнивший себя ОО языком. Прыжок через два уровня (очень условной) иерархии языков породил уродца.

Нет я помню, что на ЛОРе, но мы кажется обсуждали прикручивание _тех_же_плюсовых_костылей_(с)svu к C? А не ущербность(с)svu плюсового ООП.

anonymous
()
Ответ на: комментарий от Absurd

>Мне хватает того что каждая *инстанциация* шаблона std::vector увеличивает бинарь на 4Кб.

В это время лемминги пишут ос на яве, а наш хаккер выйдя из вселенной оптимизации поймет как он отстал.

wfrr ★★☆
()
Ответ на: комментарий от anonymous

> tk, tk пиарь. История успеха же есть - tkLOR.

че вы гоните, мне, например, tkLOR очень нравится, только им и пользуюсь дома

респект gaa

rudchenkos
()
Ответ на: комментарий от Absurd

> Мне хватает того что каждая *инстанциация* шаблона std::vector увеличивает бинарь на 4Кб.

Да-да, а добавление новой переменной типа char увеличивает занятую память как минимум на 1 байт! АААААА!

gaa ★★
()
Ответ на: комментарий от anonymous

"Плюсовые костыли к С" - это не мой (с), это буйная фантазия кдешников, разыгравшаяся при виде топика.

svu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.