Una pregunta no siempre es si este lenguaje es mejor que eso, pero ¿para qué tipo de aplicaciones es mejor ? Hay muchas áreas en las que C sería una mejor opción y hay muchas en las que C ++ sería una mejor opción.
En general, C tiene un sistema de tipo más simple y un modelo de memoria, que puede implementarse fácilmente en multitud de plataformas. Cuando apuntar a una nueva plataforma es importante para usted, lo más probable es que primero haya un compilador de C, antes de que haya un compilador de C ++, especialmente uno que cumpla con los estándares. Además, el compilador de C no intenta ser demasiado inteligente y no hace ninguna magia detrás de escena que no solicitó, por lo que si es importante que tenga el control de cómo se implementan exactamente las cosas, C es tu amigo. La magia es genial cuando sabes cómo funciona, pero cuando la aplicas sin rodeos sin tener la más mínima idea de lo que hace, y si es la poción adecuada para el trabajo, realmente obtienes de lo que Linus Torvalds se quejaba: http : //article.gmane.org/gmane.c …
Desafortunadamente, debido a que C ++ es retrocompatible con C (en la medida de lo posible), muchas personas realmente no saben dónde termina C y comienza C ++. Las personas a menudo afirman que escriben el código K&R C, pero se permitirán usar comentarios de estilo BCPL (por ejemplo, // …, aceptado por el estándar C99 ahora), declarar variables en el medio del bloque, usar const como calificador de tipo, lanzar en algunos argumentos predeterminados sobre los parámetros de función, etc. Si alguna vez ha sido culpable de ellos, comience aquí: http://stroustrup.com/Programmin … Para ver realmente los beneficios de C ++ sobre C por sí mismo, debe intentar comprender qué no está en C y cómo lo compensa en su propio código. Si hay una función de lenguaje C ++ que compensa por usted en una sintaxis mucho más clara, seguridad de tipo más fuerte y mejor rendimiento, entonces C ++ es su amigo. Aquí hay algunos ejemplos:
- Mientras trabaja en C, ¿se encuentra escribiendo macros que agregan tipos al nombre de funciones y estructuras de datos auxiliares, con el último entrando y saliendo del primero? Lo más probable es que las plantillas de C ++ hagan un trabajo mucho mejor para usted allí porque son de tipo seguro, no tendrán ninguna sobrecarga de rendimiento en comparación con su código y, a menudo, en realidad serán más rápidas que su C hecha a mano: clasificación en C ++ vs. C
- ¿Incorpora muchos punteros de función en sus estructuras? ¿Los valores de estos punteros realmente difieren por objeto o difieren solo por clase? ¿Los extrae en una tabla compartida y mantiene un puntero dentro del objeto para ahorrar memoria? Bueno, también lo hace el compilador de C ++ en su implementación de funciones virtuales. También puede minimizar el número de tablas compartidas para usted y resulta que hay muchas alternativas a la mejor manera de implementarlas: http: //academic.research.microso …
Personalmente, elijo C ++ sobre C o muchos otros lenguajes de programación, porque C ++ me da el poder de abstracción que no está disponible en ningún otro lugar. Lo que es más, me lo da con poca o ninguna sobrecarga de tiempo de ejecución, que es lo que realmente le importa a las personas con mentalidad de rendimiento. Claro, puedes dispararte en el pie mientras lo haces. Pero no todos tienen que hacerlo, mientras que todos pueden cosechar los beneficios una vez que alguien lo haya hecho. La gente ha implementado en C ++ como una biblioteca lo que se considera una prerrogativa de algunos lenguajes dedicados:
- ¿Has oído hablar de las plantillas? Debido a ellos, Fortran estaba considerando agregar plantillas al lenguaje solo porque C ++ podía lograr en una biblioteca el rendimiento de lo que se consideraba el dominio del compilador Fortran: cálculos algebraicos altamente optimizados.
- ¿O le gustaría que sus valores se anoten con cantidades físicas que representan y que el compilador verifique que no los mezcle de manera inapropiada? Implementable como una biblioteca en C ++, consulte Comprobación de dimensiones de cantidades físicas y las referencias en ese artículo, así como el Capítulo 32. Boost.Units 1.1.0.
- ¿Necesita analizar un lenguaje desde su programa C ++? Entonces Spirit 2.5.2 – 1.52.0 es la biblioteca que necesita.
- ¿O está cansado del patrón de diseño de visitante y le gustaría tener una declaración de cambio de tipo o incluso mejor, una coincidencia de patrones de estilo funcional completa disponible para sus programas de C ++? Bueno, pruebe nuestra Biblioteca Mach7, que es un prototipo completamente funcional y eficiente de una función de lenguaje con la que estamos experimentando.
Todos estos y muchos otros, como se ve por ejemplo en Boost 1.52.0 Library Documentation, son posibles en C ++ como biblioteca, y si ese tipo de poder te atrae, ¡C ++ es de lo que quieres aprender más! Juegue con él y vea qué más puede extraer de él, luego vea qué tipo de características del lenguaje harán que su biblioteca (así como otras) sea aún mejor, exprese su opinión a la Fundación Standard C ++ y con un poco de suerte y el apoyo de la comunidad de C ++ puede encontrar que en la próxima versión del estándar de C ++, su función y su biblioteca estarán disponibles para que todos los demás las usen.
Si te convencí de que C ++ es lo suficientemente diferente de C y quizás quieras aprender un poco más de lo que has escuchado de tu Java, OCaml, C #, Haskell, loving amigos, aquí hay algunos recursos útiles para considerar:
- Bjarne Stroustrup. “Programación: Principios y práctica usando C ++” – un gran libro de texto sobre C ++ destinado a enseñar el lenguaje a los novatos. Está estructurado para ayudar a los estudiantes a comenzar a usar el idioma y especialmente su biblioteca estándar lo antes posible. Más temas técnicos sobre cómo implementar esas instalaciones estándar están cubiertos hacia el final del libro.
- Bjarne Stroustrup. “El lenguaje de programación C ++, 4ª edición” – la próxima edición del texto estándar en C ++ por su autor. Esta edición se ha rediseñado significativamente para tener en cuenta y analizar las nuevas características del estándar C ++ 11.
- Nicolai M. Josuttis. “The C ++ Standard Library: A Tutorial and Reference (2nd Edition)” – gran libro que analiza tanto las nuevas características del lenguaje como la nueva biblioteca estándar del estándar C ++ 11.
- Página de inicio de Bjarne Stroustrup: tiene excelentes preguntas frecuentes sobre C ++, varias entrevistas con el autor, material de apoyo para sus libros, publicaciones en C ++, etc.
- Standard C ++ Foundation: una organización sin fines de lucro con la misión de transmitir información actualizada sobre C ++ y poner a disposición bibliotecas estándar y comunitarias para desarrolladores de C ++ moderno. Está fundado y patrocinado por Microsoft, Google, Intel, IBM, HP, ARM, Pearson, Bloomberg, OpenMP, BD Software.
- Sutter’s Mill – Herb Sutter’s, el famoso evangelista de C ++, blog sobre el lenguaje, su futuro y el estado del arte.
- Bjarne Stroustrup. “El diseño y la evolución de C ++”: si desea saber qué dio forma a C ++ y qué decisiones determinaron el diseño del lenguaje, esta es una gran retrospectiva sobre por qué las cosas se implementaron de una manera y no de otra, por qué algunas no agregado al lenguaje, etc. El libro cubre el estado de C ++ hasta el estándar C ++ 98, con desarrollos más recientes discutidos en el documento HOPL-III “Evolucionando un lenguaje en y para el mundo real: C ++ 1991-2006” ( http://www.stroustrup.com/hopl-a …)
- El Beacon de lenguajes de programación: una encuesta de algunas de las aplicaciones más grandes conocidas y los lenguajes de programación en los que se escribieron junto con algunos comentarios sobre por qué se eligió un idioma en particular.