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 ()
Ответ на: комментарий от svu

>Ну давайте еще хвалить деревья за то, что они зеленые и растут. Это очевидные вещи.

тогда объясните толком, как _добавление функциональности_ влияет на те вещи, которые от этой функциональности не зависят?

>Вроде, Objective C как раз делался таким образом - и есть ощущения, что там кривизны меньше.

есть ощущения, что это извращения

>Не надо соединять несоединимое - получаются плюсы.

договорились =) потом посмотрим и сравним (в качественом плане) gtk3 и gt4.X =)

>Язык, провоцирующий ошибки - не пригоден таким же образом.

Ну да, assembler-suxx по вашей логике получается =)

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

> Конкретный пример с исходником в студию

Пример чего? Драйвера? Я надеюсь, у тебя ОС открытая, и ты сам найдёшь себе море примеров - не так ли?

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

> тогда объясните толком, как _добавление функциональности_ влияет на те вещи, которые от этой функциональности не зависят?

В плюсах очень активно юзается стек. Отсюда проблемы с системщиной.

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

>Убойный аргумент в споре о языках программирования. Наповал, вдребезги, навылет. "Хрусть - и пополам".

Да нет, просто тов.Absurd несколько не понимает, собственно, целей написания программ

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

>> Молодец, напиши шаблон для реализации паттерна Сигнал-Слот

>Щасс, шнурки вот поглажу, и сразу начну.

Я как-то написал шаблон который позволяет вызывать любой нестатический метод с сигнатурой void (?::*)(). Оставалось только добавить параметры и возможность их биндить. Ты тогда из треда исчез куда-то.

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

>> тогда объясните толком, как _добавление функциональности_ влияет на те вещи, которые от этой функциональности не зависят?

> В плюсах очень активно юзается стек.

Что, активнее, чем в Си? 8)

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

> Я как-то написал шаблон который позволяет вызывать любой нестатический метод с сигнатурой void (?::*)()

Ну то есть задача уже практически решена? И чем тебя бустовые сигналы не устраивают, кстати?

> Ты тогда из треда исчез куда-то.

Бывает.

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

>В плюсах очень активно юзается стек.

А в Си не юзается?! Нелепо.

>Отсюда проблемы с системщиной.

В Win32 c этим проблем нет, в линуксе никто не пробовал. Да и что вы сразу на системщину клоните, если мы изначально GUI подразумеваем?

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

> Логично.

Что именно "логично"? В Си и Си++ стек используется одинаково. Почитай, как происходил переход на 4К стеки.

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

>> Отсюда проблемы с системщиной.

> В Win32 c этим проблем нет, в линуксе никто не пробовал

Пробовали. sS как-то давал ссылку.

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

> тогда объясните толком, как _добавление функциональности_ влияет на те вещи, которые от этой функциональности не зависят?

Простите, вопрос не понял. По идее - никак.

> Ну да, assembler-suxx по вашей логике получается =)

Нет, с асмом все честно. Это минное поле, на котором написано "минное поле". По сути, С такой же (только там мины пореже). А вот плюсы - это хорошая асфальтовая дорога, настраивающая на быструю езду, но тоже с изредка попадающимися минами. Это я и называю провокациями.

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

>>>>"Добавление какой-либо функциональности не делает уже существующую хуже"

>>>А я говорю - делает. В случае плюсов.

>>Конкретный пример с исходником в студию

>Пример чего? Драйвера? Я надеюсь, у тебя ОС открытая, и ты сам найдёшь себе море примеров - не так ли?

Понял. Я имел ввиду добавление функциональности в язык - с этим будешь спрорить?

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

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

Замечательно сказано. Такое впечатление, что плюсофобы не заметили на входе вывески "Всё плохое, что с вами случалось в Си, случится и здесь".

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

> Понял. Я имел ввиду добавление функциональности в язык - с этим будешь спрорить?

Не-а, поработать надо. :)

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

не пойму ГДЕ вы нашли тонны макросов в GObject? на один GObject приходится ах 4(!) макроса, которые пишутся методом копипасты уже имеющихся и замены имен.

G_XXXX G_IS_XXXX G_XXXX_CLASS G_IS_XXXX_CLASS

