¿C ++ moderno está reemplazando a C #? ¿Microsoft está presionando a los desarrolladores para que adopten C ++? [cerrado]

91

Escuché sobre la popularidad moderna de C ++ y algunas conversaciones sobre la migración de regreso a C ++ desde C # u otros lenguajes similares a C.

Conozco las características de C ++ 11, pero me gustaría escuchar sus experiencias, especialmente de los desarrolladores que migraron de C # a C ++.

Más importante aún, ¿Microsoft empuja a los desarrolladores a usar C ++? ¿Si es así por qué?

Amir Karimi
fuente
16
Creo que C ++ siempre ha sido un lenguaje más utilizado porque está mejor establecido y es más fácil de transportar que C #. No creo que esté reemplazando a C #. Para las aplicaciones empresariales basadas en Windows, C # seguirá teniendo una gran demanda como un lenguaje fácil de hacer . C ++ nunca se fue realmente. Simplemente tuvo una especie de resurgimiento recientemente.
KChaloux
2
Espero que no. Java y C # han sido de gran ayuda para los desarrolladores y todavía están evolucionando.
Jesse C. Slicer
44
Tanto C ++ como C # son solo herramientas : elija la mejor para el trabajo en particular. por ejemplo, si desea escribir código multiplataforma, puede usar C ++; si desea aplicaciones pequeñas que no requieren instalación en tiempo de ejecución .NET, puede usar C ++ (con CRT estáticamente vinculado); si desea desarrollar alguna herramienta GUI para Windows de forma RAD, puede usar C # y WinForms; etc.
Mr.C64
66
Es una buena pregunta, tal vez necesita una nueva redacción. No es otro idioma A versus lenguaje B. Más bien, es específicamente cuáles son las posiciones de Microsoft, por qué cambió y hacia dónde van porque la realidad es que la EM es lo suficientemente grande como para que cuando ejercen influencia al menos las montañas más pequeñas tienden para mover. Y sí, en este caso, definitivamente están influyendo.
DXM
99
Por favor, mantenlo civilizado todos. La grosería no será tolerada.
maple_shaft

Respuestas:

95

Sí, tus sospechas son correctas. Microsoft está presionando a C ++ para que regrese y se vuelva más popular.

No puedo encontrarlo ahora, pero hace un tiempo vi una presentación de uno de los grandes de Microsoft y todo estaba dirigido a los desarrolladores y se trataba de la implementación de Windows 8 y especialmente WinRT (el reemplazo para .NET framework también como Win32 API).

Tenía una línea de tiempo que explicaba cómo varias presiones estaban afectando qué tecnología era popular en ciertos momentos. Entonces, al principio, la gente quería velocidad, por lo que todos codificaron en C / C ++ (dos idiomas separados). A medida que el hardware se hizo más rápido, el enfoque se alejó de la velocidad de ejecución y más hacia la velocidad de desarrollo, por lo que los lenguajes de nivel superior se hicieron mucho más populares.

Sin embargo, ahora el enfoque se está volviendo más hacia las computadoras móviles y basadas en ARM (Windows 8 es la primera versión de Windows compilada para ARM) y muchos creen que se volverán mucho más populares y que algunos reemplazarán por completo el escritorio. Entonces, el enfoque (al menos en los ojos de Microsoft) está de vuelta en C ++ porque ahora nos importa la duración de la batería. Código de nivel superior = más instrucciones = se requiere más jugo.

Para respaldar esta transición de regreso a C ++, han introducido una API de programación de Windows 8 completamente nueva, llamada WinRT (la última vez que lo comprobé, ese era el nombre de todos modos). Esta API sigue el tema de .NET Framework en el alcance de la funcionalidad que proporciona, pero estará disponible para cualquier persona que codifique en C ++ (a través de interfaces COM), en C # o incluso en Javascript para aquellos que deseen escribir aplicaciones HTML 5 / Javascript. También están trayendo XAML (tecnología utilizada en WPF, su nuevo marco UI) para estar disponible también en C ++.

Entonces, para mí, eso indica que definitivamente hay más enfoque en C ++ en Microsoft que en el pasado.

ACTUALIZACIÓN # 1:

Dado que acabo de recibir una insignia de 'buena respuesta' para esto, pensé que tal vez debería volver y a) aclarar algunas cosas yb) hacer feliz a la policía de verificación de hechos porque, como todos sabemos en foros de tecnología, cualquier cosa inexacta podría dar lugar a guerras que duran años

  1. WinRT no es un reemplazo para .NET Framework, pero es otra alternativa que los desarrolladores de MS Windows ahora tienen y MS está presionando fuertemente a las personas para que vayan en esa dirección. Parece (mantenga sus llamas si esto no es 100% exacto) que WinRT estaba dirigido principalmente a aplicaciones modernas de interfaz de usuario, aunque las aplicaciones de escritorio normales también deberían poder aprovecharlo. Una vez dicho esto, MS está presionando fuertemente para que las personas cambien a escribir a) aplicaciones de interfaz de usuario modernas yb) comiencen a usar WinRT para que el porcentaje de cambio de equilibrio de las personas que usan .NET framework probablemente baje.

  2. C ++ NUNCA reemplazará lenguajes de nivel superior como C # o python. Al igual que esos lenguajes NUNCA reemplazarán a C ++. Esta fue probablemente la parte más controvertida de la pregunta de OP. Pero todo se trata del equilibrio y los hechos son que:

    • La comunidad C ++ (con MS como gran parte de ella) está presionando por un fuerte regreso para posicionar a C ++ como un buen lenguaje para dispositivos de baja potencia, cuya cuota de mercado ha estado aumentando como locos últimamente. Si no me cree, busque la serie de charlas "GoingNative" que comenzó el año pasado.
    • Con todo el esfuerzo y la influencia de Microsoft, el uso de C ++ definitivamente aumentará, mientras que C # podría caer algo más. Esto es lo que MS está presionando y, como dije en los comentarios anteriores, cuando MS pone su capital detrás de una idea, cambian gran parte de la industria. Probablemente recibiré una respuesta de un tipo que discutirá, "qué industria, siempre he estado en Linux" y a eso mi única respuesta es, ¡despierta! Sí, hay otros sistemas operativos, pero la mayoría del mercado de computadoras de escritorio, tanto el consumidor como el negocio en este momento, es Windows y cualquier desarrollador serio que desee maximizar el valor de su tiempo sería muy tonto no apuntar a esa parte del mercado de computadoras de escritorio.

En conclusión: Sí, MS está presionando para que C ++ regrese, por lo que lo más probable es que su popularidad aumente. No, C ++ nunca reemplazará a C #.

Actualización n. ° 2:

No sé por qué, pero la comunidad técnica tiende a ver las cosas en términos muy absolutos en blanco y negro cuando la realidad está llena de sombras grises. Esta es una respuesta a varios comentarios nuevos que se agregaron a esta publicación:

  1. .NET Framework no desaparecerá pronto (o nunca). Casi todas las tecnologías que tenían las ventanas desde los años 90 todavía existen de alguna forma o moda. Entonces, para aquellos que están tan apegados a .NET Framework: a) no se preocupen por su desaparición yb) dejen de discutir a su favor como si su vida dependiera de ello, su API es segura.

  2. WinRT vuelve a implementar una gran cantidad de funcionalidades que en el pasado proporcionaban las API de Win32 y .NET Framework. Las personas que desean esa funcionalidad tendrán una opción si quieren usar WinRT, .NET framework o continuar con Win32 API (eso tampoco está muerto). Si WinRT no admite la creación fácil de aplicaciones web hoy, hay una muy buena posibilidad de que las admitirá en el futuro.

