Advertencia: esto no es tanto una respuesta como una crítica de la charla que "usuario desconocido" vincula en su respuesta.
Su primer punto principal es el (supuestamente) "estándar siempre cambiante". En realidad, todos los ejemplos que da se relacionan con cambios en C ++ antes de que hubiera un estándar. Desde 1998 (cuando se finalizó el primer estándar de C ++) los cambios en el lenguaje han sido bastante mínimos; de hecho, muchos argumentan que el verdadero problema es que deberían haberse realizado más cambios. Estoy razonablemente seguro de que todo el código que se ajustaba al estándar original de C ++ todavía se ajusta al estándar actual. Aunque es algo menos seguro, a menos que algo cambie rápidamente (y de manera bastante inesperada), lo mismo será bastante cierto con el próximo estándar C ++ también (en teoría, todo el código que usóexport
se romperá, pero prácticamente no existe ninguno; desde un punto de vista práctico no es un problema). Puedo pensar en algunos otros idiomas, sistemas operativos (o mucho más relacionados con la computadora) que puedan hacer tal afirmación.
Luego entra en "estilos siempre cambiantes". Una vez más, la mayoría de sus puntos están bastante cerca de tonterías. Intenta caracterizarlo for (int i=0; i<n;i++)
como "viejo y reventado" y for (int i(0); i!=n;++i)
"nuevo calor". La realidad es que si bien existen tipos para los que dichos cambios podrían tener sentido, int
ya que no hay diferencia, e incluso cuando se puede obtener algo, rara vez es necesario escribir un código correcto o correcto. Incluso en el mejor de los casos, está haciendo una montaña de un topo.
Su próximo reclamo es que C ++ está "optimizando en la dirección equivocada", específicamente, aunque admite que usar buenas bibliotecas es fácil, afirma que C ++ "hace que escribir buenas bibliotecas sea casi imposible". Aquí, creo que es uno de sus errores más fundamentales. En realidad, escribir buenas bibliotecas para casi cualquier idioma es extremadamente difícil. Como mínimo, escribir una buena biblioteca requiere comprender algunos dominios problemáticos tan bien que su código funciona para una multitud de posibles aplicaciones en (o relacionadas con) ese dominio. La mayor parte de lo que C ++ realmente hace es "elevar el listón": después de ver cuán mejor puede ser una biblioteca , las personas rara vez están dispuestas a volver a escribir el tipo de basura que tendrían de lo contrario.los codificadores realmente buenos escriben bastantes bibliotecas, que luego pueden ser utilizadas (fácilmente, como él admite) por "el resto de nosotros". Este es realmente un caso donde "eso no es un error, es una característica".
No trataré de llegar a cada punto en orden (eso tomaría páginas), pero saltaré directamente a su punto de cierre. Cita a Bjarne diciendo: "la optimización de todo el programa se puede utilizar para eliminar tablas de funciones virtuales y datos RTTI no utilizados. Tal análisis es particularmente adecuado para programas relativamente pequeños que no usan enlaces dinámicos".
Él critica esto haciendo una afirmación sin respaldo de que "Este es un problema realmente difícil", incluso yendo tan lejos como comparándolo con el problema de detención. En realidad, no es nada de eso, de hecho, el enlazador incluido con Zortech C ++ (más o menos el primero compilador de C ++ para MS-DOS, en la década de 1980) hizo esto. Es cierto que es difícil estar seguro de que se hayan eliminado todos los datos posiblemente extraños, pero sigue siendo razonable hacer un trabajo bastante justo.
Sin embargo, independientemente de eso, el punto mucho más importante es que esto es completamente irrelevante para la mayoría de los programadores en cualquier caso. Como aquellos de nosotros que hemos desarmado bastante código sabemos, a menos que escriba lenguaje ensamblador sin ninguna biblioteca, sus ejecutables casi seguramente contienen una buena cantidad de "cosas" (código y datos, en casos típicos) que usted probablemente ni siquiera sé sobre eso, sin mencionar el uso real. Para la mayoría de las personas, la mayoría de las veces, simplemente no importa: a menos que esté desarrollando para los sistemas integrados más pequeños, ese consumo de almacenamiento adicional es simplemente irrelevante.
Al final, es cierto que esta diatriba tiene un poco más de sustancia que la idiotez de Linus, pero eso le da exactamente la condena con elogios que merece.
virtual
funciones, ¿verdad?