¿Cuál es el papel de C ++ hoy?

41

Actualmente soy estudiante de TI y me pregunto qué sigue siendo importante en C ++ hoy, ¿para qué se utiliza? Completé un curso básico de C ++ en mi universidad, pero no puedo imaginar dónde puedo usar mi conocimiento y en qué dirección debo ir aprendiendo C ++.

En otras palabras, ¿qué debo aprender para convertirme en un programador de C ++ exitoso?

Actualmente estoy aprendiendo Java solo porque no veo claramente en qué área C ++ podría ser útil hoy, pero sé claramente qué tipo de trabajo haré como programador de Java. Pero todavía espero que C ++ no esté muerto.

infierno
fuente
2
Este es mi punto de vista. C ++ es muy útil en situaciones de tiempo real (y videojuegos). También uso C ++ para aplicaciones de escritorio (no se olvide de Qt) por motivos de rendimiento.
hosomaki
1
@stign IMO es probable que eventualmente muera, ya que es probable que llegue un momento en que todos los idiomas de hoy sean obsoletos (probablemente debido a cambios masivos en el hardware que se está utilizando).
Kenneth
17
C ++ está lejos de estar muerto (escribo nuevo código en él todos los días), y si COBOL es una indicación, tendré trabajo por muchos, muchos años por venir.
Michael Kohne
2
Eche un vistazo al Beacon de lenguajes de programación y haga su propia conclusión: lextrait.com/vincent/implementations.html
Nemanja Trifunovic el
1
Recientemente he visto algunos videos interesantes en el canal 9 de Microsoft . Microsoft ha gastado millones en investigación de mercado y, basándose en su investigación, habla de un renacimiento de C ++. Mira este video .
grokus

Respuestas:

57

La característica principal de C ++ es la gestión de recursos vinculada al alcance , SBRM (más comúnmente conocido como " RAII "). Es el único lenguaje de programación industrial que se construye alrededor de este concepto. En C ++, los tiempos de vida de todos los objetos son exactamente conocidos, y los programas de C ++ (bien escritos) garantizan que los recursos se adquieran y liberen de manera totalmente determinista. En comparación, los idiomas recolectados de basura o administrados de otra manera no ofrecen tales garantías; de hecho, los objetos en esos idiomas pueden persistir después del final de su vida.

Esa es la razón por la cual C ++ se usa en finanzas, videojuegos, sistemas integrados y en tiempo real de alto rendimiento, transporte, fabricación y otras industrias donde el determinismo y la precisión son importantes. No hay alternativas

Por supuesto, se usó para muchas más tareas que esta, y esas tareas se están perdiendo en C # y Python y otros lenguajes más adecuados, pero eso no está afectando su nicho central.

Cubbi
fuente
20
A cualquiera que use malloc en C ++ me gustaría golpear su cabeza con un objeto duro. Además, hay una característica menos conocida del operador newen C ++ llamada ubicación. Permite reutilizar un espacio de memoria actualmente ocupado. Entonces, si alguien quería evitar (o minimizar) la fragmentación, puede hacerlo, en teoría. Y predecible no es lo mismo determinista.
Tamás Szelei
44
@Apalala C ++ también tiene un recuento de referencias, pero es mucho peor que SBRM en términos de gestión de la vida útil del objeto. No estoy simplemente hablando de dura-RT determinismo, estoy hablando sobre el comportamiento determinista del modelo de objetos.
Cubbi
44
Cuando aprendí C ++, RAII no era particularmente conocido; Aprendí administración de punteros nuevos y eliminados y basados ​​en el cerebro. Así que no creo que pueda caracterizarlo como "construido alrededor del concepto". Las bibliotecas y otras estructuras de soporte que se usan hoy en día pueden tener, pero no el lenguaje central o la sintaxis.
jprete
77
@jprete Es cierto que muchas de las fortalezas de C ++ se descubrieron en lugar de diseñarse. Esta publicación trata sobre el lenguaje posterior a 2005.
Cubbi
55
RAII fue diseñado en C ++. Pero la mayoría de los programadores de C ++ siguieron escribiendo C, reemplazando malloc por nuevo y gratuito con eliminar.
Kevin Cline
40

