.NET или Mono vs Qt, какой для кроссплатформенной разработки? - PullRequest
16 голосов
/ 07 февраля 2009

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

Для программистов, которые могли использовать оба, какие функции будут упущены или желательны? И наоборот, что бы пользователь одного не нашел в другом с точки зрения парадигмы или какого-либо другого аспекта? О любом наборе инструментов можно многое сказать, но комментарии кого-то, кто использовал оба, были бы полезны.

Вот несколько связанных вопросов по теме:

Редактировать: Было бы целесообразно использовать Mono, только если Windows была одной из целевых платформ?

Ответы [ 7 ]

7 голосов
/ 10 сентября 2009

Вы бы выбрали Mono (и, возможно, C #) для кроссплатформенной разработки по той же причине, по которой кто-то выбрал бы Java или Python. Эти языки работают на виртуальной машине, и если вы будете осторожны при выборе библиотек и разработке кода, он будет работать на разных платформах (без перекомпиляции). Нативные языки (такие как C, C ++) имеют стандарты, поэтому язык на разных платформах один и тот же, но используемые вами параметры компилятора и библиотеки могут не быть кроссплатформенными (например, процессы, сетевые подключения и т. Д.).

Помимо технических проблем, знакомство с кроссплатформенным фреймворком экономит время. Например. Изучение библиотеки GUI может занять недели / месяцы. Очевидно, вы сэкономите время, если API будет одинаковым для всех целей.

Qt4 хорошо спроектирован, хорошо документирован и поставляется с некоторыми полезными, надежными инструментами. wxWidgets становится массовым с десятками виджетов, некоторые из которых вы никогда не будете использовать. Qt имеет меньше гибких виджетов. Раньше я довольно часто использовал wx, но теперь я конвертер Qt из-за лицензии LGPL, хороших документов, дизайнера, PyQt, новой IDE и растущей базы пользователей.

И Qt, и wxWidgets имеют привязки Python (т. Е. PyQt и wxPython), так что вы можете написать кросс-платформенный код GUI, используя эти библиотеки. Для Mono это более сложно, но есть GTK # и Qyoto. Я не пробовал ни одного из них, но они, кажется, достигли уровня, когда они достаточно зрелы, чтобы их можно было использовать (например, см. MonoDevelop).

5 голосов
/ 07 февраля 2009

Для кроссплатформенности (и уникальной платформы) я бы пошел на Qt, потому что он более чистый, чем Mono и Windows.Forms, а с шаблоном MVC все приложение легче развернуть и изменить

4 голосов
/ 07 февраля 2009

Я использую Qt4 для кроссплатформенной разработки и вполне доволен им. Развертывание работает отлично (по крайней мере, если вы связываете Qt статически, что совсем не сложно), API является действительно красивым и последовательным, а Qt Designer позволяет быстро разрабатывать части графического интерфейса, поэтому можно сосредоточиться на настоящая логика. Концепция сигналов и слотов мне тоже очень нравится после того, как я к ней привык.

Исходя из моего опыта, развертывание с wxWidgets сложнее (в моем случае это был именно Linux из-за зависимости от GTK, понятия не имею о Mac).

1 голос
/ 09 декабря 2012

Вот еще один вариант, который вы не упомянули, и я не заметил здесь упоминания, но Lazarus является кроссплатформенным и становится все более зрелым по мере продвижения вперед. Конечно, как что-то написанное в Qt, вам придется скомпилировать это для конкретных платформ. В моем случае я успешно использовал Lazarus в проекте, работающем на Mac OSX, Linux и Windows. Lazarus - хороший инструмент RAD, и Object Pascal хорошо работает для большинства вещей, которые я написал. Lazarus - хороший вариант для скорости приложения. Это хорошо сравнивается с программным обеспечением, написанным на C / C ++. Я не буду беспокоиться, чтобы поддержать это, есть тематические исследования, и вы можете провести собственное тестирование, если вам нужно.

Мое впечатление от кодирования в c # с использованием MonoDevelop было таким библиотечным, особенно html и аудио, немного сложным. Я только играл с c # / MonoDevelop в течение нескольких месяцев, так что я все еще новичок со всем комплектом. Я предполагаю, что за скорость приходится платить немного, поскольку это управляемый код. Опять же, я думаю, что исследование показало бы, что скомпилированный код чаще всего будет иметь преимущество в скорости перед кодом c # / .NET.

Конечно, другим вариантом будет Java. Я не так много там сделал, но это, конечно, повсеместно и работает хорошо, опять же, я ожидаю, что Java-код будет медленнее, чем код только для компиляции, такой как c / c ++ / Pascal.

Еще одна опция, которая приходит в голову - это компиляторы для трех основных платформ: Eiffel . Я не особо занимался этим в эти дни, но мне понравилось, когда я играл с ним. YMMV

1 голос
/ 07 февраля 2009

Возможно, вы можете написать большую часть приложения на переносимом языке / каркасе и написать отдельную «оболочку графического интерфейса» для каждой операционной системы, которую планируете поддерживать? Эта стратегия, конечно, может работать хорошо в некоторых случаях, но может ужасно проваливаться во многих других.

0 голосов
/ 07 февраля 2009

.NET не для кроссплатформенности. Кодировать и заставить его работать эффективно для MONO и .NET очень больно. Причина, по которой пользователи используют .NET больше, чем TCL / Tk, Qt или Java Swing, заключается в быстрой разработке приложений.

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

Инструменты GUI в целом трудны для работы, потому что вам нужно понимать основы. Основы: привязка данных, обрезка, обновление, менеджеры раскладки и обработка событий. Все эти концепции сложны для рядовых разработчиков. Причина в том, что большая часть этого абстрагируется с большим количеством современных инструментов. Например, с Java Swing мне не нужно ничего знать об отсечении или обновлении, поскольку они делают это «волшебно» для меня. Что происходит в случае, когда что-то волшебным образом не обновляется, тогда эта ситуация представляет собой практически невозможное решение. Код становится экспоненциально более сложным.

.NET обычно используется многими разработчиками пользовательского интерфейса, потому что его расширение очень просто. Создать метод расширения для расширения элемента управления очень легко. Создание метода для привязки данных становится еще проще благодаря инфраструктуре сущностей .NET. Однако стоит использовать этот инструмент RAD, поскольку он не зависит от платформы.

0 голосов
/ 07 февраля 2009

Рассматривали ли вы wxWidgets. Он также кроссплатформенный, C ++, как QT, и использует нативные элементы управления в отличие от QT и не требует какой-либо инфраструктуры для работы, как .NET.

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

Если производительность является критическим аспектом приложения, многие люди используют библиотеки C ++, такие как QT, wxWidgets.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...