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 ()

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

Справедливости ради, в жабе очень нужен компилятор хороший. Еще больше - хорошая vm. Впрочем, это как "нативщикам" нужен хороший проц;)

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

> В идеальном ОО - да;)

CL-USER> (defvar aaa 123)
AAA
CL-USER> (class-of aaa)
#<BUILT-IN-CLASS FIXNUM>

:)

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

>Программируя на С, я не думаю про асм, если это специально не нужно.

Ну не про асм, так про что-нибудь другое. Неужели на подкорке не сидит что-то вроде "так, массив-указатель-индекс-сдвиг-граница-не выйти-...." ?

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

> Я просто в этом топике хочу внести лепту в его мучительную смерть

не хочется разочаровывать, но этим вы вносите лепту только в наш общий флуд :)

> А как мне из метода интерфейса вернуть массив? Делать враппер с виртуальными функциями вокруг std::vector, да?

stl это не с++, а одно из расширений, которое каждый выбирает под себя, как я уже говорил я часто использую wx, причем не только для гуи, в wxBase( это часть wx без гуи ) огромное кол-во удобнейших кроссплатформенных классов для самых разных задач, которые в принципе заменили мне vector, map и т.д., так что я просто передаю wxHashMap, wxArray, wxList, wxHashSet и т.д., если не брать во внимание баги wx с гуем, то это отличнейшая библиотека, которая зачастую делает ненужным использование stl, boost и т.п. при этом позволяя писать очень лаконичный и простой код, вобщем мысль была в том, что как я уже писал - язык широкого применения ничто без большого списка подобных "расширений", которые собственно и облегчают жизнь, выбор конкретной реализации уже за вами, да и всегда можно один раз написать заготовку( у меня когда-то было отдельная папка с ними - пока не подсел на wx и они стали не нужны )

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

Это не асм. Это управление памятью. Главное, что ничего не спрятано - нет никаких операций, кроме указанных мной явно (или через вызов функций, опять-таки явный).

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

>Только это слишком многа букав для того чтобы сделать еще один долбаный класс.

Ну уж никак не больше, чем в языке, изначально для ООП не предназначавшемся, правда же? ;)

Да и не так много на самом-то деле. Если опуститься до абсурда (каламбур, блин.... я сейчас не про твой ник, я про обычный абсурд) и забыть про все остальные плюсы pimpl, то даже время, потраченное на написание этих "многабукаф" с лихвой окупится при очередной перекомпиляции проекта, когда ты внесёшь изменение в cpp-файл и перекомпилять придётся только его (в сравнении со внесением изменений в h-файл и перекомпиляцией _всего_, что его инклюдит) ;)

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

>Главное, что ничего не спрятано - нет никаких операций, кроме указанных мной явно (или через вызов функций, опять-таки явный).

Что там Саныч про двери говорил?

В С можно леХко забабахать какую-нибудь хрено вроде

#define free(x) my_super_cool_free(x)

и огрести по полной программе, если реализовать эту my_super_cool_free() криво. Но никто же не заставляет, да? Как и в плюсах никто не стоит с плёткой и не заставляет перегружать операторы присваивания.

Или.... ?

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

Во-первых, препроцессор, формально, не часть языка. Я вообще могу его выкинуть или поменять на другой (встречал таких бойцов)

Да, можно такую фигню сморозить. Но такие подлянки встречаются крайне редко - замещение стандартных функций. Случайно их не сделать.

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

> и огрести по полной программе, если реализовать эту my_super_cool_free() криво.

