2010-08-03 9 views
18

Apenas he utilizado C++ en la última década, y ahora parece que volveré a hacer algo en él. Estoy deseando que llegue, pero me pregunto cómo ha cambiado desde la última vez que lo usé.¿Cómo ha cambiado C++ en la última década?

¿Hay alguna página web buena/breve, publicaciones en blogs o incluso libros sobre cómo ha cambiado C++ en la última década?

Tenga en cuenta que esta pregunta se refiere al idioma, así como a las herramientas o cualquier información adicional sobre el trabajo en C++. Específicamente, estoy trabajando en Windows, usando VC++ 2008.

+4

¿Está preguntando sobre el estándar actual, en cuyo caso la respuesta es "no mucho" o el próximo estándar, en cuyo caso la respuesta es "bastante". Lo mejor en el último caso es consultar el sitio web de Stroustrup para obtener buenas descripciones de nuevas características. –

+0

Pregunto por el estándar actual (en realidad a partir del VS2008) –

+1

Se ha comenzado a ver mucho más como perl, pero con mayor léxico. – msw

Respuesta

17

Si bien la norma oficial no ha cambiado mucho en la última década más o menos, hay varias cosas importantes que han sucedido:

  • si bien no es una norma oficial, sin embargo, una futura norma nueva (comúnmente llamado C++ 0x) está "a la vuelta de la esquina". GCC y MSVC 2010 han incorporado partes significativas de ese nuevo estándar, pero no estoy seguro de cuánto es de uso común.
  • la Boost library se ha convertido en un jugador importante en el suministro de apoyo adicional para el idioma - hasta el punto de que era una influencia significativa en las nuevas técnicas de programación 'basados ​​en la plantilla'
  • estándar se han vuelto mucho más frecuente, probablemente superando el técnicas más antiguas de "reutilización de código" basadas en la herencia (esto podría haber estado en marcha la última vez que miró C++ según las prácticas que su tienda podría haber estado usando en ese momento).
  • compiladores (y en particular de Microsoft) han recorrido un largo camino en el cumplimiento de las normas
+0

+1 Gracias, nunca he oído hablar de Boost Library. Si bien las plantillas se usaron en ATL y STL, creo que muchos desarrolladores las encontraron demasiado complejas. Creo que son increíbles, así que me alegra saber que se han vuelto mucho más populares. –

+7

@John: Boost es una GRAN parte de la moderna C++. Prácticamente todos los proyectos serios dependen de Boost. – Puppy

+1

Bueno, utilizo Boost en uno de mis proyectos (para la biblioteca de números aleatorios), pero en cuanto a que es GRANDE, diría que es bastante difuso y está muy mal documentado. Los pocos bits realmente importantes ahora son parte de C++ 0x. –

11

El mayor cambio es que el estándar C++ actualmente funciona en todos los principales compiladores. Cosas como plantillas de miembros solían ser dudosas.

+0

y la Biblioteca de plantillas estándar realmente es un estándar en el que se puede confiar con la mayoría de los principales proveedores de compiladores. –

+3

Bueno, la biblioteca estándar puede ser. –

2

VS2008 viene con TR1, una gran adición a std que contiene cosas como matrices estáticas, punteros de recuento de referencias y cosas por el estilo. Aparte de eso, el mayor cambio es solo que el compilador compila cómo define el estándar.

+0

Gracias por la edición del enlace. – Puppy

10

El idioma en sí no ha cambiado mucho. Sin embargo, las mejores prácticas y modismos hicieron mucho.

Le sugiero que eche un vistazo al libro "C++ Coding Standards: 101 Rules, Guidelines, and Best Practices" de Herb Sutter y Andrei Alexandrescu para ver cómo se ve el C++ moderno hoy en día.

+0

+1: También quería escribir la misma respuesta: el cambio en la "mentalidad" de los desarrolladores es con mucho el más importante. – IanH

9

Creo que uno de los mayores cambios es uno de mentalidad: (¡por fin!), Muchas personas se han dado cuenta que las plantillas son increíblemente potente y no es necesario que sea lento, y el uso del STL y el impulso está mucho más extendido que hace 10 años.

+6

Y tal vez en otros 10 años, la gente habrá dejado de llamar a la Biblioteca estándar "STL". –

