La razón principal para usar C++ sobre un lenguaje administrado en estos días es obtener los beneficios que C++ trae a la mesa. Uno de los pilares de C++ es "no pagas por lo que no necesitas". Sin embargo, se puede argumentar que a veces no se quiere pagar por la compatibilidad con versiones anteriores de C. Muchas de las extrañas peculiaridades de C++ se pueden atribuir a esta compatibilidad con versiones anteriores. ¿Qué otros idiomas hay donde "no pagas por lo que no necesitas", incluida la compatibilidad con C?¿Hay un lenguaje de estilo C++ sin adornos de C?
Edición/aclaración: El verdadero asesino para mí está en esa segunda oración. ¿Hay un lenguaje verdaderamente diseñado desde cero que no impone cosas que no quieres en tu código? C++ tiene eso como filosofía de diseño: ¿no quieres RTTI? No existe. ¿No quieres recolección de basura? No está ahí. El problema con C++ es que (IMO) viola este requisito cuando se niega a romper con el pasado. No quiero que el fragmento de compatibilidad con versiones anteriores con el código de 20 años impida mi avance. C++ no está dispuesto a hacer eso. ¿Qué es/tiene?
Edit2: Supongo que debería haber sido más claro acerca de lo que es un costo. Hay múltiples costos potenciales. El que inicialmente me estaba enfocando era el costo del tiempo de ejecución.
En C++, el polimorfismo a través de métodos virtuales tiene un costo. Pero no todos los métodos pagan ese costo. Se llama a un método C++ no virtual con el mismo costo de tiempo de ejecución que una función simple C antigua (que tiene al menos un parámetro). C++ no requiere que uses polimorfismo. En otros lenguajes de OOP, todos los métodos son virtuales, por lo que no se puede evitar el costo del polimorfismo.
Los costos de tiempo de ejecución son más importantes pero otros costos mitigan eso. El lenguaje ensamblador tendría la menor sobrecarga de tiempo de ejecución, obviamente, pero los costos de escritura y mantenimiento del lenguaje ensamblador son un gran golpe en su contra.
Con esto en mente, la idea es encontrar idiomas que proporcionen abstracciones útiles que, cuando no se usan, no afectan los costos de tiempo de ejecución.
¿Qué significa "estilo C++" significa? – Nosredna
Excelente pregunta. Aunque no creo que realmente pueda decir que la compatibilidad C tiene un/tiempo de ejecución/costo, a veces resulta en opciones de diseño incómodas. –
Nosredna: Está en la segunda oración: solo paga por lo que necesita. Sin memoria administrada. No hay tipos incorporados que no se asocien a tipos de máquinas. – jmucchiello