¿Por qué no aparece un lenguaje más rápido y "mejor" que C? [cerrado]

144

Con todos los nuevos lenguajes "modernos" disponibles hoy, ¿cómo es posible que C aún sea anunciado como el más rápido y "más cercano a la máquina"? Realmente no creo que haya una sola manera correcta de hacer las cosas, y C ha existido por mucho tiempo (¡desde los años 60!). ¿Realmente no hemos encontrado nada mejor que algo escrito hace casi 50 años?

Soy consciente de que los lenguajes modernos son de nivel superior y se ocupan de ciertas tareas como la recolección de basura y la asignación de memoria, y utilizan bibliotecas y demás. Solo pregunto por qué nunca ha habido una segunda opción verdadera para C.

¿Puede ser que C sea tan perfecto que ninguna otra forma de operar una computadora podría ser posible (aparte de la adopción del desarrollador)?

EDITAR Mira, no estoy tratando de golpear C o cualquiera que sea tu idioma favorito. Me pregunto por qué C se ha convertido en el estándar y por qué nunca surgieron otras alternativas y C simplemente fue "aceptado".

    
pregunta Jason 08.12.2009 - 07:14
fuente

6 respuestas

162

C es un lenguaje muy simple, y debido a esto, junto con su longevidad, es rápido y optimizado. También cuenta con un soporte extraordinario, en lo que respecta a entornos integrados, microprocesadores, etc.

Es difícil superar un lenguaje realmente simple y rápido. Lo único que se puede mejorar en un lenguaje como ese es la facilidad de uso: reduce el tiempo necesario para crear un código genérico similar y facilita el modelado con abstracciones.

Aquí es donde entra C ++. C ++ puede ser tan rápido como C. El problema es que C ++ es un lenguaje mucho más complejo, lo que significa que definitivamente aumenta la productividad; siempre y cuando la gente sepa cómo usarlo. C ++ y C son no casi el mismo idioma.

Ahora, D fue otro paso adelante. La misma capacidad para código rápido, recolección de basura opcional, etc., pero nunca se puso de manifiesto. Esperemos que eso cambie, porque elimina lo que plaga C ++: compatibilidad hacia atrás con C.

Entonces, para responder a tu pregunta, "mejor" es algo difícil de juzgar. En términos de simplicidad y velocidad, C es probablemente lo mejor que podemos hacer. En términos de productividad versus simplicidad, C ++ es probablemente lo mejor que podríamos hacer, aunque esa opinión varía mucho más. Por último, en términos de un lenguaje completo y limpio, con la velocidad y simplicidad de C, D gana este contexto.

    
respondido por el GManNickG 08.12.2009 - 07:21
fuente
63

Hay más rápidos que los lenguajes C.

Hay idiomas más rápidos que C. Por ejemplo, Fortran, como ya se mencionó, está funcionando muy bien porque tiene reglas de lenguaje de aliasing mucho más restringidas.

También hay ensamblajes experimentales como los idiomas que atacan a C en la parte frontal, donde se utiliza como lenguaje de miembro de alto nivel, por ejemplo, la creación de compiladores. ¿Alguna vez escuchaste hablar de C ... o de Janus? Pero esos dos fueron asesinados por el proyecto LLVM.

Apostaría a que APL u otros lenguajes matemáticos eliminarán a C fuera del agua en sus dominios de aplicación especiales, ya que se han incorporado en el soporte para unidades de procesamiento de vectores. Esto es algo que no es posible para C (y chicos: NO! Las bibliotecas optimizadas especiales con enlace C no tienen nada que ver con C como lenguaje).

También los productores de CPU eliminaron todo lo que ayudaba a los escritores de compiladores en otros idiomas. ¿Recuerda los códigos de ensambladores aritméticos etiquetados para hacer que la implementación de LISP en SPARC sea rápida? Lo que el viento se llevó.

Y si se pasa de los micro puntos de referencia al desarrollo de aplicaciones, existen lenguajes más rápidos para el desarrollo de aplicaciones. Mi ejemplo personal aquí es siempre SmartEiffel. Apunta a C, pero utiliza la optimización global del sistema, lo que la hace más rápida que C en el desarrollo de aplicaciones en el mundo real.

En este dominio, incluso un simple error o abstracciones de bajo nivel pueden matar todo el rendimiento del lenguaje. Debido a que C no ofrece altas abstracciones, la mayoría de la gente dice que es un problema de programación, pero no lo es. Por ejemplo, mira la falta de genéricos. En C, terminará con implementaciones lentas como la función de biblioteca "qsort", que se puede escribir una magnitud más rápida con genéricos (donde se elimina la llamada a la función para las comparaciones de claves).

Simplemente compare una llamada qsort en una matriz de entradas de megabytes con una buena implementación escrita a mano que usa el acceso a la matriz y el componente '<' operador.

    
respondido por el Lothar 08.12.2009 - 08:50
fuente
35

