c++ - programming - stackoverflow surveys
Es C notablemente más rápido que C++ (4)
C ++ se utiliza a menudo para programas científicos. La popularidad de C puede estar menguando en ese dominio. Fortran sigue siendo popular como un lenguaje de "bajo nivel".
En C ++, "solo pagas por lo que usas". Por lo tanto, no hay nada que lo haga más lento que C. En particular, para los programas científicos, las plantillas de expresión permiten realizar una optimización personalizada utilizando el motor de plantilla para procesar la semántica del programa.
La razón por la que se elige C para proyectos como Python es que muchas personas lo entienden (relativamente) completamente, por lo que una base de código grande no confundirá a muchos de los grandes contribuyentes.
SQLite tiene un requisito para el tamaño de código ejecutable pequeño, donde C tiene una ligera ventaja. El uso juicioso de C ++ aún permite su uso en aplicaciones integradas, pero es menos popular debido al temor de que se introduzcan características de lenguaje no deseadas.
Por lo que entiendo, todos los lenguajes de scripting y los programas científicos centrales están escritos en C; esto hace que la implementación sea desordenada pero de una manera directa al punto.
Entiendo que a estas personas les gustaría maximizar su rendimiento, pero hay una diferencia real entre usar cadenas C y estructuras C para usar clases C ++; C ++ parece funcionar de la misma manera, aparte de las funciones virtuales, almacena una función de clase una y cada instancia de esa clase llama a esa función.
¿Qué hace que C sea más rápido y es una diferencia notable en un proyecto como python o sqlite que tiene que ser el más rápido?
Como mencionó Bjarne en [D&E], la efectividad es uno de los objetivos principales de C ++. Por lo tanto, C ++ es más lento solo cuando el programador utiliza sus funciones "adicionales" como las funciones virtuales que mencionó, información rtt, etc.
Así que creo que es más por razones psicológicas: C se usa porque no permite las características "lentas" de C ++.
Los idiomas no son inherentemente más rápidos o más lentos, los intérpretes y compiladores pueden ser más o menos eficientes.
Además de eso, los lenguajes de nivel superior proporcionan capas de abstracción que generalmente tienen un costo de tiempo de ejecución. Si no los está utilizando, el compilador podría ser lo suficientemente inteligente como para eliminarlos, pero eso no sería posible si la semántica del lenguaje no lo permite de forma segura ... Y si los necesita, implementelos por su cuenta en un nivel inferior, el lenguaje será probablemente más lento que el uso del lenguaje "lento".
No creo que la razón esté tan relacionada con el rendimiento como con la interoperabilidad. El lenguaje C ++ es más complejo que el lenguaje C, pero desde el punto de vista del rendimiento, no debería haber una diferencia notable de ninguna manera. Algunas construcciones de C ++ son más rápidas que el equivalente en C ( std::sort
es más rápida que qsort
) y probablemente hay buenos ejemplos de lo contrario.
EDITAR: En el lado de la interoperabilidad ...
Básicamente, el estándar de C ++ no define algunas de las cosas que podrían ser necesarias para facilitar la interoperabilidad entre binarios creados con diferentes compiladores / versiones. El problema más notable aquí sería la convención de nomenclatura para los símbolos en el binario. En C, el lenguaje define una sola asignación de cada símbolo en código al nombre del símbolo binario. Una función llamada my_function
creará un símbolo en el binario llamado my_function
. Por otro lado, y debido a características como la sobrecarga de funciones, los nombres de las funciones de C ++ tienen que ser modificados (traducidos a diferentes símbolos de funciones en el binario, que codifican los tipos de los argumentos y los tipos de retorno), y el estándar no define cómo Se realiza la mutilación. Eso, a su vez, significa que la misma función en C ++ se puede compilar en diferentes símbolos dependiendo del compilador (a menos que se use extern "C"
para forzar la interoperabilidad de C para esas funciones en C ++).
Al final del día, la interfaz entre el lenguaje de scripting y el código nativo debería ser una interfaz C de todos modos, incluso si los detalles de cómo se implementa internamente podrían ser C / C ++ / cualquier otro idioma nativo.
(Intencionalmente no quiero entrar en una guerra de llamas de las preferencias de lenguaje, C ++ es realmente poderoso, pero también da un poco de miedo, ya que es un lenguaje mucho más complejo que C, y algunas cosas que parecen simples pueden tener un impacto en actuación)