Hay algunos mercados para C y C ++ (a mi entender, aunque limitado)

  1. Código existente C y C ++ tienen algunas de las bases de código más grandes existentes. El código de este tamaño no se puede descartar simplemente porque ha surgido el "próximo idioma nuevo". Los enlaces en C son más o menos el estándar de interacción entre idiomas en la mayoría de las plataformas, por lo que es útil crear (al menos) bibliotecas de contenedor en C o C ++.
  2. Aplicaciones de alto rendimiento (por ejemplo, financiación de alta frecuencia). C y C ++ aún logran un mejor rendimiento general que la mayoría de los otros lenguajes de programación. Lo más importante en C ++, a menudo se construyen abstracciones con elementos exclusivos del compilador, como plantillas, que mueven el cálculo del tiempo de ejecución al tiempo de compilación (haciendo que su aplicación general sea más rápida).
  3. (Similar a 2) Aplicaciones de baja latencia. Los lenguajes que se ejecutan, por ejemplo, en CLR o JVM, a menudo pueden ser casi tan rápidos como C ++ dependiendo de la aplicación, pero aún es necesario cargar el CLR o JVM en la memoria antes de que su programa pueda ejecutarse. Si tiene requisitos de inicio difíciles, esto es importante. EDITAR DESDE COMENTARIO : para el caso, los requisitos de latencia dura de cualquier descripción son notables aquí. Los lenguajes que se ejecutan en máquinas virtuales rara vez ofrecen límites de tiempo difíciles porque la ejecución de, por ejemplo, la recolección de basura no es un proceso determinista.
  4. Sistemas embebidos. Algunos sistemas integrados tienen el hardware para ejecutarse, por ejemplo, la JVM (Android de Google (bueno, no es realmente la JVM, pero está cerca), Blackberry de RIM) o CLR (Windows Phone), pero la mayoría de los sistemas integrados no tienen el poder para ejecutar lenguajes que requieren más soporte de tiempo de ejecución que el requerido para C o C ++ (que casi no tiene soporte de tiempo de ejecución).
  5. Implementación de aplicaciones restringidas. En ocasiones, requerir la instalación de JVM o CLR es una exageración exagerada si todo su programa tiene solo unos pocos cientos de KB. (Por ejemplo, la mayoría de los programas en los que trabajo deben implementarse como un solo .EXEarchivo sin ningún tipo de instalador ni nada por el estilo; para esto no hay alternativas)
Billy ONeal
fuente
2
La latencia de inicio no es el único tipo de latencia que debe preocuparse: los requisitos difíciles en tiempo real pueden ser un factor decisivo mucho mayor.
greyfade
1
Agregue cualquier cosa donde no desee estar encerrado en un fabricante en particular (C # u Objective-C) o no quiera que su lenguaje desaparezca en un montón de demandas (Java)
Martin Beckett
@greyfade: Eso es lo que quise decir con (2), pero estoy de acuerdo en que no está claro. Editado @ Martin: Si bien creo que es una buena fortaleza para C ++, no creo que responda la pregunta, que es en qué mercados se usa comúnmente C ++. Además, no creo que llame a C # bloqueado a un fabricante en particular cuando existe una versión con licencia <S> BSD </S> (OOPS: It's LGPL) del CLR (mono).
Billy ONeal
1
También 5. Sistemas operativos y marco central. Puede hacer mucho en una máquina virtual, pero la máquina virtual aún debe implementarse en C y / o C ++.
Jan Hudec
1
@ Jan: Sí lo haría. Cosas como la reflexión y los amigos provocarían problemas 2-4. El único subconjunto que realmente necesitaría para escribir el recolector de basura sería algún objeto que represente la memoria física.
Billy ONeal