Programación de escritorio multiplataforma: C ++ vs. Python [cerrado]

11

Muy bien, para empezar, tengo experiencia como programador aficionado de Obj-C / Cocoa y Ruby w / Rails. Estos son geniales, pero no son realmente útiles para escribir aplicaciones multiplataforma (es de esperar que GNUStep algún día sea lo suficientemente completo para que el primero sea multiplataforma, pero ese día no es hoy).

C ++, por lo que puedo deducir, es extremadamente poderoso pero también un enorme y feo gigante que puede tomar media década o más para dominarlo. También he leído que puedes no solo dispararte muy fácilmente en el pie, sino volar toda la pierna con él, ya que la gestión de la memoria es todo manual. Obviamente, todo esto es bastante intimidante. ¿Es correcto?

Python parece proporcionar la mayor parte del poder de C ++ y es mucho más fácil de aprender a costa de la velocidad. ¿Qué tan grande es este sacrificio? ¿Tiene sentido o puede ser ignorado?

¿Qué me hará escribir aplicaciones rápidas, estables y altamente confiables en un tiempo razonable?

Además, ¿es mejor usar Qt para su interfaz de usuario o, en cambio, mantener front-end nativos separados para cada plataforma?

EDITAR: para mayor claridad, hay dos tipos de aplicaciones que quiero escribir: una es una interfaz de base de datos extremadamente amigable y conveniente y la otra, que sin duda vendrá mucho más tarde, es un editor mundial en 3D.

John Wells
fuente
Estás haciendo preguntas para las cuales las respuestas serán muy subjetivas, en mi humilde opinión, eso no es constructivo, por lo tanto, vota para cerrar. También hace al menos 4 preguntas diferentes en una. ¿Cómo puede alguien más que usted sepa si C ++ o Python es la mejor opción para usted ? Le sugiero que intente construir una pequeña aplicación GUI con Python (que no debería llevarle más de un día), y la misma aplicación con C ++, y compárelo usted mismo.
Doc Brown el
Supongo que lo que realmente estoy tratando de preguntar es lo que estoy buscando, ¿cuál es objetivamente la mejor opción?
John Wells el
¿Puede darnos un contexto adicional? ¿Qué necesita hacer su aplicación de escritorio? ¿Muchas matemáticas? Aplicación de productividad? Acceso a la base de datos? ¿Un juego?
JBRWilkinson
Edición añadida para aclarar lo que quiero hacer.
John Wells el
Optaría por usar el mismo idioma del sistema operativo y / o la biblioteca GUI. Puede manipular mucho más en profundidad la interfaz de usuario con mayor facilidad. Intente simular algo tan simple como pantalla completa (presione F11 en su navegador) en un idioma de alto nivel como Java o C #. Yo descanso mi caso. Las soluciones nativas son portátiles para una variedad más amplia de dispositivos que las soluciones de alto nivel como Java (irónicamente).
Lord Tydus

Respuestas:

9

C / C ++ es rápido. La realidad es que la mayoría de las aplicaciones no necesitarán ese rendimiento con el estado de los hardwares actuales. La forma habitual es desarrollar la aplicación en un lenguaje de alto nivel, como python, que optimizar cuando sea necesario con lenguajes de nivel inferior, como C / C ++.

Python le dará un gran impulso de productividad, es fácil de aprender y razonablemente rápido. Existe Cython , que puede usar para escribir extensiones C para usar en su aplicación python con una sintaxis similar a la de Python para acelerar los cuellos de botella.

Para las aplicaciones GUI estándar, Python puede brindarle un rendimiento suficiente. Y Python tiene algo muy bueno llamado Kivy , un marco de GUI que se ejecuta en Mac, Windows, Linux, Android e iOS, y admite multitáctil. La parte adicional es que las partes críticas de rendimiento están optimizadas con C, usando Cython.

Hakan Deryal
fuente
1
Probablemente tengas razón sobre la velocidad. Kivy parece muy capaz, pero ¿puede dibujar widgets nativos del sistema?
John Wells el
No, usa su propio motor de gráficos para widgets, usando OpenGL ES. Qt probablemente será su mejor apuesta para los widgets nativos multiplataforma.
Hakan Deryal el
5

Me gustaría ir con Python, ya que te da un gran impulso de productividad. Todavía puede escribir partes de su aplicación que necesiten velocidad en C ++, hay un proyecto de Cython que permite usar bibliotecas de C ++ directamente en Python. Si le preocupa la seguridad de sus fuentes, Cython también puede ayudarlo con eso, puede usarlo para compilar su código normal de Python en código C ++.

Recomendaría incrustar el motor Chrome y usar tecnologías como: HTML5 + CSS3 + Javascript + JQuery + Canvas para la interfaz de usuario.

Hay un marco que facilita la integración del motor Chrome en su aplicación C ++, se llama CEF - Chromium Embedded Framework . Es compatible con Windows, Linux, Mac OS.

Si le gusta Python, eche un vistazo a CEF Python , es un proyecto que proporciona enlaces de python para el marco CEF (mediante el uso de Cython ). CEF python actualmente solo admite Windows, pero hay planes para otros sistemas operativos.

