¿Qué tipo de código puede funcionar en Windows, iOS y Android con solo una pequeña corrección? ¿Sería C # o C ++?

Descargo de responsabilidad: no soy un programador, pero tuve que trabajar mucho con ellos como productor de juegos.

En 2011, estábamos creando puertos de juegos de Windows para iOS y Android. Usamos C ++, y funcionó fácilmente con Obj-C de iOS en ese momento.

Con Java, sin embargo, no parecía tan simple. Los errores que encontré en nuestros puertos de Android habían sido de muy bajo nivel, como que el sonido no se detenía cuando el dispositivo se apagaba.

O al menos tal vez porque esa fue la primera vez que nuestro estudio hizo adaptadores para que C ++ funcionara en Java. El estudio había estado haciendo que los juegos en C ++ funcionaran en iOS durante 2 años en ese momento, por lo que tal vez el motor que teníamos era más maduro para iOS.

Así que puedo decir que C ++ funcionó para los 3, pero requirió algo de trabajo para funcionar bien en iOS y Android.

C # (DotNetCore) o C serán suficientes, aunque ambos necesitarán alguna reparación. También Python, Java, JavaScript (y unos 100 más).

Hay tantas opciones por ahí. Creo que la pregunta que debes hacerte es qué quieres lograr. Si está tratando de aprender, yo personalmente recomendaría comenzar con un lenguaje fuertemente tipado con un marco agradable como C #. De esta manera, puede pasar fácilmente a lenguajes como JavaScript o Python que no están fuertemente tipados. Aprender esos idiomas primero no le dará una apreciación de las ventajas (y desventajas) del código fuertemente tipado.

Siempre recuerde que cada lenguaje / marco tiene sus ventajas y desventajas, no hay una bala de plata.

En términos generales, existen dos partes para tener un código multiplataforma portátil (es decir, “con solo una pequeña fijación”) en objetivos modernos:

  • un lenguaje de programación portátil
  • un ambiente común

Para el lenguaje de programación portátil, la mayoría de los lenguajes semi-modernos pueden funcionar. Para lenguajes de programación de sistemas como C y C ++, querrá tener cuidado con algunos aspectos del lenguaje (por ejemplo, no asuma el rango de tipo long ), pero no es un problema difícil. Dicho esto, algunos idiomas son “menos compatibles” en algunas plataformas que en otras. Por ejemplo, C # está disponible en iOS y Android, pero las comunidades asociadas son mucho más pequeñas que en Windows (y, creo, más pequeñas que, por ejemplo, la comunidad C ++). Por el contrario, Swift está disponible en Windows, pero todavía solo tiene una comunidad naciente allí.

La parte del entorno común es a menudo más difícil de decidir. En el caso de las plataformas orientadas al usuario (que presumiblemente es lo que le importa, ya que incluye iOS y Android entre sus objetivos deseados), algunas tiendas optan por escribir aplicaciones web en su lugar: la pila HTML5 + CSS + JavaScript es bastante portátil y todo Las plataformas modernas proporcionan esa pila “fuera de la caja”. La mayoría de los sistemas operativos cliente modernos incluso ofrecen formas de disfrazar las aplicaciones web resultantes como aplicaciones comunes (básicamente integrando el navegador y la aplicación). Sin embargo, el rendimiento es limitado, al igual que el acceso a los recursos de hardware.

Para C ++, el entorno portátil más popular del lado del cliente es probablemente Qt (pronunciado “lindo”; consulte El futuro está escrito con Qt: desarrollo de software multiplataforma para incrustado y de escritorio). Ha existido durante mucho tiempo y tiene una comunidad amplia.

C # tiene algo similar en Xamarin: desarrollo de aplicaciones móviles y software de creación de aplicaciones. No tengo mucha experiencia con él, pero algunas buenas aplicaciones de iOS que uso se desarrollaron de esa manera. Tengo entendido que su capacidad de acceder a servicios nativos en plataformas que no son de Windows es más limitada.

El primer reclamo de Java fue “escribir una vez, ejecutar en cualquier lugar”, y eso sigue siendo una fuerza motivadora para usar Java. Sin embargo, mi experiencia limitada es que no es terriblemente agradable en los sistemas operativos Apple, principalmente debido a estrategias de administración de memoria divergentes (MacOS e iOS; no estoy seguro de su alcance para watchOS y tvOS).

Dicho todo esto, para obtener la mejor experiencia en cada plataforma, una aplicación se beneficia del uso de expresiones idiomáticas de la interfaz de usuario local, y eso no se puede hacer realmente “con solo un poco de corrección”.

Lo más probable es que C # para Android. El código C ++ se compila directamente a iOS sin problema

Si desea la mayor compatibilidad multiplataforma, debe codificar en JavaScript (Electron en el escritorio y React Native en el móvil), pero tenga en cuenta que Windows solo es útil en las computadoras de escritorio, por lo que querrá rehacer la IU para iOS y Android de todos modos. También pierde un rendimiento significativo en comparación con la codificación en C / Swift y C # / C ++ en Windows. El código de Android generalmente tiene que ejecutarse en una máquina virtual Java, por lo que sus opciones son Java, Kotlin y posiblemente Scala si no usa JavaScript.

Java: escriba aplicaciones iOS en Java junto con Android – Mateusz Bartos – Medium

C ++: Qt para iOS | Qt 5.9

C #: Desarrollo móvil multiplataforma en Visual Studio Desarrollo de aplicaciones móviles para crear aplicaciones en C #

Swift: cómo colocamos una aplicación en Android Play Store usando Swift Swift para Windows

, NET ahora es multiplataforma, así que como desarrollador de .NET, iría con C #