далее, макросы в GTK - это просто обертки для проверки и установки битов в битовых масках, особо их много у GtkWidget. Напомнить, как это действие выражается в QT?

Иных макросов я при разработке не встречал, что я делаю не так?

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

4.2. В плюсах _почти_ спрятали многое из плохого С. Но добавили много гораздо более интересного плохого своего.

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

> не пойму ГДЕ вы нашли тонны макросов в GObject? на один GObject приходится ах 4(!) макроса, которые пишутся методом копипасты уже имеющихся и замены имен.

Тебе этого мало?

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

Ну тут же говорят товарищи - макросов в гтк НА ПОРЯДОК больше!;) Возможно, это двоичный порядок...

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

>> Я как-то написал шаблон который позволяет вызывать любой нестатический метод с сигнатурой void (?::*)()

>Ну то есть задача уже практически решена?

Метод без параметров малополезен. C параметрами и возвращаемым значением получится что-то типа

class Command<int, TypePair<int, TypePair<std::string, TypePair<std::string, NullType> > > >

Это подход Александреску. В Бусте используется другой подход, который автор подхода назвал "awful hackery".

>И чем тебя бустовые сигналы не устраивают, кстати?

В С++ нужно оставаться максимально аскетичным, чтобы чего-то добиться. Я уже ~третий раз это пишу в этом треде. Никаких std:: и бустов.

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

> Напомнить, как это действие выражается в QT?

В Qt:

class MyClass: public QWidget {
Q_OBJECT
и дальше обычное описание класса.

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

> В случае плюсов это не так. Иначе почему они абсолютно не годятся для системного программирования?

http://code.google.com/p/fuse-zip -- вполне себе системно и на плюсах.

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

> на один GObject приходится ах 4(!) макроса

Да, и у меня всё же получилось 6, плюс ещё одна тупая структура и одна тупая функция. в Qt НИЧЕГО из этого нет.

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

> 4.2. В плюсах _почти_ спрятали многое из плохого С

4.2 там не прятали вообще ничего. Дали свои, новые, средства, но ничего не прятали. Впрочем, теперь я начинаю понимать корни плюсофобии - люди считают себя обманутыми.

> Но добавили много гораздо более интересного плохого своего.

Не так, чтобы много, но добавили.

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

Absurd, ты С от С++ отличиить не можешь, как ты можешь рассуждать об отсутствии наследования и полиморфизма в последнем?

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

>> И чем тебя бустовые сигналы не устраивают, кстати?

> В С++ нужно оставаться максимально аскетичным, чтобы чего-то добиться. Я уже ~третий раз это пишу в этом треде. Никаких std:: и бустов.

Это очень разумный подход, но всё же - чем не устраивает (кроме awful hackery)? Не думаю, чтобы тоже самое нельзя было реализовать без буста (а мы говорим о самой возможности реализации, так?).Тот же Gtk - это куда более awful hackery, в куда больших количествах.

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

>Прочитай ещё раз внимательнее то, что я писал выше. Даже комментировать по существу не стану.

Так и думал, что никто не поймет =)

Я придирался к терминологии - "объектный" и "объектно-ориентированный" =)

Ну и пищу для флейма подбросил

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

> там не прятали вообще ничего.

4.2 - если smart pointers не являются попыткой спрятать опасность обычных сишных указателей, то я архиерей.

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

> Тот же Gtk - это куда более awful hackery, в куда больших количествах

Ни разу ни хакерство. Это просто часть образа жизни в С ;)

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

да, 6. я забыл еще два. у в QT - тупой класс.

кстати, вопрос - есть ли в QT аналог двухфазного уничтожения объектов, как в GObject?

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

>Лучше тем, что там нету перегрузок операторов, которые ИМХО великое зло.

Чем они зло? Тем, что быдлокодер может фигню наваять? Вы сомневаетесь в возможности написать нечитабельный код на голом С?

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

быдло как раз ты, вечно лезешь с умными словами про семантику и аггрегацию, и тут ВНЕЗАПНО получается упс - C от С++ отличить не смог.

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

>Тот же Gtk - это куда более awful hackery, в куда больших количествах.

Не более чем любой C++ API. Взять те же Message Crackers из WTL например, где в макросе LPRECT конвертируется в CRect& с помощью reinterpret_cast.

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

