Кроссплатформенное программирование на рабочем столе: C ++ против Python [закрыто]

11

Хорошо, для начала у меня есть опыт программиста-любителя Obj-C / Cocoa и Ruby с Rails. Это здорово, но они не очень полезны для написания кроссплатформенных приложений (надеюсь, однажды GNUStep будет достаточно завершенным, чтобы первый стал мультиплатформенным, но этот день еще не сегодня).

C ++, насколько я могу судить, чрезвычайно мощный, но в то же время огромный уродливый чудовище, на освоение которого может уйти полдесяти лет или больше. Я также читал, что вы можете очень легко не только выстрелить себе в ногу, но и оторвать им всю ногу, поскольку управление памятью осуществляется вручную. Очевидно, это все довольно пугающе. Это правильно?

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

Что заставит меня писать быстрые, стабильные, высоконадежные приложения в разумные сроки?

Кроме того, лучше ли использовать Qt для вашего пользовательского интерфейса или вместо этого поддерживать отдельные родные интерфейсы для каждой платформы?

РЕДАКТИРОВАТЬ: Для большей ясности, я хочу написать два типа приложений: одно - чрезвычайно дружественный и удобный интерфейс базы данных, а другое, которое, без сомнения, появится намного позже, - редактор трехмерного мира.

Джон Уэллс
источник
Вы задаете вопросы, ответы на которые будут в высшей степени субъективными - ИМХО это не конструктивно, поэтому голосуете за закрытие. Вы также задаете как минимум 4 разных вопроса в одном. Как может кто-нибудь еще, кроме вас, знать, что C ++ или Python - лучший выбор для вас ? Я предлагаю вам попытаться создать небольшое приложение с графическим интерфейсом на Python (которое займет у вас не более одного дня) и то же приложение на C ++, и сравнить самостоятельно.
Док Браун
Я думаю, что я действительно пытаюсь спросить, так это то, что я ищу, что объективно является лучшим выбором?
Джон Уэллс
Можете ли вы дать дополнительный контекст - что нужно делать вашему настольному приложению? Много математики? Приложение производительности? Доступ к базе данных? Игра?
JBRWilkinson
Добавлено редактирование, чтобы уточнить, что я хочу сделать.
Джон Уэллс
Я бы выбрал тот же язык операционной системы и / или библиотеки GUI. Вы можете сделать гораздо больше глубоких манипуляций с пользовательским интерфейсом. Попробуйте смоделировать что-то такое же простое, как полный экран (нажмите F11 в вашем браузере) на высоком уровне языка, например Java или C #. Я считаю так. Нативные решения являются переносимыми для более широкого спектра устройств, чем решения высокого уровня, такие как Java (по иронии судьбы).
Лорд Тидус

Ответы:

9

C / C ++ работает быстро. Реальность такова, что большинству приложений такая производительность не нужна в зависимости от состояния оборудования. Обычный способ - разработать приложение на языке высокого уровня, например на python, а затем оптимизировать его при необходимости с языками низкого уровня, такими как C / C ++.

Python значительно повысит производительность, его легко освоить и достаточно быстро. Существует Cython , который вы можете использовать для написания расширений C для использования в вашем приложении Python с Python-подобным синтаксисом для устранения узких мест.

Для стандартных приложений с графическим интерфейсом Python может дать вам достаточно производительности. А в python есть что-то очень классное, называемое Kivy , платформа с графическим интерфейсом, которая работает на Mac, Windows, Linux, Android и iOS и поддерживает мультитач. Бонусная часть состоит в том, что критические части производительности оптимизированы с помощью C, используя Cython.

Хакан Дериал
источник
1
Вы, наверное, правы насчет скорости. Kivy кажется очень способным, но может ли он рисовать системные виджеты?
Джон Уэллс
Нет, он использует собственный графический движок для виджетов, использующий OpenGL ES. Qt, вероятно, будет вашим лучшим выбором для кроссплатформенных нативных виджетов.
Хакан Дериал
5

Я бы пошел с Python, поскольку он дает вам большой прирост производительности. Вы по-прежнему можете писать части своего приложения, которым требуется скорость, на C ++, есть проект Cython, который позволяет использовать библиотеки C ++ непосредственно на Python. Если вы беспокоитесь о безопасности своих источников, Cython также может помочь с этим, вы можете использовать его для компиляции вашего обычного кода Python в код C ++.

Я бы рекомендовал встраивать движок Chrome и использовать такие технологии, как: HTML5 + CSS3 + Javascript + JQuery + Canvas для пользовательского интерфейса.

Существует интегрированная среда, которая позволяет легко встраивать движок Chrome в ваше приложение C ++, она называется CEF - Chromium Embedded Framework . Поддерживает Windows, Linux, Mac OS.

Если вам нравится Python, взгляните на CEF Python , это проект, который предоставляет привязки Python для инфраструктуры CEF (с использованием Cython ). CEF python в настоящее время поддерживает только Windows, но есть планы и для других ОС.

