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

>>Даст ошибку вида "неоднозначная конструкция", т.к приватные методы
 и данные компилятор рассматривает равноправно с публичными и 
отвергает в самый последний момент, при проверке прав доступа. В 
данном случае до проверки доступа компилятор не дойдет и отвалится 
раньше с "неоднозначной конструкцией".

Вижуал ?

Потому что gcc-4.1 говорит

vec.cpp: In function ‘int main(int, char**)’:
vec.cpp:7: error: ‘void Bar::foo(int)’ is private
vec.cpp:13: error: within this context

$ cat vec.cpp

class Bar
{
 public:
     void foo(double f);
 private:
     void foo(int f);
};

int main(int, char**)
{
    Bar b;
    b.foo(21);

    return 0;
}

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

>Вижуал ?

Ну вообще, по стандарту он должен отвалиться в "неоднозначностью", т.к есть неявная конверсия int->double.

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

>>Ну вообще, по стандарту он должен отвалиться в "неоднозначностью", т.к есть неявная конверсия int->double.

У тебя каша в голове. man method overloading

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

>>Ну вообще, по стандарту он должен отвалиться в "неоднозначностью", т.к есть неявная конверсия int->double.

>У тебя каша в голове. man method overloading

man Sutter 2005. И man Stroustrup "C++ - Эволюция и дизайн" ("Как я рожал ёжиков").

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

>Вижуал ?

>Потому что gcc-4.1 говорит

Да у него где ни копни чуть глубже --- везде мелкомягкие уши вылезают. Когда детство безнадёжно покалечено Вижуал Сиплюсплюсом --- остаётся только посочувствовать.... =\

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

class Bar { public: void foo(long f); private: void foo(short f); };

int main(int, char**) { Bar b; b.foo(21);

return 0; }

main.c: In function ‘int main(int, char**)’: main.c:12: ошибка: вызов перегруженной ‘foo(int)’ имеет неоднозначную трактовку main.c:4: замечание: претенденты: void Bar::foo(long int) main.c:6: замечание: void Bar::foo(short int)

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

class Bar { public: void foo(long f); private: void foo(short f); };

int main(int, char**) { Bar b; b.foo(21);

return 0; }

main.c: In function ‘int main(int, char**)’: main.c:12: ошибка: вызов перегруженной ‘foo(int)’ имеет неоднозначную трактовку main.c:4: замечание: претенденты: void Bar::foo(long int) main.c:6: замечание: void Bar::foo(short int)

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

class Bar
{
 public:
   void foo(long f);
 private:
   void foo(short f);
};

int main(int, char**)
{
    Bar b;
    b.foo(21);

    return 0;
}

main.c: In function ‘int main(int, char**)’:
main.c:12: ошибка: вызов перегруженной ‘foo(int)’ имеет неоднозначную трактовку
main.c:4: замечание: претенденты: void Bar::foo(long int)
main.c:6: замечание:              void Bar::foo(short int)

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

"Вижуал Сиплюсплюс" просто оболочка с компилятором( причем достаточно качественная после установки VisualAssist ) - она не заставляет писать кривой код :) есть более страшные IDE, xCode например - жутко раздражают его тормоза, ограниченность и глюки, "повбывав бы" (с)

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

>Ну вообще, по стандарту он должен отвалиться в "неоднозначностью", т.к есть неявная конверсия int->double.

Ух ты!!! Да ну?? А-бал-дееееть.... А Страуструп в курсе?

P.S.: только не вздумай ему писать --- помрёт же дядька....

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

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

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

>"Вижуал Сиплюсплюс" просто оболочка с компилятором( причем достаточно качественная после установки VisualAssist )

"Кролик --- это не только ценный мех, но и 2-3 кг легко усваиваемого диетического мяса". Так, о чём это я.... ах, да: Вижуал Сиплюсплюс это не только IDE, но ещё и довольно... хм... своеобразная реализация стандарта (понятно же, что имелся в виду не сам devenv.exe, а всё его сопутствующее хозяйство вроде cl.exe сотоварищи....)

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

>своеобразная реализация стандарта

безупречная реализация стандарта Microsoft C++

//fixed

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

> Вижуал Сиплюсплюс это не только IDE, но ещё и довольно... хм... своеобразная реализация стандарта

Емнип, к тому самому devenv.exe можно и mingw-g++ прикрутить.

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