>> там не прятали вообще ничего.

>4.2 - если smart pointers не являются попыткой спрятать опасность обычных сишных указателей, то я архиерей.

Почему тогда new A() возвращает обычный A* ? А vector<> - он является попыткой спрятать Си-массивы? :D

Еще раз, медленно и печально - в Си++ входит весь Си89. Философия TIMTOWTDI прилагается.

P.S. А [тв]ы точно не архиерей?

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

>быдло как раз ты, вечно лезешь с умными словами про семантику и аггрегацию, и тут ВНЕЗАПНО получается упс - C от С++ отличить не смог.

Это когда я сравнивал BoZo.c и BoZo.cс и ошибся консольной коммандой ? Я тогда кстати не обнародовал результат - вариант на stdio работал быстрее в два раза и размер имел меньше в два раза. При этом объем кода был тот же.

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

>> Тот же Gtk - это куда более awful hackery, в куда больших количествах.

> Не более чем любой C++ API. Взять те же Message Crackers из WTL например

Ну да, WTL - это уже прям-таки "любой" C++API.

> конвертируется в CRect& с помощью reinterpret_cast

Ужоснах. Но немного странно, что ты постояно приводишь в пример WTL, ATL и прочее Win-only.

Речь идет о конкретном случа сигналов в бусте - есть к ним какие-гнибудь претензии, кроме awful hackery by Alexandrescu? Или там тоже reinterpret_cast.

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

>4.2 - если smart pointers не являются попыткой спрятать опасность обычных сишных указателей, то я архиерей.

Ок, как по-вашему должно было бы быть? Программист не обязан знать, как работает инструмент?

anonymous
()

мое скромное мнение - с и с++ отличные языки, и ООП в с++ на уровне достаточном, чтоб реализовать практические необходимые задачи, вещи вроде smart_ptr легко реализовать самому без всяких boost и называть это костылями имхо глупо, это конкретная реализация механизма, думаю если глянуть в сырцы джавы, питона и т.п. то там прописаны такие же "костыли" ИМХО

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

> Почему тогда new A() возвращает обычный A* ?

Потому что смарты не являются примитивным базовым типом, слишком много пришлось бы ломать (и опять-таки совместимость с C пошла бы лесом).

> Философия TIMTOWTDI прилагается.

Есть понятие good practices для выбора одного пути. И для плюсистов, насколько я понимаю, они включают в себя два списка: как не налететь на мины обычного С и как не налететь на мины плюсов.

> P.S. А [тв]ы точно не архиерей?

Еще вчера им не был, вроде...

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

> да, 6. я забыл еще два. у в QT - тупой класс.

Не тупой, в нем заложена вся функциональность. В GTK объявляется две структуры - одна описывает объект, другая его тип (вот она тупая).

> кстати, вопрос - есть ли в QT аналог двухфазного уничтожения объектов, как в GObject?

Не ведаю что это такое, но всем и без него хорошо.

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

> Ок, как по-вашему должно было бы быть?

В тру ОО языке указатели не нужны.

> Программист не обязан знать, как работает инструмент?

А при чем тут это?

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

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

+1, сразу вспоминается пример Джоэля про маляра

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

Флейм посвященный выпуску GTK+ версии 3

переименуйте уже тему во "Флейм посвященный выпуску GTK+ версии 3"

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

Т.е. Вы предлагаете просто переименовать тему просто во "Флейм"? Тогда весь топ-лист на первой страничке будет выглядеть как "Флейм-Флейм-Флейм-..."

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

>> Не более чем любой C++ API. Взять те же Message Crackers из WTL например

>Ну да, WTL - это уже прям-таки "любой" C++API.

Вполне себе Alexandrescu Style - множественное наследование от шаблонов, каждый из которых закладывает какой-то аспект поведения класса. Плюсофилы должны быть довольны.

>Речь идет о конкретном случа сигналов в бусте - есть к ним какие-гнибудь претензии, кроме awful hackery by Alexandrescu?

Нахрен мне нужно вместе с каждым своим cpp файлом компилировать несколько сотен килобайт из std:: и буста?

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

По-моему, логично.

# gcc BoZo.cc

# gc BoZo.c

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