Вот список приложений, которые успешно использовали CEF (взяты отсюда ):

  • Adobe Brackets - редактор кода для Интернета
  • Adobe Edge - мультимедийный авторский инструмент
  • AppJS - создавать настольные приложения, используя Node.js
  • AOL Instant Messenger - клиент Windows использует CEF
  • Cubiez - интегрирует ваш любимый контент на рабочий стол
  • Desura - онлайн игровая платформа
  • Dish World IPTV - платформа для потокового видео
  • Evernote - программа для заметок
  • ExeOutput - позволяет развертывать приложения html5 / php как настольные приложения
  • GitHub для Windows - клиентское программное обеспечение GitHub для Windows
  • Janetter - твиттер-клиент
  • mChef - плагин для браузера mIRC
  • MediaMan - органайзер программного обеспечения
  • MetaVR - программное обеспечение для географического моделирования
  • MTG Studio - программа для организации игр
  • OpenSpace3D - платформа для разработки 3D
  • Rdio - потоковая музыкальная платформа
  • Spotify - потоковая музыкальная платформа
  • Steam Client - игровая онлайн-платформа
  • Tencent QQ - программа для обмена мгновенными сообщениями и веб-браузер
  • Trend Micro - программное обеспечение для интернет-безопасности
  • WBEA Desktop - позволяет развертывать html5-приложения как настольные приложения

Также посмотрите на эту запись в блоге: Создание приложения для настольных компьютеров на основе веб-технологий - команда редакторов скобок, объясняющая, как они создавали его с использованием инфраструктуры CEF и таких веб-технологий, как: jQuery , Bootstrap , LESS CSS , requireJS , Jasmine for Unit-тестирование , JSlint ,

Отказ от ответственности: я являюсь автором проекта CEF Python.

Чарек Томчак
источник
Спасибо за ваш вклад! CEF выглядит неплохо, но я надеюсь, что, если это вообще возможно, на каждой платформе будет предоставлен нативный опыт, который сложно воспроизвести с помощью HTML, CSS и JS.
Джон Уэллс
@JohnWells, почему родной? Люди привыкли к веб-опыту. Посмотрите на Windows 8, каждая следующая ОС от Microsoft имеет меньшее отношение к нативной, они форсируют веб-технологии, и это будущее, такого понятия, как «нативный опыт», нет, оно осталось в прошлом.
Czarek Tomczak
Это зависит от того, о каком программном обеспечении вы говорите. Ориентированные на потребителя приложения могут быть в порядке с веб-интерфейсом, но это не так хорошо с программным обеспечением, сосредоточенным на создании контента. Кроме того, хотя Windows 8 может быть ориентирована на веб-технологии, Mac OS по-прежнему прочно укоренилась в родной стране, и ее пользователям, как правило, не нравится программное обеспечение, которое отличается от этого.
Джон Уэллс
1
Совершенно верно, JBRWilkinson, но я действительно не хочу писать CSS для имитации виджетов (в случае CEF) для каждой платформы, если мне не нужно.
Джон Уэллс
1
Я сам являюсь пользователем Mac, и мой опыт очень важен для меня. На мой взгляд, нет ничего хуже, чем приложение, которое не появляется и работает в соответствии с ОС, на которой оно работает. Даже что-то вроде огромного повышения производительности недостаточно, чтобы перевесить это.
Джон Уэллс
5

Путь Qt в C ++ великолепен и чист, поэтому, пожалуйста, отбросьте часть «уродливый бегемот», я пробовал их обоих, и лично я гораздо более продуктивен / удобен с Qt / C ++, чем с привязкой Qt в Python. Это мой совет, если вы решите пойти с Qt. Кроме того, помимо родного опыта, предоставляемого виджетом Qt, Qt5 и QtQuick2 с технологией QML и возможностью встраивать JavaScript и HTML5 в ваше приложение, при желании вы получите современный веб-внешний вид, если вы решите это сделать.

Итак, почему я не люблю Python в настольных приложениях и предпочитаю хранить его для сценариев или для серверных вещей?

  • Python немного ломает кросс-платформенную радость, ваш клиент должен установить Python для запуска вашего приложения (особенно в Windows), а различные версии Python, представленные на официальном сайте python, теперь приводят клиента в замешательство, какую из них загрузить / установить ,

  • Python для исполнения , создавать большие приложения (с точки зрения размера).

  • Приложения Python, есть больше памяти.

Это личная точка зрения. Родительская система Qt, умные указатели, не позволит вам выстрелить себе ни в ногу, ни в ноги, C ++ 11 предоставит вам еще больше возможностей.

01walid
источник
3
«ваш клиент должен установить Python для запуска вашего приложения» - вы можете распространять библиотеки Python вместе с вашим приложением, пользователю не нужно устанавливать Python вручную. Вам не нужно использовать py2exe или других производителей багги ехе (из моего опыта), см Python встраивание , это всего лишь несколько строк кода С ++, замените PyRun_SimpleString с PyRun_SimpleFile, вы можете легко собрать его самостоятельно, что не должны делать никаких накладных расходов в размер вашего приложения. «Приложения Python, есть больше памяти». - используйте Cython для оптимизации частей вашего приложения, требующих памяти.
Чаре Томчак