Немного холивара на тему 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/QML | WPF/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 отсюда |
Ожидается вторая часть семинара, так что продолжение следует...
Очень хочется сделать сравнение кода, необходимого для создания аналогичного приложения. Думаю, совместно сможем найти время для этого.
QT кстати идеально интегрится в студию, в том числе дизайнер, а .NET портируемым назвать можно только условно. Mono это скорее прикол типа языка брейнфак чем реальный продукт
ОтветитьУдалитьQML очень нравится... нестоит о Mono быть плохого мнения... всем смотреть на Unity 3D Engine, юзает Mono. очень популярный двиг причем вакансии даже в Киеве видел...
ОтветитьУдалитьКстати WPF апликуху с бубном можно натянуть на MoonLight, и она запустится на Mono... но конечно есть ограничение, но для большинства решений этого хватит...
QML по ресурсам будет намного легче + реально на ньом можно риалтайм прогу писать что нескажешь про WPF.