Python/PyQt vs C++/Qt для миграции с .NET. Что выбрать?

Всю профессиональную деятельность работаю с .NET (C#/F#), знаю, нуу… неплохо, из других языков был опыт с Java и AS3. Сейчас сложилась такая ситуация, что заказчик (очень могущественный и самодурственный) для заказа требует исключительно программы под linux, причем под строго определенные сборки, в которые нельзя инсталлировать пакеты просто так (думаю многие догадались, что речь идет о МСВС и AstraLinux, которые имеют сертификаты МО). Из средств разработки там только Qt (слава богу достаточно свежий), gcc и python.


Собственно вопрос, если я априори примерно одинаково разбираюсь и в C++ и в Python (т.е. представляю что это такое, но никогда не программировал больше пары десятков строк), что лучше выбрать с точки зрения удобства разработки и минимизации возможностей выстрелить себе в ногу?


В PyQt .ui файлы приходится постоянно пересобирать в .py как я понял, редактировать во внешнем редакторе, ну и плюс динамичность меня немного отпугивает. Да еще сам PyQt придется на конечной машине из исходников собирать, ну это ладно.

С другой стороны с C++ тоже как бы понятно, что проблем от него после стольких лет привычки к тому же GC стоит ждать немало. Да и как-то жаль расставаться со всеми функциональными плюшками, которые в pythone вроде как имеются.

В тяжких раздумьях.
  • Вопрос задан
  • 9306 просмотров
Пригласить эксперта
Ответы на вопрос 10
ShpuntiK
@ShpuntiK
Если для вас что питон, что си++ одно и то же в данных условиях, то я бы выбрал си хотя бы потому, что c# очень с ним схож. Qt для с++ хороший вариант и документация отличная.
На питоне не писал, так что там плюсов и минусов не знаю.
Ответ написан
@BrainHacker
Однозначно Python + PyQt. Хотя бы потому, что:
1) сложно выстрелить себе в ногу
2) очень большое количество дополнительных библиотек для Python

Имел опыт написания морды для небольшой БД на Linux при помощи Python + PyQt. Написал за ночь. На плюсах я бы неделю корячился, чтобы только окошко вывести…
Ответ написан
ldir
@ldir
Для Qt родной язык C++, родная документация тоже описывает С++ версию, Qt так-же оказывает помощь в управлению памятью. Если задача ответственная, то важно, что С++ имеет статическую проверку кода и сильную типизацю, программу же на Python нужно тщательнее тестировать с полным покрытием кода, иначе любая описка может выстрелить в самый неподходящий момент
Ответ написан
Комментировать
wrmax
@wrmax
Напишите пару слов о задачах, которые планируется решать.
В одном из проектов, в котором я участвовал использовался Python, были проблемы с производительностью и часть библиотек пришлось переписать на C++.

Думаю стоит переходить на С++, т.к. полностью отказаться от него скорее всего не получится.
Ответ написан
stepank
@stepank
мне кажется, для начала нужно определить — какие сюрпризы могут быть с PyQt на целевых машинах: насколько легко ставится, нужно ли его самому собирать из исходников, если нужно, то насколько это сложно именно в том окружении, будете ли вы это сами делать или кто-то другой. дело в том, что если у вас будет одна-две машины, к которым у вас есть прямой доступ, руками вы это вполне осилите, а если машин несколько десятков или (а вдруг?) сотен? с чистым Qt в этом отношении проблем должно быть поменьше

если вы убедитесь, что использовать PyQt на целевых машинах не сложно, берите его, на питоне писать очень легко и комфортно, а узкие места можно выделить в c/c++ модули для питона

еще взгляните на PySide, у него из свободных лицензий LGPL в отличие от GPL у PyQt, и говорят он вообще более pythonic, хотя я с ним не работал
Ответ написан
@TyVik
Недавно сам начал писать на Python/PyQt. Несколько замечаний:
1. подгружать динамически ui файлы можно.
2. В сторону PySide пока не смотрите — лицензия там, конечно, мягче, но ИМХО пока проект ещё недостаточно развит, чтобы его использовать в пром продуктах
3. В PyQt можно создавать и встраивать в QtDesigner свои виджеты, в PySide пока нет, т.к. пока нет необходимой библиотеки для работы с QtDesigner`ом.
А не рассматривался вариант реализации на PyQt, но со своими библиотеками на C++? Критически важные части вынести в pyd файлы (написав их на C++), а интерфейс рисовать на Python`е.
Ответ написан
Комментировать
Akson87
@Akson87
Если очень высокая производительность не важна, то питон, так как после шарпа и дотнета, на сях придется думать о памяти, указателях и подобных штуках, которые позволяют радостно стрелять в ногу с непривычки. А если ВЫСОКАЯ производительность важна, то вариантов особо нет, тут только плюсы:)
Ответ написан
Комментировать
Вообще, сам по себе Qt достаточно неповоротливый (из свежего на хабре — тест скорости работы с контейнерами). Но если вы программируете на C++, то без проблем можете написать проблемные участки с использованием того же boost'а, например. А вот если пишите на питоне, то мало того, что потеряете производительность на самом PyQt, так еще и хрен что сможете сделать (разве что писать проблемные участки на C++).

Но после C# на C++ будет переходить тяжко, это факт.
Ответ написан
Комментировать
AterCattus
@AterCattus
Люблю быстрый backend
Просто для сравнения:
QObject::connect(but,SIGNAL(clicked()),this,SLOT(copy()));
but.clicked.connect(self.copy)


А про более сложные вещи вообще молчу:
task_done = QtCore.pyqtSignal( tuple )
...
self.task_done.connect( self._task_done, QtCore.Qt.QueuedConnection )
...
self.task_done.emit( ([], {}, 42) )

Сколько нужно написать для этого на C++ я даже не берусь сказать.
Ответ написан
Комментировать
smashrod
@smashrod
Можно прилить хороший Makefile для ui и qrc, туда засунуть deploy-последовательность, вот и получится счастье.

Когда не критично, что использовать Python+PyQt хорошо выручает, делать можно все быстро с дизайнером и всем остальным, а самое главное, что можно сделать перехватчик трейсов, тогда никакая ошибка не грозит, как писали выше, «выстрелить в ногу» ;)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы