¿Con qué rapidez las personas adoptan los estándares más nuevos de C ++ en el trabajo profesional?

Para proyectos pequeños, C ++ 11 se introdujo gradualmente poco después de que el soporte del compilador confiable estuviera disponible para al menos nuevas funciones básicas (alrededor de 2012). Como puede imaginar, la infraestructura de compilación / linting de toda la empresa y las guías de estilo de codificación tuvieron que actualizarse, pero lleva tiempo evaluar el impacto de algunas características en bases de código grandes y su compatibilidad con prácticas y pautas anteriores. Por ejemplo, muchas compañías compensaron la falta de tablas hash en C ++ 03 introduciendo tablas hash estándar para toda la compañía. Ahora que C ++ 11 tiene unordered_set y unordered_map, estas nuevas plantillas pueden introducir inconsistencias con las tablas hash antiguas. Sin embargo, para nuevos proyectos, son geniales.

Las listas de inicializadores, la palabra clave automática , los bucles de rango, constexpr y las mejoras menores de sintaxis (como el análisis correcto del vector <vector >) parecen victorias tan claras en C ++ 11, que su adopción ha sido rápida. Las características más complicadas como lambdas, valores y soporte para programación paralela requieren un esfuerzo mucho mayor para comprender y usar correctamente. Tampoco ayudó que el soporte para programación paralela tuviera algunos inconvenientes en g ++ (no estoy seguro acerca de otros compiladores). Y la biblioteca de expresiones regulares no fue realmente compatible con g ++ / stdlibc ++ por un tiempo. Además de la calidad del soporte del compilador, desea verificar qué tan bien se optimiza el código nuevo, aunque la optimización generalmente mejora con el tiempo.

En Michigan, enseñé algoritmos y estructuras de datos con C ++ 11 en AY 2012-13, y me sorprendió lo entusiasmados que estaban los estudiantes con respecto a C ++ 11 (hasta el punto en que tuve que disuadirlos de utilizar unororde_mapa donde no era necesario). ) Supongo que la lógica es que C ++ 11 simplifica la programación y brinda una ventaja competitiva en el mercado laboral.

Tan pronto como mi empleador lo permita. 😛

(Lo que, en la práctica, puede llevar muchos años. Por ejemplo, Google todavía no permite referencias de valor y no estoy seguro de si lo harán pronto).

En mis proyectos personales, tan pronto como sea práctico. Por “práctico” quiero decir que las nuevas características tienen que tener un amplio soporte. De hecho, muchas características de C ++ 11 eran, para mí, muy esperadas.

¿Es eso una pregunta con trampa? bool estaba en el primer estándar de C ++. (en cuanto a C, comencé a usar bool una vez que me uní a una compañía donde C99 estaba en uso, no estoy seguro de cuándo cambiaron)

La respuesta de propósito general sería “tan pronto como sea práctico”. Es decir, cuando cada proveedor que utilizamos implementa la función lo suficientemente bien como para eliminar el equivalente interno y liberar a las personas que lo respaldan. En un lugar, pudimos recoger algunas soluciones basadas en valores de referencia en 2010.

Nos esforzamos por utilizar los últimos compiladores de lanzamiento, que en nuestra empresa es GCC. Descubrimos que los desarrolladores serios están ansiosos por adoptar el nuevo estándar, principalmente porque ya se han enfrentado a las limitaciones del antiguo estándar, o ya están usando las bibliotecas en la forma de impulso.
Existen muy pocas razones técnicas para no adoptar una característica: por ejemplo, GCC 4.8.1 tiene constexpr pero Visual Studio 2013 no. O, en algunos casos, los formularios anteriores se han optimizado, pero las funciones más nuevas aún no tienen optimización (el rango tenía algunos de estos problemas hace algunas versiones).
La mayoría de las razones para no actualizar son para programadores “senior” con la esperanza de que el mundo no cambie. Es frecuente que los estándares de codificación se escriban para resolver problemas de hace quince años.
Hay dos tipos de programadores senior: uno que ha pasado veinte años estudiando el mantenimiento de la tecnología y tiene el equivalente de múltiples doctorados; o programan como si fuera 1994.