пятница, 19 февраля 2010 г.

Немного холивара на тему WPF и QT...

Немного холивара на тему WPF + XAML и QT + QML...

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


ДокладчикТема доклада
Семен ПроценкоQt: современный фреймворк для создания кроссплатформенных приложений
Сергей Герняк/А. КоробовВзгляд на WPF.net технологию, обзор возможностей и перспектив
Проценко/КоробовXAML vs QML: Конкуренты или параллельные технологии? Преимущества и недостатки




На мой субъективный взгляд, обе технологии являются флагманскими, и, очевидно, что особенно с официальным выходом коммерческой версии QML возникнет много вопросов на тему "а что лучше??" или "как сделать правильный выбор??" или "чем мотивировать выбор". Всем, конечно понятно, что C# .net и Native C++  - два разных мира. Оно то так, да вот только не совсем.

К сожалению, очень редко случается что WPF разработчик уделил достаточно внимания чтению о QT и смежных технологиях, что справедливо и в обратном направлении :)
Семинар был полезен, и немало сравнительных моментов было подобрано "в точку", но, к сожалению, я заметил и некоторую изоляцию в восприятии самих докладчиков, некоторое что ли непринятие позиции своего коллеги. А ведь нам нужны были не оппоненты, а именно коллеги - аналитики... Ну да ладно. Сравнение получилось в принципе неплохим, и, не будем более "мерятся размерами", а как разумные люди, будем учиться жить в той IT реальности, которую нам предоставляет жизнь. Итак, поговорим "об этом"...

Прежде чем окончательно перейти к делу, отмечу, что очень важно не отождествлять понятия QT и QML, хотя технологическая зависимость очевидна. Так же прошу всё таки не приравнивать XAML к WPF. Однако внимательный человек, не пропустит некоторого идеологического сходства между QML и XAML, хотя их тоже нельзя взвешивать и "измерять" по одинаковым критериям. Проведем именно  уместное сравнение.

Сперва по абзацу о каждой технологии:

QML - новая технология, родившаяся в рамках QT, позволяющая декларативно описывать UI, причем как и XAML, в отличие от ранее существовавших форматов хранения разметки формы (dfm, tcl/tk, wxWidgets), может описывать не только статические свойства элементов на форме, но и в значительной степени определять логику поведения. По сути на QML можно написать практически полноценное приложение, не обращаясь к C++ коду!

XAML - Декларативный язык описания UI в WPF .net приложениях. Одна из ключевых технологий декларативного программирования UI для WPF и Silverlight, плотно привязанная к .net, и, по сути, написание XAML хороший разработчик на C# идеологически не отделяет от написания эквивалентного C# кода, и очень хорошо осознает, что за каждым элементом XAML стоит "мнимый" код на C# (который, кстати, можно даже глазами увидеть :))

Так же не хочу затрагивать тему сравнения управляемого кода .net и native С++, она, безусловно, важна, но не является предметом этого поста. Важен момент, что в рамках текущих проектов, наша команда имеет уникальную возможность провести некоторый сравнительный анализ данных технологий, так как у нас есть активные WPF проекты и активные QT. Это дает надежду на то, что в этом блоге появятся эти соображения в виде постов :)

Для меня вообще всё просто - я влюблен в обе технологии и на уровне отношения .net/native и на уровне WPF/QT, ну и на уровне XAML/QML. У каждой есть свои прелести, неплохо обсужденные нами на семинаре. В этом блоге ожидается более подробный пост по каждой из этих технологий, с элементами сравнения, в этом же посте, ограничимся сравнительной табличкой:

Параметр сравнения QT/QMLWPF/XAML
Язык, лежащий в основеС++ (или любой, со спец. библиотеками - Python, Ruby и даже PHP!!!)В первую очередь C#, ну и любой .net язык
Возможность описания логики поведенияОчень серьезная возможность программирования, основанная по сути на JavaScript идеологии, видел много маленьких казуальных игрушек, написанных без C++Binding выражения и хитрости, основанные на использовании Dependency Property, Возможность описания workflow (последовательностей действия), анимаций - делает язык достаточно мощным
Сама структураJavaScript, JSON - like language, никакого XMLоснован на XML
Коммерческий релизТехнология ВОТ ВОТ должна обрести статус коммерческой и зрелой, и С++ QT сообщество с нетерпением ожидает выхода продукта. Технология зрелая, много коммерческого софта, базирующегося на WPF используется повсеместно
КроссплатформенностьФантастическая!!! Везде, где работает QT - то есть ОЧЕНЬ высокая портируемостьНикакой. И не стоит обманываться возможностью запуска .net приложений под mono на Linux или MacOS - Windows Forms приложения и веб службы там действительно работают, но WPF отсутствует напрочь!!!
Аппаратное ускорениеВозможно полное OpenGL аппаратное ускорение, но есть и GDI рендеригТолько DirectX аппаратное ускорение, и в системах, где графическое ядро слабое, зачастую эмуляция этих вещей заставляет процессор "поднапрячься"(если запуск вообще возможен)
Возможность кооперации Дизайнер - ПрограммистУдобно, но всё таки с уклоном на разработчика. Есть специальный софт для проектирования, думаю не будет уступать тулам Microsoft :) Возможно с выходом коммерческой версии появятся новые фичи.Действительно ОЧЕНЬ высокий уровень разделения труда, есть отдельное приложение Expression Blend, ориентированное исключительно на дизайн и разметку. Сам им пользовался - реально удобная вещь.
ЛицензияОжидается лицензия, аналогичная QT. Nokia ведет довольно демократичную политику лицензирования, подходящую и для крупного корпоративного клиента и для малобюджетного одиночного разработчика. Стоит сказать, что на QT реально сделать софт, НЕ ЗАПЛАТИВ ДЕНЕГ ЗА ЛИЦЕНЗИЮ, и продавать его как коммерческий, не открывая исходников. (Ограничения на внешнюю линковку библиотек и прочие мелочи)Всё как у майкрософт. :) Студию купил и продавай собранный продукт как хочешь. Ну и куча мелких деталей, о которых нет смысла говорить.
Примерчик :)Примерчик от Nokia можно посмотреть тут(пример идет с QT creator)

 Примерчик от Microsoft можно взять с TechDays.ru отсюда


Ожидается вторая часть семинара, так что продолжение следует... 

Очень хочется сделать сравнение кода, необходимого для создания аналогичного приложения. Думаю, совместно сможем найти время для этого.

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

  1. QT кстати идеально интегрится в студию, в том числе дизайнер, а .NET портируемым назвать можно только условно. Mono это скорее прикол типа языка брейнфак чем реальный продукт

    ОтветитьУдалить
  2. QML очень нравится... нестоит о Mono быть плохого мнения... всем смотреть на Unity 3D Engine, юзает Mono. очень популярный двиг причем вакансии даже в Киеве видел...

    Кстати WPF апликуху с бубном можно натянуть на MoonLight, и она запустится на Mono... но конечно есть ограничение, но для большинства решений этого хватит...

    QML по ресурсам будет намного легче + реально на ньом можно риалтайм прогу писать что нескажешь про WPF.

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