Con el surgimiento de UNIX en la década de 1970, su lenguaje de programación de sistemas estándar C se convirtió rápidamente en la lengua franca del mundo de la programación. Durante bastante tiempo, C fue prácticamente obligatorio para todos los programadores. Como tal, el hecho de que C haya influido en casi todos los lenguajes de programación que le siguieron de una forma u otra no es sorprendente, por dos razones:
- Al diseñar un nuevo lenguaje, tiene sentido basar su sintaxis, cuando sea posible, en un lenguaje popular existente que se pueda asumir como conocimiento común.
- Es más probable que un nuevo idioma tenga éxito si la curva de aprendizaje es superficial y una sintaxis que se asemeja a un lenguaje ya conocido es generalmente más fácil de aprender (a menos que se comporte radicalmente diferente a pesar de las aparentes similitudes). Por lo tanto, los lenguajes que toman prestada la sintaxis de C generalmente ganan tracción más rápidamente que los que no lo hacen.
Pero existían otros lenguajes, y todavía lo hacen, algunos de ellos incluso son anteriores a C – hay la familia LISP (CL, Clojure y Scheme son los dialectos modernos más populares), la familia ML (con varios dialectos modernos), hay todo un ejército de dialectos BÁSICOS (VB.NET y VBA son implementaciones modernas), Pascal y sus parientes (siendo Delphi el más conocido) y muchos lenguajes «excéntricos» que tomaron influencias de muchos otros lenguajes e inventaron algunas cosas ellos mismos; los ejemplos incluyen Go, Python, Lua, Haskell (y su predecesor, Miranda), Prolog y Erlang. Si bien ninguno de estos lenguajes (excepto Python) está en su top 10, muchos de ellos tienen una base de usuarios estable y una comunidad activa; ciertamente no van a desaparecer.
Además, debe tenerse en cuenta que la cantidad de influencia de C en estos lenguajes difiere enormemente, desde los casi 100% compatibles con C lenguajes C ++ y Objective-C, hasta Python (que abandona deliberadamente muchas de las características de sintaxis de C). Y esa es solo la sintaxis: en términos de semántica, la mayoría de los lenguajes de esa lista no tienen mucho en común con C. La inmensa mayoría tiene la gestión de memoria incorporada en el lenguaje y, en consecuencia, copia la semántica, el paso de argumentos, etc., son muy diferentes. JavaScript, por ejemplo, tiene fuertes influencias semánticas de Scheme, mientras que su sintaxis fue diseñada para parecerse a Java (que, a su vez, basa su sintaxis de bits y piezas en C, pero no en su semántica). Otras diferencias (con la excepción de C ++ y Objective-C, que son en su mayoría compatibles con versiones anteriores de C) incluyen el manejo de errores, reglas de alcance, bibliotecas estándar, inclusión de código externo (#include
), y el hecho de que muchos de estos lenguajes están «virtualizados», es decir, se ejecutan en un intérprete, compilador JIT o una máquina virtual.
Python, por cierto, tiene cierta influencia de C, pero ciertamente no está «basado en» C. Tanto la sintaxis como la semántica difieren radicalmente de C, y esto es por diseño. Python solo toma prestadas características de C donde otras alternativas son igualmente «buenas» (según el «Zen de Python»: escriba import this
en un intérprete de Python).
En cuanto al futuro de la programación; las predicciones varían. La influencia de C no va a desaparecer, pero los desarrollos recientes en hardware (las máquinas de múltiples núcleos se vuelven comunes, las GPU potentes, la CPU deja de ser el cuello de botella de rendimiento típico, las conexiones de red rápidas y confiables, etc.) requieren enfoques radicalmente diferentes a la programación en general.Cualquiera que haya escrito una aplicación distribuida multiproceso en un lenguaje imperativo puede darse cuenta de que es increíblemente difícil, mientras que lenguajes como Haskell tienen características que eliminan la mayoría de los problemas típicos y ofrecen un enfoque más abstracto y estructurado para distribuidos, concurrentes y procesamiento paralelo (la pureza es un concepto importante en este contexto) .Los lenguajes de programación más nuevos (por ejemplo, C # o D) ya incluyen muchas características para admitir tal idioma. En cualquier caso, ni el fuerte impacto que C ha tenido en la programación, ni la existencia de Los lenguajes no similares a C están desapareciendo.
Comentarios
Si crea un nuevo lenguaje de programación, tener una sintaxis similar a los lenguajes populares existentes facilita el aprendizaje de sus nuevos usuarios. Especialmente si muchos conceptos son similares entre lenguajes.
También creo que la sintaxis de estilo C es relativamente fácil de leer. Para comparar con Pascal, el uso de símbolos «{» y «}» para bloques de código es más legible que «begin» y «end», que son ópticamente muy similares a los identificadores. Python es aún más legible, pero incluir espacios en blanco en la sintaxis abre un nuevo conjunto de problemas con la edición. Otro ejemplo: Lisp y JavaScript comparten algunas ideas, pero cuando lo mismo está escrito en sintaxis de estilo C, es menos oscuro.
Estoy seguro de que muchas personas no estarían de acuerdo con el segundo párrafo, porque todos tiene su propio lenguaje favorito, pero creo que la popularidad de la sintaxis de estilo C es en parte una coincidencia histórica, pero en parte también muestra que los autores de C tomaron algunas buenas decisiones.
Los lenguajes de programación evolucionan con el tiempo al igual que los lenguajes naturales, y algunos lenguajes más antiguos influyen en esa evolución de una manera más fuerte que otros , mientras que otros se desvanecen en la oscuridad y su influencia es más difícil de rastrear en el nivel superficial, es decir, la sintaxis.
La influencia de C proviene de muchas fuentes: es de bajo nivel, generalizada, tiene respaldo en círculos de Unix y Microsoft. También es la supervivencia del problema más apto: es fácil ver que la sintaxis concisa similar a C tenía más atractivo que la sintaxis detallada derivada de Algol de Pascal y otros competidores de C en las décadas de 1970 y 1980. Por lo tanto, fue ampliamente adoptado por los lenguajes que lo siguieron.
Con el crecimiento actual de la importancia de la programación multiproceso y los lenguajes funcionales que se adaptan particularmente bien a él, diría que veremos crecer su influencia en el futuro. Caso en cuestión: Python, que incluso hizo esa lista en la publicación de la pregunta.
Una bonita vista cronológica del historial del lenguaje para reflexionar
Comentarios