вторник, 17 февраля 2009 г.

О Windows GUI

Чтение комментариев на различных новостных ресурсах порой весьма интереснее самой новости. Этот раз не стал исключением.

Не хочу, чтобы это выглядело холиваром, поскольку у меня в ленте есть и пользователи Windows, но цитата крайне доставляет:

">всё это создает большой оверхед, абсолютно не нужный на системах, имеющих свой api.

Вы исходники Windows видели? Я когда-то смотрел именно те части, которые занимаются отрисовкой. Огромная часть кода - не поддерживаемый код из далеких времен Windows 3.11, другая - наспех сколоченные обращения к 2D графическим функциям ядра.


А теперь по порядку. Winapi как такового не существует - это несколько dll, входящих в поставку винды и экспортирующих разные функции. Проблема в том, что с далеких времен Windows NT 3.x эти функции не претерпели изменений, за исключением нескольких нюансов. Изменение в winapi как оказалось вносить нежелательно, т.к. старые программы откажутся работать под новыми виндами, что мы и наблюдаем регулярно. Поэтому MS выдумала сначала MFC - это уже не winapi, это как раз "оверхед, абсолютно не нужный на системах, имеющих свой api". Но проблема оказалась не решенной и изменения вносить опять таки нельзя, можно только расширять существующую функциональность. От MFC отказались в пользу COM, те же dll, только с уникальным номером. И снова "новые технологии", и снова в бой - .Net, WinForms, библиотеки классов. То есть на каждый новый чих теперь создается новая Framework, а старая программа обязана требовать старый.


>кроссплатформенный фреймворк должен быть тонкой абстракцией или даже набором макросов для существующего api


А теперь вопрос, какой такой WinApi используют любые относительно новые Win приложения? И ежу понятно winapi - старый как говно мамонта, свой предел исчерпал ещё в далеком 2000 году с выходом Windows 2000.


Огромное преимущество Qt в том, что троллтехи без фанатизма отобрали те части винды, которые можно и нужно использовать, все, что необходимо было реализовать самим - реализовали сами."

Таки вопрос к тем, кто реально видел эти потроха. Неужели там реально всё настолько плохо, ил это всё же редкостное преувеличение. Как бы я не относился к этой системе, но подобное меня несколько гхм... пугает. Никто не просветит? Само обсуждение лежит здесь, если кому-то интересно.

2 комментария:

  1. Ты забыл ещё COM+ и ActiveX - те ещё весёлые технологии. Которые, собственно, лишь названием отличаются..

    Ну и наверное все мы знаем такое адское определение "DLL HELL" :-)

    PS Не зря его, кстати, придумали..

    Говоря честно, ну очень сложно сохранять обратную совместимость. Вот троллтехи смогли так сделать. Раз - и выкинуть все те программы, которые были написаны на QT3 и более того, достаточно агрессивно пересадить людей на QT4 (я ничего не напутал, могу ошибаться тут)

    А ребята, пилящие GTK2, действуют ну очень осторожно.. Понятно что вся ветка GTK2 - костыль на костыле, но по крайней мере, программы работают.

    Ух.. Прогресс.. Всегда что-то теряем :)

    ОтветитьУдалить
  2. С COM+ и ActiveX (особенно со со вторым) я натрахался в своё время как сисадмин. Поскольку программы необходимые для работы обслуживаемых мной манагеров требовали именно их.
    DLL HELL - да, та ещё помойка. В Linux/FreeBSD этого избежали, но тоже не без кривых решений. Но это значительно меньшее зло, если подумать.

    Что касается разработки QT4 - не всё так страшно. Там есть такая вещь, как qt3support. Они не идиоты, в конце-концов. А GTK это костыль на костыле в настоящий момент. Мигель Де Икаса это, похоже, признал. Поскольку GTK3, над которым он работает будет тоатльно несовместим с GTK2 да и вообще, похоже, написанным с нуля.

    ОтветитьУдалить