А можно набрать aodf8hsadpiaju nc8r y70*& *&^R07*^t(*t>god( O(?6З9/7 86УЗ9Ц876И З/8В СЫ8, и оно вообще ничем не скомилируется

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

а мужики то не знают! (с)

человек просто имел ввиду, что утверждение "ничего не спрятано - нет никаких операций, кроме указанных мной явно" на самом деле не верно, надо читать на два поста "вглубь"

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

достаточно сделать #include на сторонний хеадер с подобным #define, только не говорите, что вы не пользовались хедерами "со стороны", или пользовались, но обязательно проверяли их на предмет подобных "фич"

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

> достаточно сделать #include на сторонний хеадер с подобным #define, только не говорите, что вы не пользовались хедерами "со стороны", или пользовались, но обязательно проверяли их на предмет подобных "фич"

Конечно, не использовал.

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

> достаточно сделать #include на сторонний хеадер с подобным #define, только не говорите, что вы не пользовались хедерами "со стороны", или пользовались, но обязательно проверяли их на предмет подобных "фич"

Вспоминается #define true false

Кстати, макросы -- это вообще минное поле для любителей считать, что они контролируют процесс. Таки что выведет код:

#include <stdio.h>
#define MAX(x,y) ((x>y)?x:y)

int main(int argc, char **argv) {
int a=1, b=3;
printf("%d\n",MAX(a++,++b));
return 0;
}

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

>> int - объект?

>В идеальном ОО - да;)

Я бы сделал его псевдообъектом если бы делал такой язык. Ранняя пессимизация все же тоже не приносит ничего хорошего.

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

Ну вот в жабке с автобоксингом оно как-то так. Дуально. Когда надо - примитивный тип. Когда надо - объект.

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

> Ну вот в жабке с автобоксингом оно как-то так. Дуально. Когда надо - примитивный тип. Когда надо - объект.

А в скале оно всегда объект. Она конечно чуть потормознее жабы, но, думаю, не из за этого.

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

> Во-первых, препроцессор, формально, не часть языка.

Как это не часть? Как раз формально часть, а практически его можно поменять. В стандарте чётко описывается препроцессор, его поведение и прочая.

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

>stl это не с++, а одно из расширений, которое каждый выбирает под себя, как я уже говорил я часто использую wx, причем не только для гуи, в wxBase( это часть wx без гуи ) огромное кол-во удобнейших кроссплатформенных классов для самых разных задач, которые в принципе заменили мне vector, map и т.д., так что я просто передаю wxHashMap, wxArray, wxList, wxHashSet и т.д., если не брать во внимание баги wx с гуем, то это отличнейшая библиотека

А теперь представь себе код который вынужден тянуть за собой и wx-барахло из одного модуля и std::/boost:: - барахло из другого модуля и какие-то велосипелы из третьего модуля.

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

1. только не говори, что можно написать любой большой проект не пользуясь сторонними либами

2. сразу видно незнание предмета( хотя конечно вам это знать просто не надо ) - как я уже писал std::/boost::/велосипелы из третьего модуля при использовании wx просто не надо, т.к. он абсолютно самодостаточен - он умеет на высоком уровне работать и с html, и со шрифтами, и форматов изображений понимает большой кол-во( включая png, tiff, gif, xpm, pcx, tga и т.п. ), и с потоками, и со строками, и с различными представлениями данных, и с различными форматами архивов, и с принтерами, и с PostScript, и svg, и т.д. и т.п. - продолжать можно очень долго, причем релизный .so весит чуть больше 1Мб, хотя опять же дело вкуса чем пользоваться

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

>как я уже писал std::/boost::/велосипелы из третьего модуля при использовании wx просто не надо, т.к. он абсолютно самодостаточен - он умеет на высоком уровне работать и с html,

Да, NIH-синдром характерен для плюсоводства, я в курсе.

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

Насчет общего плюсоводства - я не знаю. Но вот что стек кутя-кде является одним большим порождением NIH-синдрома, это научный факт...

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

> что стек кутя-кде является одним большим порождением NIH-синдрома, это научный факт...

Нунифигасебе... NIH - это Гном, вспомни историю.

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

При чем тут история? Гном использует кучу сторонних либ (в том числе с fd.o). КДЕ всеми силами старается этого не делать. Хотя чем дальше, тем хуже у него это получается.

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

Появление - да. Но это одно мгновение. А потом всю дорогу NIH демонстрировал КДЕ - а гном спокойно использовал все, что ему нужно.

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

>> При чем тут история?

>При том, что Гном появился как результат NIH у RedHat.

Причины там были куда более серьезные чем чьи-то программистские предпочтения.

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

> Появление - да.

Ну я вообще-то отвечал на "стек кутя-кде является одним большим _порождением_ NIH-синдрома" - Qt при рождении была уникальна, KDE - тоже. Может быть, сейчас степень NIH у KDE выше, но и Гном его не избежал.

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

> При том, что Гном появился как результат NIH у RedHat.

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

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

В чём уникальность KDE была? Бесплатная DE, написанная на небесплатном для бизнеса плюсовом тулките?

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

>> При том, что Гном появился как результат NIH у RedHat.

> А какой в наличие до этого был десктоп, который можно было включать в дистрибутив, предназначенный для коммерческого применения?

Блин. Я этих флеймов 10 лет назад начитался.

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

Вы поняли мою мысль, мне кажется;)

Да, и насчет рождения - все-таки это некая передержка, считать гном продуктом NIH. Первичным поводом была лицензия, а это чуть больше чем NIH

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

> Блин. Я этих флеймов 10 лет назад начитался.

Ну а чего опять их поднимаешь? :) Сам ведь понимаешь, для чего редхату нужен был гном.

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

Например, ядро Линуса - это стопроцентный NIH

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