Aquí hay una lista de aplicaciones que han sido exitosas usando CEF (tomado de aquí ):

  • Adobe Brackets - editor de código para la web
  • Adobe Edge - herramienta de autoría multimedia
  • AppJS: crea aplicaciones de escritorio usando Node.js
  • AOL Instant Messenger: el cliente de Windows usa CEF
  • Cubiez: integra tu contenido favorito en el escritorio
  • Desura - plataforma de juego en línea
  • Dish World IPTV - plataforma de transmisión de video
  • Evernote - software para tomar notas
  • ExeOutput: le permite implementar aplicaciones html5 / php como aplicaciones de escritorio
  • GitHub para Windows: software de cliente GitHub para Windows
  • Janetter - software de cliente de twitter
  • mChef - complemento de navegador mIRC
  • MediaMan - software organizador
  • MetaVR - software de simulación geográfica
  • MTG Studio - software organizador de juegos
  • OpenSpace3D - plataforma de desarrollo 3D
  • Rdio - plataforma de transmisión de música
  • Spotify - plataforma de transmisión de música
  • Steam Client - plataforma de juego en línea
  • Tencent QQ: programa de mensajería instantánea y navegador web
  • Trend Micro - software de seguridad de internet
  • Escritorio WBEA: le permite implementar aplicaciones html5 como aplicaciones de escritorio

También eche un vistazo a esta entrada del blog: Creación de una aplicación de calidad de escritorio en tecnologías web : equipo del editor de corchetes que explica cómo lo crearon utilizando el marco CEF y tecnologías web como: jQuery , Bootstrap , LESS CSS , requireJS , Jasmine for Unit testing , JSlint .

Descargo de responsabilidad: soy el autor del proyecto CEF Python.

Czarek Tomczak
fuente
¡Gracias por tu contribución! CEF se ve bastante bien, pero espero proporcionar una experiencia nativa en cada plataforma si es posible, lo cual es difícil de reproducir con HTML, CSS y JS.
John Wells el
@ JohnWells, ¿por qué nativo? Las personas están acostumbradas a la experiencia web. Mire Windows 8, cada próximo sistema operativo de Microsoft tiene menos que ver con nativos, están forzando tecnologías web y este es el futuro, no existe la "experiencia nativa", es cosa del pasado.
Czarek Tomczak
Depende de qué software estés hablando. Las aplicaciones orientadas al consumidor pueden estar bien con una sensación de "web", pero eso no funciona tan bien con un software centrado en la creación de contenido. Además, aunque Windows 8 podría estar orientado a la tecnología web, Mac OS todavía está firmemente basado en la tierra nativa y a sus usuarios no les gusta el software que se desvía de eso.
John Wells el
1
Muy bien JBRWilkinson, pero realmente no quiero escribir CSS de imitación de widgets (en el caso de CEF) para cada plataforma si no tengo que hacerlo.
John Wells el
1
Al ser un usuario de Mac, la experiencia nativa me importa mucho. En mi opinión, nada es peor que una aplicación que no aparece y actúa de manera coherente con el sistema operativo en el que se está ejecutando. Incluso algo como un aumento masivo de la productividad no es suficiente para superarlo.
John Wells el
5

La forma Qt de C ++ es excelente y limpia, así que por favor, suelte la parte del "monstruo feo", los he probado a ambos, y personalmente soy mucho más productivo / cómodo con Qt / C ++ que con la unión Qt de Python. Ese es mi consejo si eliges ir con Qt. Además, y además de la experiencia nativa que proporciona el widget Qt, Qt5 y QtQuick2 con tecnología QML y la capacidad de incrustar JavaScript y HTML5 dentro de su aplicación, le brindan un aspecto moderno similar a la web, si así lo desea.

Entonces, ¿por qué no me gusta Python en las aplicaciones de escritorio y prefiero mantenerlo para las secuencias de comandos o las cosas del servidor?

  • Python rompe un poco la alegría multiplataforma, su cliente tiene que instalar Python para ejecutar su aplicación (especialmente en Windows), y las diferentes versiones de Python que se encuentran en el sitio web oficial de Python ahora confunden al cliente, ¿cuál descargar / instalar? .

  • Python a exe , crea aplicaciones más grandes (en términos de tamaño).

  • Aplicaciones de Python, comen más memoria.

Ese es un punto de vista personal. El sistema principal de Qt, los punteros inteligentes, no te permitirán dispararte en el pie, ni en las piernas, el C ++ 11 te dará aún más funciones.

01walid
fuente
3
"su cliente tiene que instalar Python para ejecutar su aplicación": puede distribuir dlls python con su aplicación, no es necesario que el usuario instale python manualmente. No necesita usar py2exe u otros creadores de errores (según mi experiencia), vea Python Embedded , son solo unas pocas líneas de código c ++, reemplace PyRun_SimpleString con PyRun_SimpleFile, puede compilarlo usted mismo fácilmente, eso no debería generar gastos generales en tamaño de tu aplicación. "Aplicaciones de Python, comen más memoria". - use Cython para optimizar partes exigentes de memoria de su aplicación.
Czarek Tomczak