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 вроде как имеются.
Если для вас что питон, что си++ одно и то же в данных условиях, то я бы выбрал си хотя бы потому, что c# очень с ним схож. Qt для с++ хороший вариант и документация отличная.
На питоне не писал, так что там плюсов и минусов не знаю.
ну схожесть на мой взгляд довольно относительная, на уровне синтаксиса разве что, по идеологии мне кажется питон ближе. Но сам склоняюсь несмотря ни на что именно к си, наличность подкупает. А работу с памятью постараюсь вспомнить :)
Однозначно Python + PyQt. Хотя бы потому, что:
1) сложно выстрелить себе в ногу
2) очень большое количество дополнительных библиотек для Python
Имел опыт написания морды для небольшой БД на Linux при помощи Python + PyQt. Написал за ночь. На плюсах я бы неделю корячился, чтобы только окошко вывести…
Для Qt родной язык C++, родная документация тоже описывает С++ версию, Qt так-же оказывает помощь в управлению памятью. Если задача ответственная, то важно, что С++ имеет статическую проверку кода и сильную типизацю, программу же на Python нужно тщательнее тестировать с полным покрытием кода, иначе любая описка может выстрелить в самый неподходящий момент
Напишите пару слов о задачах, которые планируется решать.
В одном из проектов, в котором я участвовал использовался Python, были проблемы с производительностью и часть библиотек пришлось переписать на C++.
Думаю стоит переходить на С++, т.к. полностью отказаться от него скорее всего не получится.
ИС с разными видами помощи — от хтмл и свг, до сложных вычислительных задач, все информационные элементы, кроме алгоритмов должно хранится в БД, так что еще потребуется работа с PostgreSQL (она там единственная). Суперпроизвощительности не требуется, на уровне «чтобы работать было приятно»
Т.е. web-приложение? Тогда наверное всё же Python, на плюсах web-приложения мало кто делает, только если нужна высокая производительность.
В конце концов можно комбинировать интерфейс на Python, а критичные алгоритмы на C++
мне кажется, для начала нужно определить — какие сюрпризы могут быть с PyQt на целевых машинах: насколько легко ставится, нужно ли его самому собирать из исходников, если нужно, то насколько это сложно именно в том окружении, будете ли вы это сами делать или кто-то другой. дело в том, что если у вас будет одна-две машины, к которым у вас есть прямой доступ, руками вы это вполне осилите, а если машин несколько десятков или (а вдруг?) сотен? с чистым Qt в этом отношении проблем должно быть поменьше
если вы убедитесь, что использовать PyQt на целевых машинах не сложно, берите его, на питоне писать очень легко и комфортно, а узкие места можно выделить в c/c++ модули для питона
еще взгляните на PySide, у него из свободных лицензий LGPL в отличие от GPL у PyQt, и говорят он вообще более pythonic, хотя я с ним не работал
Это в составе аппаратно-программного комплекса, так что на все будем разворачивать сами. А вот ставить надо из исходников, ибо для сертификации нужно, чтобы все что разворачивалось, компилировалось из исходников. Спасибо за мнение, а как динамичность. И не подскажете подробнее, как можно добавлять собственноручно написанные си библиотеки в питон-проект?
Надо сказать, что МСВС — уже сертифицированная ОС. Включенный в нее Qt — также сертифицирован.
А вот на PyQt сертификат придется получать. В наших реалиях вполне возможно, что это будет самая сложная итерации внедрения вашего ПО на машины заказчика.
Да, я знаю) но нашу-то программу тоже придется сертифицировать, почему тогда не сертифицировать PyQt в ее рамках, при условии, что мы будем компилировать ее из кода? Или там какие-то дополнительные сложности? Разве что объем кода м.б. большой, что удорожит процедуру.
Недавно сам начал писать на Python/PyQt. Несколько замечаний:
1. подгружать динамически ui файлы можно.
2. В сторону PySide пока не смотрите — лицензия там, конечно, мягче, но ИМХО пока проект ещё недостаточно развит, чтобы его использовать в пром продуктах
3. В PyQt можно создавать и встраивать в QtDesigner свои виджеты, в PySide пока нет, т.к. пока нет необходимой библиотеки для работы с QtDesigner`ом.
А не рассматривался вариант реализации на PyQt, но со своими библиотеками на C++? Критически важные части вынести в pyd файлы (написав их на C++), а интерфейс рисовать на Python`е.
Если очень высокая производительность не важна, то питон, так как после шарпа и дотнета, на сях придется думать о памяти, указателях и подобных штуках, которые позволяют радостно стрелять в ногу с непривычки. А если ВЫСОКАЯ производительность важна, то вариантов особо нет, тут только плюсы:)
Вообще, сам по себе Qt достаточно неповоротливый (из свежего на хабре — тест скорости работы с контейнерами). Но если вы программируете на C++, то без проблем можете написать проблемные участки с использованием того же boost'а, например. А вот если пишите на питоне, то мало того, что потеряете производительность на самом PyQt, так еще и хрен что сможете сделать (разве что писать проблемные участки на C++).
Но после C# на C++ будет переходить тяжко, это факт.
Можно прилить хороший Makefile для ui и qrc, туда засунуть deploy-последовательность, вот и получится счастье.
Когда не критично, что использовать Python+PyQt хорошо выручает, делать можно все быстро с дизайнером и всем остальным, а самое главное, что можно сделать перехватчик трейсов, тогда никакая ошибка не грозит, как писали выше, «выстрелить в ногу» ;)
кстати, пишу тоже под MCBC и Астру, поэтому для 12 изм 4 и выше смело можно всякую фигню быстро писать на питоне.
Например плюсовую либо стоит писать, когда хз, какая МСВС будет у конечного потребителя, и когда надо давать ему средства разработки в виде либ, тут питон не дашь особо.
И самое важное, если по ТУ прописан 12 изм 4 и выше, то PyQt есть, если ниже изменение то его там нет, как и GCC4 вместе с 4.6 либами.
PS: Можно писать в убунте, все потом хорошо портируется.
у нас АПК, поэтому чего захотим, то и поставим, главное чтоб засертифицировать было реально. А между Астрой и МСВС что предпочтительнее? Мне как-то Астра на первый взгляд больше глянулась.
все зависит от требований ТТЗ, т.е. сертификаты сейчас есть и у того и у другого, но если есть интеграция со средствами только для МСВС, тогда только он. В случае, когда зависимостей нет, и не будет проблем с «безопасниками» тогда можно и Астру, там свежее пакеты, но нет нормальных СЗИ ;)