ну прям детский сад :) wxWidgets - КРОССПЛАТФОРМЕННАЯ библиотека, которая просто интегрирует в себе многие вещи, чтоб ими было пользоваться как можно удобнее не думая про переносимость кода( т.к. это уже сделано ), надо сохранить в произвольный формат изображения? пишешь img->Save( "./pic.gif", wxBITMAP_TYPE_GIF ), а не начинаешь добавлять в проект кучу либ под каждый тип файла, а потом руками прописывать switch'и, то же самое для работы с архивами, или когда тебе пофиг в каком формате строки( UTF8, cp1251, koi8 и т.п. ), когда не надо помнить в какую сторону разделитель в пути файла, или для конца строки, wxWidgets - это не переписывание кода, это комплекс готовых решений, никто не писал специально для wx-а какие-то другие libjpeg, expat, zlib, webkit и т.п., они просто обьединены для более удобного использования, если у тебя есть лучший вариант - я слушаю :)

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

>В чём уникальность KDE была? Бесплатная DE, написанная на небесплатном для бизнеса плюсовом тулките?

Наверное то что она на плюсах. Сам Строуструп даже стандартную curses библиотеку для плюсов не родил.

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

>> Блин. Я этих флеймов 10 лет назад начитался.

> Ну а чего опять их поднимаешь? :)

Йа? o_O Кто тут про NIH начал?

> Сам ведь понимаешь, для чего редхату нужен был гном.

Да, они хотели иметь DE, развитие которого можно было контролировать.

> Например, ядро Линуса - это стопроцентный NIH

Ядро Линкса - это студенческая поделка, оказавшаяся в нужное время в нужном месте. Для тех, кто прогуливал историю - в 1992-м году перспективы BSD были более чем туманными из-за судебной тяжбы UCB и AT&T, а Hurd просто не было. Поэтому народ поставил на Линукс.

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

> Для тех, кто прогуливал историю - в 1992-м году перспективы BSD были более чем туманными из-за судебной тяжбы UCB и AT&T, а Hurd просто не было. Поэтому народ поставил на Линукс.

Вот я ровно про то же. Гном и линукс - это политика, как бы не хотелось велосипедами их считать. А KDE - не политика.

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

простите, но сайт fsf.org говорит нам, что "FSF started developing the Hurd in 1990", более того ранее Столлман писал другое ядро

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

> сайт fsf.org говорит нам, что "FSF started developing the Hurd in 1990"

Ну да. Однако в 1992 его всё еще не было в сколь-нибудь пригодном для использования виде.

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

Говорят, что Hurd до сих пор нельзя есть.

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

>Ядро Линкса - это студенческая поделка <> 1992

Никто до 95-96 на линукс не ставил. Первые коммерсанты - КрасноШляпы появились лишь в 95, акционировались в 99. Про нужное время правильно - проэкту ГНУ нужно было ядро, но никто (кроме Столлмана) серьезно его не воспринимал. Тем, что сейчас, линукс сделала лицензия.

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

> Никто до 95-96 на линукс не ставил.

4.2

> Первые коммерсанты - КрасноШляпы появились лишь в 95, акционировались в 99

Linux _продавали_ уже в 1992.

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

>4.2

Ну, и кто, кроме батки, к нему не как к фофану относился? Из серьезных.

>Linux _продавали_ уже в 1992.

Продать я его и сейчас могу соседу за полтинник, но бизнес мне на этом не сделать.

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

>Продать я его и сейчас могу соседу за полтинник, но бизнес мне на этом не сделать.

Продавать мало - маленький бизнес, продавать много - большой бизнес

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

А дьявол, в данном случае, как раз в масштабах.

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

>> 4.2

> Ну, и кто, кроме батки

Столлман его как раз не продавал :) Его продавали хзкто - тем, кто хотел Unix, но не хотел платить офигенные бабки за SCO или просто бабки за Microport. Т.е. - для обучения, для надомной разработки, для задач, в которых раньше использовался ДОС и наколенные системы.

> но бизнес мне на этом не сделать.

На продаже 4,2BSD бизнеса вообще не делали, и что? Речь идет о том, что Линукс подходил для достаточно широкого круга задач, чтобы обеспечить себе достаточное для развития количество пользователей и разработчиков. BSD - подходила гораздо меньше, Hurd - не подходил совсем.

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

>Столлман его как раз не продавал :)

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

>Его продавали хзкто - тем, кто хотел Unix, но не хотел платить офигенные бабки за SCO или просто бабки за Microport. Т.е. - для обучения, для надомной разработки, для задач, в которых раньше использовался ДОС и наколенные системы.

Т.е никто на него серьезно не ставил, ЧИТД.

>Речь идет о том, что Линукс подходил для достаточно широкого круга задач, чтобы обеспечить себе достаточное для развития количество пользователей и разработчиков.

Истинно так.

>BSD - подходила гораздо меньше

С момента определенности ничуть не меньше, где-то даже быстрее развивалась, но у нее начались проблемы, когда в линукс пошли серьезные дяди с кошельком - у ГПЛ есть бизнес-модель, у БСДЛ - нет.

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