tutorial microsoft espaƱol developer curso apps c# .net c++ qt frameworks

microsoft - C#vs. C++ en un proyecto multiplataforma



xamarin microsoft (18)

Mi equipo está planificando desarrollar una aplicación que inicialmente esté orientada para Windows, pero que eventualmente se implementará multiplataforma (Mac, Linux y dispositivos potencialmente integrados). Nuestra decisión es si usar C # /. NET o C ++ genérico (con Qt como biblioteca de interfaz de usuario). Estamos proyectando que al usar C #, podemos desarrollar nuestro producto más rápido y a un menor costo debido al aumento de la productividad en comparación con C ++, pero nos arriesgamos si las implementaciones multiplataforma de C # estarán lo suficientemente maduras en el futuro. momento en que queremos lanzar a otras plataformas.

¿Alguna sugerencia de cualquiera de ustedes que haya estado en una situación similar?


¿Consideró usar Python / C ++ / QT?

solo míralo


¿Está configurado para tener solo un único conjunto de código de UI en todas las plataformas? Le recomiendo que considere dos UI separadas con un núcleo común, realmente no hay sustituto para una interfaz de usuario nativa.

En este caso, puede ir Winforms / WPF en C # para Windows UI, Cocoa en ObjC para OS X UI, GTK en C # para Linux UI. Todos estos usarían un núcleo común de C # capaz de ejecutarse en Mono y .NET. Mono hace que sea relativamente fácil de usar con ObjC.


A pesar de todas las capacidades potenciales de plataforma cruzada de Mono, hoy en día, C ++ / Qt es simplemente una opción mucho más madura que C # / WinForms o C # / Gtk # para propósitos de plataforma cruzada. Cualquier aumento en la productividad que obtendría mediante el uso de un lenguaje de nivel superior probablemente se compensaría al lidiar con las limitaciones de Mono.


Considera Java / Scala. Uno de los desarrolladores de IDE más maravillosos IntelliJ IDEA está escrito en Java, eche un vistazo.


El enfoque que he tomado con muchos proyectos multiplataforma es escribir el "núcleo" del proyecto en un lenguaje muy portátil (C ++) y luego implementar la IU (y cualquier otra cosa que dependa del sistema operativo, por ejemplo, algunos tipos de datos acceso) en un lenguaje que fue eficiente para esa tarea en las diversas plataformas.

Solo quería señalar que no tiene que elegir solo un idioma.


Estoy desarrollando durante años softwares de plataforma cruzada con C ++ / Qt.
Recomiendo esta solución para su desarrollo.
¡Dicha solución te ofrece rendimiento en TODAS las plataformas!
Además, Qt no es solo un marco de GUI, sino que le ofrece un marco completo para redes, DB, I / O, gran soporte y un sistema de internacionalización muy ingenioso.
Finalmente, Qt brinda una apariencia nativa en todas las plataformas que admite.

Y sobre el rendimiento, ¿es Mono / C # equivalente a C ++ / Qt?


Jen, estoy preocupado por la redacción de tu pregunta.

"Mi equipo está planificando desarrollar una aplicación que inicialmente esté orientada para Windows, pero que finalmente se implementará multiplataforma (Mac, Linux y dispositivos potencialmente integrados)".

¿El plan es hacer multiplataforma o no? Puedo inferir que el código se escribirá inicialmente para Windows y luego, quizás algún tiempo después, se gastará el esfuerzo en modificar el proyecto para la capacidad multiplataforma. ¡Esto no será bueno para su salud o la de su equipo! Es necesario tomar una decisión comercial definitiva aquí. Una de las reglas de oro del desarrollo multiplataforma es tratar todas las plataformas con igualdad absoluta.

¿Puedes usar C # para entornos integrados? ¿Ya se ha hecho comercialmente? Sólo curioso.

"Estamos proyectando que al usar C #, podemos desarrollar nuestro producto más rápido y a menor costo debido al aumento de la productividad en comparación con C ++". ¿Qué quiere decir "proyectar"? ¿En qué hechos y cifras estás haciendo esta proyección? No olvide que el esfuerzo de codificación en algunos proyectos es bajo como ~ 20% del esfuerzo total requerido para llevar un producto al mercado. Entonces, la cuestión de la comparación de productividad de los lenguajes de computadora puede no ser tan significativa. En mi experiencia, no es productivo elegir un lenguaje de computadora en los llamados criterios de productividad.

"Estamos tomando una apuesta" Estoy de acuerdo con eso, y el juego parece contradecir el significado de la planificación. La pregunta es: ¿cuáles son los riesgos?

¿Has considerado la internacionalización?

Sí, estoy siendo crítico, pero alguien que está pagando el dinero por este proyecto puede ser más cuestionador.

Libro: Desarrollo multiplataforma en C ++: Creación de aplicaciones MAC OS X, Linux y Windows por Syd Logan - ISBN 032124642X Da una idea de los problemas involucrados.

He estado en proyectos multiplataforma e internacionalizados para Windows, Mac y Linux usando C ++ / Qt. Esto último es bueno para ambos temas. Una dis-like que tengo de Qt es que no es un C ++ moderno en la expresión idiomática ni tampoco fomenta el uso de modismos modernos de C ++. Al igual que MFC.


Mi instinto aquí sería seguir adelante y desarrollarme completamente en C #. Si tiene problemas de compatibilidad cruzada, vuelva a escribir las secciones necesarias en C / C ++ DLL / bibliotecas compartidas. Aparentemente, Mono puede manejar bibliotecas compartidas en base a una plataforma específica .

Dependiendo de lo que esté haciendo, esto podría terminar siendo irrazonable, pero aún así podría mantener el rápido desarrollo de Windows, y tendría que reescribir solo partes de la aplicación en C ++, no todo.


No tengo experiencia en este escenario, así que vale la pena lo que vale ... Probablemente usaría .Net, pero siempre me enfocaría en Mono. Esto significaría un riesgo mucho menor de usar la implementación de MS de .Net y pasar a ser inadvertidamente dependiente de alguna característica que todavía no se implementa en Mono, y por lo tanto, destruir su portabilidad a plataformas distintas de Windows.


Nuevamente una pregunta donde la respuesta es: ¡Depende! (Habilidad de sus programadores en C # y C ++ y si son realmente mucho más rápidos en C # y así sucesivamente).

Solo una observación:
El proyecto Mono ofrece una plataforma (la versión 2.0 admite hasta .NET 3.0) que se puede usar en sistemas Macs o Linux. Incluyendo azúcar de código de Microsoft como LINQ.



Por qué no usar múltiples idiomas Use C ++ para el marco subyacente que será el núcleo (la mayor parte del trabajo necesario) de su aplicación y plataforma independiente. Luego puede crear la interfaz de usuario en C # para su versión de Windows, y si más tarde decide hacer un puerto a Mac u otra cosa, puede escribirla en Java o Qt o en el idioma / API que decida usar. Creo que está bien si la UI depende de la plataforma, siempre que el núcleo de tu aplicación no lo sea.

Sería mejor decidir de inmediato si su aplicación será multiplataforma o no, pero si no puede, entonces creo que una IU dependiente de la plataforma con un marco / infraestructura independiente de la plataforma es un buen camino a seguir.


Potencialmente, ¿qué dispositivos integrados? Si no funcionan con .NET o Mono, estarías cortando la posibilidad si vas con C #. (No tiene por qué ser un problema de sistema operativo, algunos dispositivos incorporados tienen una memoria estricta o límites de rendimiento, que .NET / Mono podría exceder).

Si eso no es crítico, hay muchos factores a considerar. ¿Su proyecto usa lo que serían características estándar de .NET, o es probable que fuerce a Mono? ¿Es este un caso de conocer C # y no C ++, o simplemente tienes una mejor experiencia con C #? (Si eres mejor con C ++ que con C #, entonces C # no es probable que otorgue beneficios de productividad en un proyecto, y solo debes ir a C ++ y obtener experiencia C # en algo menos multiplataforma.) Lo importante es obtener una versión rápida en Windows? (Podría ser vital obtener una ventaja de primer jugador, o menor si está haciendo algo menos crítico). ¿Cuánto se beneficiará de las versiones de Mac y Linux (generalmente más de lo que su cuota de mercado indicaría, ya que hay menos competencia? )?


Si está haciendo C ++ y la GUI es importante, wxWidgets ve como "Nativo" en todas las plataformas. Vale la pena echarle un vistazo.

Si eres bueno con C #, definitivamente lo consideraría, por productividad.


Si no le molesta el aspecto no nativo de Windows (que es aparente incluso con el aspecto "Windows" que utiliza GIMP), puede usar Gtk # y Mono. En lo que respecta a la interfaz de usuario, he descubierto que Gtk # es más fácil e intuitivo (desde un PoV de programación) que el .NET framework. Por otro lado, la depuración probablemente será más fácil si usa .NET.


Si opta por un enfoque multiplataforma, creo que depende de cuán pesada sea la UI de su aplicación. Si la carne de la aplicación está en el back-end, una posibilidad no mencionada es ir por una mezcla de C ++ y C ++ / CLI. C ++ / CLI le da acceso al vasto .NET BCL (incluidos los componentes UI) para que pueda ingresar al mercado rápidamente en Windows, y puede quedarse con C ++ vainilla cuando esto no sea necesario. Luego, para realizar el acceso a otra plataforma, solo necesita apuntar a las partes de C ++ / CLI.

Por otro lado, quiere cuestionar seriamente la parte "eventual" del plan para migrar a otras plataformas. Concentrarse exclusivamente en Windows y usar .NET con C # o VB.NET le proporciona una ruta de desarrollo más sencilla en términos de la competencia del programador que necesitará.


Si quieres ir a plataformas cruzadas, C ++ es definitivamente el camino a seguir.

Editar: soy de los que piensan que debes elegir tu idioma de acuerdo con tu proyecto, y no preferir un idioma porque simplemente estás acostumbrado. Aunque C # puede ofrecer soporte multiplataforma, originalmente fue diseñado para ejecutarse solo en Windows.

Mark Maslar tiene un buen punto también, dependiendo de la aplicación que desea desarrollar, una aplicación basada en web sería completamente independiente de la plataforma.


Solo para agregar con esta discusión. He desarrollado un software con c ++. Soy el único desarrollador y su final del 80%.

Ahora me resulta difícil obtener el programador de C ++ y también cualquier programador de php de experiencia. Obtener gran cantidad de programador c #.

Yo también sé c #. Puede llevar un mes dos convertir c ++ a c # (dejando algunas características que siento demasiado para mantener).

mi aversión es tamaño .net Miré a mono también. Personalmente no es un problema para mí, ya que soy muy bueno en c ++. Pero el programador geting que puede hacer un proyecto complejo con PHP se ha vuelto difícil. Son solo un desarrollador web básico (el lugar en el que estoy buscando el programador y mi presupuesto).

Personalmente me gusta c ++ y me encanta el pequeño tamaño ejecutable. Mi prioridad es vender en línea. Por otro lado, es un programa de servidor, por lo que necesita una instancia en una LAN.

Tengo que tomar una decisión antes del mes ya que tengo que comenzar a terminar este proyecto.

Puede echar un vistazo a mi tipo de proyecto en ashnah dot com