Buena pregunta. Creo que los idiomas tienen éxito al encontrar un nicho. Es importante tener en cuenta que hay muchos idiomas nuevos que son mejores que C en sus nichos.

  • C una vez se usó ampliamente como lenguaje de aplicación, y en ese dominio ha ido perdiendo terreno en C ++, Java y recientemente en todo tipo de otros lenguajes (especialmente los lenguajes dinámicos).

  • C solía ser un idioma para escribir el código del servidor. La Web introdujo una sorprendente variedad de idiomas en ese espacio (Perl, Java, Python, VBScript, VB.NET, Ruby, C #) y los casos en que C tiene algún tipo de sentido para el código del servidor son ahora pocos y distantes entre sí.

  • C se ha utilizado para computación científica, pero se enfrenta a la competencia de lenguajes específicos de dominio como Matlab y Mathematica, así como a bibliotecas como Ciencia ficción . Muchas personas que escriben código en este nicho no son codificadores de oficio y C no es una buena opción para ellos.

Pero el nicho de C es el código del sistema. Sistema operativo de los núcleos. Conductores Bibliotecas en tiempo de ejecución. Está tan establecido en ese espacio que incluso C ++ lo está desplazando lentamente.

C volvió a ganar en la década de 1970 debido a UNIX, porque los idiomas de la competencia eran demasiado restrictivos o demasiado lentos, y porque el código C se consideraba razonablemente portátil (incluso en ese caso). Pero sus mayores ventajas hoy en día no están relacionadas, y se derivan principalmente de décadas de dominio de su nicho. Existen buenas herramientas para C: optimizar compiladores, depuradores de kernel, análisis estático efectivo para encontrar errores en el código del controlador, etc. Casi todas las plataformas principales definen un ABI de C, y a menudo es la lengua franca para las bibliotecas. Hay un grupo de programadores que saben cómo codificar C y quiénes saben cuáles son los problemas y las trampas de C.

A largo plazo, este nicho no desaparecerá; y C tiene algunos problemas. Pero aún así sería extremadamente difícil para cualquier principiante competir.

    
respondido por el Jason Orendorff 08.12.2009 - 09:13
fuente
24

Parafraseando un muy buen comentario: No hay muchas maneras diferentes de hacer que un lenguaje sea rápido y "cercano a la máquina" - C lo hizo bien, y casi no hay espacio para mejorar eso .

Respuesta original:

¿Rápido de ejecutar o rápido de escribir cosas?

Los idiomas no son rápidos ni lentos para ejecutar, las implementaciones específicas sí lo son. Un languge solo puede considerarse más rápido que otros cuando de alguna manera hace que sea más fácil tener implementaciones rápidas . Invariablemente, eso significa "cerca de la máquina". Pero con las máquinas cada vez más rápidas exponencialmente, esto se ha vuelto cada vez menos interesante con el tiempo. En cambio, la facilidad y la velocidad de desarrollo y la portabilidad se han vuelto mucho más importantes, por lo que "mejor" se ha convertido en "fuera de la máquina" . Casi todos los esfuerzos en diseño de lenguajes han ido en esa dirección durante las últimas 5 décadas.

Así que ahí estás: más cerca de la máquina y más idiomas que C existen; son los que vinieron antes de C : ensamblador, Fortran. Probablemente algunos olvidados.

    
respondido por el Michael Borgwardt 08.12.2009 - 08:15
fuente
21

Fortran es más rápido que C para tareas numéricas debido a la forma en que maneja las referencias de memoria (los punteros C son más difíciles de optimizar). Las bibliotecas numéricas de peso pesado en la base de cosas como Matlab y Numpy todavía están escritas en Fortran.

Por otro lado, C ++ puede ser tan rápido como C, pero tiene muchas más funciones de programación avanzadas. Es un lenguaje mucho más nuevo, desde mediados de los 80 s.

    
respondido por el zaharpopov 08.12.2009 - 07:17
fuente
16

Qué diablos, voy a participar con mi $ 0.02.

En muchos casos, existe una diferencia real o percibida entre los idiomas de "sistemas" y los idiomas de nivel superior. Ignoraré la mayoría de los lenguajes de "nivel superior", ya que nadie (al menos no muchos) argumentará que para muchas tareas, los lenguajes como Python, Ruby, etc. son más sencillos de trabajar.

C fue diseñado para ser un lenguaje de sistemas, lo que significa que fue diseñado como el lenguaje en el que se escribió el sistema operativo Unix. Como tal, fue diseñado para ser simple, poderoso y rápido. Un lenguaje simple gana poder por medios que los programadores que no son de sistemas a menudo consideran peligrosos: punteros, gestión manual de memoria, etc. Como ya se ha mencionado, C es bastante simple. K & R es el libro más pequeño en mi plataforma de programación por mucho (sin contar las Referencias de bolsillo de O'Reilly) y solo es ligeramente más "grande" que mi Referencia de bolsillo de Ruby. C es bastante potente. Si necesita hablar con el hardware, verifique manualmente y juegue con la memoria, etc. C tiene la capacidad.

Sin embargo, desde la perspectiva de un programador, C no es tan simple. La velocidad y la potencia están al precio de la administración de memoria manual y no hay mucho soporte de POO integrado en el idioma. C ++ (no es mi lenguaje favorito) es mucho más simple desde la perspectiva de un programador, pero mucho menos simple desde la perspectiva de un compilador. Objective-C (posiblemente mi idioma favorito) tiene el mismo compromiso, con una ligera inclinación en la dirección de mantener el lenguaje simple (la recolección de basura es un recién llegado a Objective-C, por ejemplo). Pero como el mundo informático, como muchos de nosotros sabemos, estaba escrito en C, es difícil que los lenguajes más nuevos, más complicados pero "más fáciles" obtengan una adopción generalizada.

En algunos casos, especialmente cuando el "estándar" actual es tan "suficientemente bueno" como C es, simplemente no hay muchos incentivos para que algo "mejor" (C ++, Objective-C, D, etc.) gane tracción , cuando hay incluso incentivos suficientes para crear algo "mejor".

    
respondido por el alesplin 08.12.2009 - 10:29
fuente

Lea otras preguntas en las etiquetas