La posición que Microsoft anunció es que WinRT es un gran marco que le dio a Microsoft la oportunidad de comenzar con una pizarra limpia y creó una API utilizando las lecciones aprendidas en Win32 API y .NET framework. Intenté buscar ese video, y todavía no puedo encontrarlo, pero una de las cosas que mencionó el orador es que hay ciertas áreas de .NET framework que podrían haberse definido mejor / más simple / más limpio y WinRT expone esa misma funcionalidad en esa nueva interfaz más limpia.

DXM
fuente
77
¿Fue la charla de Herb Sutter en C ++ y más allá, titulada "¿Por qué C ++?" Hay un video en el Canal 9, aunque tengo problemas para acceder en este momento, probablemente porque Redmond está organizando un gran evento de transmisión. Su lógica tiene sentido, pero este tipo de declaraciones realmente necesitan respaldarse con algunas referencias, ya que esto representaría un cambio estratégico importante para Microsoft y cualquier otra persona que desarrolle software con los productos de Microsoft.
Robert Harvey
13
WinRT no es un reemplazo para .NET. Mantenga sus datos bajo control por favor.
Eufórico
44
@Euphoric: En otras palabras, .NET Framework nunca fue un reemplazo para la API Win32. Al mismo tiempo, cuando salió C #, muchas personas se cambiaron y se olvidaron de hacer llamadas a funciones de estilo C en archivos DLL de Windows. MS está presionando para el mismo cambio ahora. Entonces, sí. .NET Framework continuará existiendo bajo el capó de WinRT y seguro que todavía puede usar .NET Framework, pero MS está presionando para que las personas cambien al nuevo marco.
DXM
21
@gbjbaanb: esto es 100% falso. El primer ALL .NET siempre fue un contenedor muy agradable para la biblioteca Win32. En segundo lugar, solo hay diferencias menores entre el Fullperfil .NET y el perfil .NET 'WinRT', las principales diferencias son una gran cantidad de cosas que se implementaron mal hace 10-15 años, se eliminaron y se reemplazaron con un código mejor diseñado. Hasta que se deshagan de la biblioteca Win32 todos juntos .NET está aquí para quedarse. Su comentario muestra una falta COMPLETA y TOTAL de conocimiento con respecto al lenguaje .NET y C # en sí.
Ramhound
66
Sin mencionar que para las aplicaciones web, .NET es excelente. Si alguna vez fuera un 'reemplazo', sería para aplicaciones de escritorio y no para aplicaciones web.
George Stocker
22

