¿La programación de aplicaciones Windows 10 UWP, Mac OS / iOS o Android en C ++ es más difícil que el lenguaje preferido de dichas plataformas?

Windows: si.

macOS: sí.

Android: sí.

Si te refieres a lanzar la misma aplicación para las tres plataformas , en ese caso un núcleo unificado de C ++ que use algo como QT o la cosa portátil C ++ de Visual Studio podría ser menos difícil que tres implementaciones diferentes en tres lenguajes de alto nivel diferentes.

No tengo claro cuál crees que es el lenguaje “preferido” en Windows, pero asumiré C # (probablemente Microsoft no lo prefiera más que C ++). Para macOS, asumiré Objective-C o Swift. Para Android, creo que todos sabemos que es Java.

Ventanas

Windows es el único sistema operativo en el que el desarrollo de C ++ se vuelve más fácil con el tiempo, debido a UWP y Windows Runtime. De los tres, Windows es el único sistema operativo que admite explícitamente la creación de aplicaciones exclusivamente en C ++, sin enlaces a otros idiomas, soporte completo de IDE, etc. (Visual Studio). Aún así, estoy seguro de que crear una aplicación de Windows 10 con C # seguirá siendo más fácil que con C ++, incluso si es C ++ moderno con Windows Runtime moderno.

  1. Se ofrecen tantos métodos convenientes y características de API para C #: es más fácil navegar por las API y predecir el comportamiento de la aplicación que con C ++, y habrá muchas menos líneas de código.
  2. Muchas de las API de UWP C ++ son nuevas y tal vez aún están en desarrollo. Están sucediendo muchas cosas interesantes, incluido un compromiso con C ++ 11/14/17 que cumple con los estándares. Pero el comportamiento de una nueva aplicación simplemente no será tan predecible usando estas nuevas API. El desarrollo de la aplicación C ++ es inherentemente mayor entropía y complejidad que C #, y los métodos .NET C # son comparativamente más estables.

Mac OS

Para macOS, C ++ no le compra nada sobre Objective-C o Swift, aparte del rendimiento si tiene un equipo de desarrollo que puede explotar C ++ hábilmente. No hay API de C ++ como UWP en macOS. Construir una aplicación macOS en C ++ definitivamente será más difícil para el equipo de desarrollo típico que usar Swift, y no podrá construir una aplicación C ++ pura sin vincular a Objective-C o Swift GUI API (quizás esto no importa mucho…)

Androide

Android ofrece cinco tiempos de ejecución C ++ diferentes (en el IDE; solo se incluye un tiempo de ejecución, el que llaman “sistema”, en los dispositivos Android). No parece que vaya a ser un buen momento, muy retazos. Siempre he sentido que su declaración de apertura de que “proporcionan una biblioteca de soporte de tiempo de ejecución C ++ muy mínima” era una pista de importación (han tenido esa declaración en su sitio NDK durante años), una pista que no lo alientan a usa C ++. Uno de los tiempos de ejecución es algo llamado stlport, del que nunca he oído hablar, y se actualizó por última vez en 2008. Eso es tan extraño que lo ofrecerían, tal vez fue una solicitud de características de socios importantes o algo así.

Dicho esto, siempre he sentido curiosidad e impresión por cómo los navegadores como Firefox y Opera fueron portados a Android, ya que están escritos en C ++. Lanzaron sus versiones de Android hace muchos años, cuando las opciones de Android C ++ y NDK eran más limitadas de lo que son hoy. No tengo claro si Firefox, por ejemplo, tiene que usar los enlaces de la interfaz de usuario de Java que se supone que deben usar las aplicaciones NDK. Parece que ese tipo de cosas sería frustrante para los desarrolladores de navegadores, ya que el rendimiento es una prioridad para ellos. Quizás compilar grandes aplicaciones de C ++ para Android no es tan difícil como creo, y tal vez los enlaces de Java no sean un gran problema (o de alguna manera no tienen que usarlos).

Clausura

Si termina creando una aplicación de Windows C ++ para UWP, consulte el proyecto C ++ / WinRT de Microsoft. Kenny Kerr es un tipo justo. Creó Modern C ++ para Windows Runtime por su cuenta, completamente independiente de Microsoft. Luego Microsoft lo contrató, y ahora C ++ / WinRT es un proyecto oficial de MS. Ver también el artículo de Brian Peek.

Para las aplicaciones de escritorio, es más fácil usar C ++ con un kit de herramientas como Qt. El uso de las API nativas de la GUI generalmente es más problemático de lo que vale y, por supuesto, limita la aplicación a esa plataforma.

Para plataformas móviles, usar C ++ es más fácil, ya que es compatible con todas las plataformas (iOS, Android, etc.) y usa un pequeño contenedor en Java / Objective-C para enlazar a API que no están directamente disponibles como API de estilo C.

El uso de las API nativas es generalmente un espectáculo de terror (API Win32, API de MacOS, el crecimiento salvaje de las API de Linux) de todos modos, lo que hace que el uso de un marco C ++ para suavizar las cosas sea una elección preferida independientemente.

Respuesta corta: Sí, probablemente.

Respuesta más larga, realmente depende de lo que estés haciendo. Si tiene una carga de bibliotecas C ++ que desea usar, entonces C ++ podría tener sentido. Tal vez estás haciendo un juego, C ++ podría tener sentido para ti.

Para las aplicaciones GUI, el uso de C ++ en Mac apenas es una opción compatible, es decir, Apple hace que las API funcionen desde Objective-C o Swift, si quieres usar otra cosa, no intentan detenerte activamente, pero tú ‘ No voy a obtener ninguna ayuda tampoco.

En Windows, C ++ está ahí, es compatible, pero la mayoría de las personas encontrarán que C # es más fácil y más fácil encontrar soporte en foros, etc.

Algunas personas encuentran los idiomas más fáciles que otros, y las preferencias pueden ser bastante diversas. Mucha gente encontrará Python más fácil que Java, personalmente encuentro que lo contrario es cierto para mí. Estas cosas son subjetivas, pero creo que muchos estarán de acuerdo en que C ++ es uno de los lenguajes más difíciles que existen, y se hizo aún más difícil en las plataformas que mencionas al no ser compatible con las aplicaciones GUI o tener menos soporte que otros lenguajes.

Sí, pero le ayuda a trabajar más cerca de la máquina.