Кроссплатформенное программирование на рабочем столе: 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 предоставит вам еще больше возможностей.


3
«ваш клиент должен установить Python для запуска вашего приложения» - вы можете распространять библиотеки Python вместе с вашим приложением, пользователю не нужно устанавливать Python вручную. Вам не нужно использовать py2exe или других производителей багги ехе (из моего опыта), см Python встраивание , это всего лишь несколько строк кода С ++, замените PyRun_SimpleString с PyRun_SimpleFile, вы можете легко собрать его самостоятельно, что не должны делать никаких накладных расходов в размер вашего приложения. «Приложения Python, есть больше памяти». - используйте Cython для оптимизации частей вашего приложения, требующих памяти.
— Чаре Томчак
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.