No, Windows 8 se trata de usar cualquier idioma que necesite (o sepa) para hacer el trabajo. JavaScript, lenguajes .Net (C #) y C / C ++ son compatibles por igual.

Nada está siendo reemplazado y de todos modos depende de los desarrolladores al final. Sin embargo, existe un impulso para una mejor duración de la batería que WinRT hace más fácil.

La excepción son los juegos en los que C ++ obtiene más soporte, especialmente en Windows Phone 8, mientras que los lenguajes administrados no tienen soporte nativo (también conocido como no xna).

Daniel Little
fuente
1
+1 Microsoft está desesperado por lograr que Windows 8 sea adoptado en el mercado de teléfonos inteligentes y tabletas. Apple obtiene más ingresos solo del iPhone que Microsoft en total. Un obstáculo es que hay muy pocas aplicaciones para Windows phone / tablet en comparación con las plataformas establecidas. Entonces quieren hacer posible que cualquiera pueda crear una aplicación, en su idioma favorito. C #, C ++ o JavaScript.
MarkJ
No sé por qué decidieron abandonar el soporte nativo de c / c ++ a partir de Windows Phone 7. Desde ese día, Windows + Windows Mobile se convirtió en una plataforma importante del 90% para nuestra empresa, que pasó a tener un 10% de importancia. El 10% se debe solo a las mejores herramientas de desarrollo (visual studio), de lo contrario, ya no fabricamos más productos para el escritorio de Windows.
Pavel P
1
@Pavel No estoy seguro de lo que estás diciendo allí ...
Daniel Little, el
@Pavel: eliminaron el código nativo de WinPhone7, luego eliminaron el código administrado de WinPhone8. Tal vez pueda volver a visitar la plataforma ahora, o simplemente ignorarla hasta que obtenga una participación de mercado mucho mayor.
gbjbaanb
19

Conozco las características de C ++ 11, pero me gustaría escuchar sus experiencias.

La idea de que la gente preferiría C ++ sobre C # (o prácticamente cualquier otra alternativa posterior a 1990 [no php]) para la programación de propósito general es ridícula . C ++ 11 agrega algunos bits que faltan, pero sigue clavando patas a un perro .

C ++ tiene algunos buenos nichos, y sigue siendo la mejor opción en algunas plataformas con soporte de compilador limitado. Pero no, C ++ moderno no está cerca de reemplazar nada, excepto quizás C ++ roto y anticuado.

Telastyn
fuente
31
Lee lo que estás escribiendo. Usted afirma directamente que usar C ++ para la programación de propósito general sobre C # es ridículo . ¿Es sinceramente un hecho en el que crees, o es simplemente tu propia opinión exagerada?
zxcdw
38
@zxcdw: si tengo 100 problemas de programación generales, haré ~ 90 de ellos más rápido, mejor, con menos errores usando C # o Java o Python o Scala o ... Y eso es ser generoso. Este es el punto de vista común de casi todos los programadores profesionales que conozco; incluso los que usan C ++ como su lenguaje principal.
Telastyn
33
@zxcdw: Soy un desarrollador incondicional de C ++. He hecho C ++ durante más de 15 años y trabajé principalmente en aplicaciones de back-end que necesitan C ++. He estado en STL y en la mitad de Boost. Para disgusto de mi equipo, introduje la metaprogramación de plantillas en pocos lugares que pensé que lo merecían. El punto que estoy tratando de hacer es que amo C ++ y trabajo con él. Dicho esto, estoy de acuerdo con Telastyn, si tengo un problema general que no requiere lo que C ++ tiene para ofrecer, prefiero elegir C # o incluso Python. Son idiomas de nivel superior y simplemente haces las cosas más rápido en ellos. Esto es cierto al menos para los desarrolladores de Win
DXM
55
@MadKeithV: si no estuviera trabajando en una aplicación C # que se ejecuta en OSX, iOS y Android, podría darle un poco más de peso a ese argumento multiplataforma. Incluso ignorando eso, los lenguajes que no son C # que enumeré son casi siempre mejores opciones que C ++ cuando la plataforma cruzada es una gran preocupación. C ++ 11 no está haciendo mucho para alejar esas opciones.
Telastyn
14
Si todo lo que tienes es un martillo, todo parece un clavo. Las mejoras en C ++ 11 no disminuirán el impacto generalizado de C # y otros similares, pero quizás más lenguajes agnósticos de plataforma, sino que mantendrán a flote esa nave. El mayor punto de venta de C ++ 11 sigue siendo que puede ser el lenguaje de extremo a extremo para un sistema que hurga en las profundidades de un sistema, pero que ofrece la oportunidad de jugar con abstracciones de orden superior.
JustinC
2

DXM escribió:

Entonces, el enfoque (al menos en los ojos de Microsoft) está de vuelta en C ++ porque ahora nos importa la duración de la batería. Código de nivel superior = más instrucciones = se requiere más jugo.

De acuerdo con estas palabras, elegir Java como lenguaje / marco principal para el Android de Google fue un error. No era. Un lenguaje de nivel superior generalmente significa hacer las cosas más rápido y creo que esto es lo más importante para Microsoft y Google. Cuantas más y mejores aplicaciones se creen para la plataforma, mayor será la ganancia del productor del sistema operativo.

Por otro lado, todavía hay mucho software para Windows escrito en C ++, por lo que presionar a esos desarrolladores para que cambien a C # / JavaScript / cualquier otra cosa sería una locura. Microsoft se enfoca en dar la posibilidad de desarrollar aplicaciones Win8 a tantos desarrolladores como sea posible, por eso, en mi opinión, decidieron admitir C ++ y JavaScript en la pila de desarrollo Win8.

Rotman
fuente
55
Java fue un error. Si desea un rendimiento sin procesar (y a menudo lo hace), entonces desea escribir en C / C ++. Si desea la productividad del desarrollador, quiere un lenguaje de nivel superior como Python o PHP o Ruby o JS. Java (y C #) son sistemas intermedios que no le brindan ni el mejor rendimiento ni la mejor productividad. Tal como está, C ++ no es tan malo: puede obtener una buena productividad una vez que sepa lo que está haciendo.
gbjbaanb
8
@gbjbaanb Tengo sentimientos encontrados acerca de su comentario: hace unos años, poner Java y C # en el mismo nivel de abstracción habría tenido sentido, pero la introducción de LINQ, expresiones lambda y funciones de programación asíncrona en las versiones más recientes de .NET tienen movió C # a un nivel superior (Java se pondrá al día con la falta de programación funcional en JDK8, pero aún está en la etapa de acceso temprano).
codesparkle
2
@gbjbaanb afortunadamente, WCF es solo una pequeña parte de .NET, y generalizar que aplicar al lenguaje C # no es válido. ¿Has utilizado las nuevas funciones desde .NET 3? Porque VS no es un entorno de desarrollo tan bueno (de hecho, es realmente molesto sin ReSharper). Entonces, teniendo en cuenta que este mismo sitio (y toda la red SE) está construido con C #, su comentario parece un poco inexacto.
codesparkle
1
@rotman Por favor, no responda a las respuestas de otras personas en su propia respuesta. Las respuestas solo deben abordar la pregunta original :)
Andres F.
66
@gbjbaanb: Diría que fue una afirmación sin evidencia de que los sistemas intermedios que no le brindan ni el mejor rendimiento ni la mejor productividad son un error. Teniendo en cuenta que el rendimiento y la productividad son tanto importante, la mejor solución es la que equilibra los dos, y una selección de mediana suelo como Java o C # es una excelente elección para muchos casos de uso.
Carson63000
2

C ++ todavía tiene archivos de encabezado, preprocesadores flexibles (#define), ... cosas que algunas personas consideraron estas características 'malvadas' o 'difíciles de administrar'.

C #, por otro lado, usa metadatos, no es necesario escribir y mantener archivos de encabezado.

Acerca de Microsoft agregando más funciones a C ++: no es un asunto sorprendente.

Cada compilador de C ++ agrega más funciones, incluidas las funciones de C ++ 11. gcc es también

linquizar
fuente
77
Si todo lo que puede decir mal acerca de C ++ son los archivos de encabezado, indirectamente ha demostrado el punto. Puedo enumerar una gran cantidad de problemas serios de C #, no portabilidad, no deterministas, gastos generales de tiempo de ejecución, propietarios, etc.
user805547
1
Usa la herramienta correcta para el trabajo correcto. C ++ es excelente en compañías como Intel, ya que el rendimiento de varios códigos no administrados requiere un nivel bajo para los proyectos de medallas, pero si necesita un sitio web / servicio web que HAGA cada compañía, ¡buena suerte con C ++ para eso!
Tom Stickel
1

Podría ser solo yo, pero veo mucho más uso de C simple que C ++.

El hecho de que C ++ se haya tragado todo C hace que sea difícil inferir quién está usando qué.

Pero hay muchos más proyectos de código abierto de C que C ++.

Mi opinión es que si necesita una velocidad cercana al metal, use C. Si necesita flexibilidad y capacidad de administración con un rendimiento razonable, use C # o Java. Si desea un diseño limpio hecho rápidamente, use Python, Scala, Groovy o cualquiera de varios idiomas con todas las funciones.

James Anderson
fuente
2
No, creo que te equivocas aquí. C ++, si deshabilita las excepciones, está tan cerca del metal como C, siempre que sepa lo que está haciendo. El problema son los ABI. En C ++ la situación aún no se ha resuelto, están trabajando en ello. Una vez hecho esto, creo que no será muy atractivo usar C en lugar de C ++ cuando, de hecho, C ++ tiene una mejor comprobación de errores y es un superconjunto, por lo que la herramienta sería superior en ese punto.
Germán Diago
0

C ++ no está reemplazando a C #. Veamos dónde se usa el lenguaje c ++. Se utiliza cuando es necesario un alto rendimiento, para escribir bibliotecas de middleware, acceso de bajo nivel y para escribir código para dispositivos con recursos limitados. Aunque puede usar C # para algunos de estos, C ++ es más adecuado para estos. El impulso de Microsoft para c ++ está muy relacionado con su gran impulso al espacio móvil. Nadie le pedirá que escriba su próxima aplicación web en c ++. Pero con Qt, el argumento de productividad no puede hacerse contra c ++. Pero creo que mucha gente no está familiarizada con Qt.

Jaak
fuente
C ++ todavía se usa mucho en el desarrollo de software comercial no vertical de Windows.
bit-twiddler
1
C ++ es como la herramienta más profesional que puede usar para escribir software. Pero debe ser hábil para escribir un buen código, ya que es bastante gratuito y tiene algunas peculiaridades para la compatibilidad con versiones anteriores. Creo que en realidad es muy adecuado para todo tipo de software, excepto los scripts. El problema es la curva de aprendizaje. Con las bibliotecas modernas es muy competente incluso en productividad. Y piense que si la aplicación es exitosa, debe portarla. La portación es más fácil con las bases de código C / C ++, para compilar la disponibilidad. La lista de software escrito en C ++ es interminable: Amazon, Google, Dropbox, Telecom, juegos, Facebook ...
Germán Diago
-4

No, C ++ no puede reemplazar C # porque todas las aplicaciones de Windows Phone 8 que no son Direct3D deben desarrollarse con C #. No puede desarrollar y publicar aplicaciones en la tienda de aplicaciones wp8 simplemente usando C ++ o HTML5 / Javascript. Y mientras Microsoft no elimine esta restricción, C ++ no está reemplazando nada. Como resultado, estoy seguro de que muy pocas personas se desarrollarán para WP8. Pobre Nokia, perdiendo una vez más.

Aquí está el extracto del centro de desarrollo de microsoft :

Windows Phone 8 no es compatible con la interfaz de usuario XAML con el modelo de aplicación de código subyacente C ++ que es compatible con las aplicaciones de la Tienda Windows.

aún otra:

¿Esto significa que no puedo usar C ++ con XAML para desarrollar una aplicación en Windows PHone 8, estoy restringido a usar C # + XAML?

Eso es correcto. XAML solo se puede usar con C #. C ++ se puede usar para un componente WinRT usado por el proyecto C #.

Incluso los MVP de Microsoft afirman que este rumor es una desinformación deliberada hecha por el propio Microsoft:

Me encanta lo que Microsoft está haciendo con WinRT y Windows Phone 8, pero desearía que no vendieran demasiado, ya que frustrará a los usuarios una vez que aprendan la verdad del asunto.

Y este marketing deliberadamente equivocado desperdicia los meses de las personas :

Hubiera sido bueno saber hace MESES, antes de seguir la ruta del código nativo con mi aplicación Metro.

Özgür
fuente
1
Sus enlaces indican que puede usar C ++ para el desarrollo de WP8, y solo XAML requiere C #. Además, Direct3D solo es compatible con C ++.
Lee
@Lee, ¿puedes desarrollar una aplicación que no sea Direct3D sin usar C # para WP8?
Özgür