+0

+1 - Desearía que le dijeras eso a los muchachos en el trabajo que difundieron FUD de 10 años sobre plantillas y excepciones. –

+1

Bjarne Stroustrup todavía se refiere a él como el STL muchas veces en su sitio web, así que creo que es justo decir que está muy arraigado. Personalmente, mientras la gente lo use no me importaría menos lo que ellos llaman :-) –

2

Una pregunta interesante ya que estoy llegando a mi décimo aniversario de la programación de C++ para monedas.

Mi opinión personal es que sería un poco cauteloso, pero solo un poco, ya que no lo he visto todo (aunque creo que puedo adivinar cómo es), de prestar mucha atención a internet. cámara de eco. Es cierto, algunas personas se han cansado por el estilo moderno de C++, con todo completamente configurado y utilizando técnicas modernas para que el compilador haga lo mejor posible con su Prolog. Sin embargo, esto ciertamente no es universalmente cierto, y, en general, el código de C++ que veo hoy es muy similar en muchos aspectos al código de C++ que vi hace diez años.

que sería una buena idea para poner al día las modas modernas, porque algunas cosas que era algo raro hace diez años (punteros inteligentes, el uso regular de RAII, contenedores de la biblioteca estándar y esas cosas) es ahora más común. Pero a menos que esté seguro de que el código con el que trabajará está adornado con plantillas e impulso, y así sucesivamente, tiene buenas posibilidades de trabajar con algo que en el fondo se parece mucho a lo que solía trabajar.

Puede que esté pasado de moda decirlo, pero eso no lo hace menos cierto: independientemente del nivel de habilidad, a mucha gente no le importa el C++ moderno. Algunos, porque no lo entienden. Algunos, porque lo entienden. Y para algunos, tal vez "cuidar" ni siquiera es la palabra correcta, ni siquiera saben que existe. Y como es de esperar, todas estas personas codifican en consecuencia.

Quizás me mueva en los círculos incorrectos, pero mi experiencia ha sido que las personas que no o no pueden o no codifican en el estilo moderno superan a las que podrían hacerlo por un amplio margen. Y aquellos que podrían hacer, generalmente no lo hacen, porque están superados en número. Su código se reescribe, o se ignora, hasta que comienzan a escribir cosas que otras personas puedan entender. Entonces, quizás esto sea bueno, o tal vez esto sea malo; en mi opinión, apenas es relevante, porque el resultado es el mismo: si tu experiencia resulta ser algo así como la mía, tienes muchas posibilidades de encontrar el código de hoy notablemente similar a lo que hubieras visto en 1999.

PS Nicolai Josuttis ha escrito un par de libros que parecían gustarle al experto en plantillas residentes de mi último empleador. También pruebe Modern C++ Design (Alexandrescu), probablemente un poco anticuado ahora, pero explica muchos de los principios. Herb Sutter's Exceptional C++ da, como recuerdo de una copia de trabajo, una buena visión general de algunas técnicas modernas sin volverse demasiado loco en el frente de la plantilla. Y, por supuesto, boost demuestra todo este tipo de cosas (y mucho, mucho más - luego algo de material extra) puestas en práctica en una amplia gama de compiladores.

(Esperemos que la lista anterior no es demasiado anticuado;. Como mi respuesta podría sugerir, he encontrado mucho menos de una necesidad de mantenerse al día con las últimas tendencias en C++ de lo que jamás hubiera esperado)

+3

Si los punteros inteligentes y RAII eran raros hace 10 años, ¿qué personas estaban haciendo con el idioma? en lo que a mí respecta, RAII es, y siempre ha sido, la característica principal de C++. –

+0

Bueno ... lo estaban programando como si fuera Objective C, o Java, o algo así. O como si fuera C. Pero siempre usando suficientes cosas de C++ para hacerlo definitivamente C++ en lugar de algo más! (Este estilo de codificación realmente no juega con los puntos fuertes del lenguaje, por decir lo menos, por lo que imagino que RAII, entre otras cosas, se ha generalizado). –

+1

@Neil: No podría estar más de acuerdo. RAII es lo que me hace volver a C++ una y otra vez. ¡No tocaré Java por esa sola razón! –

Cuestiones relacionadas