¿Por qué varios lenguajes de programación populares están influenciados por C? [cerrado]

23

Los 10 lenguajes de programación principales, según el índice TIOBE, parecen estar fuertemente influenciados por C:

1. Java

El lenguaje deriva gran parte de su sintaxis de C y C ++, pero tiene un modelo de objeto más simple y menos instalaciones de bajo nivel. - wikipedia.org

2. C

C es uno de los lenguajes de programación más utilizados de todos los tiempos y hay muy pocas arquitecturas de computadora para las cuales no existe un compilador de C. - wikipedia.org

3. C #

Durante el desarrollo de .NET Framework, las bibliotecas de clases se escribieron originalmente utilizando un sistema de compilación de código administrado llamado Simple Managed C (SMC). En enero de 1999, Anders Hejlsberg formó un equipo para construir un nuevo lenguaje en ese momento llamado Cool, que significaba "lenguaje orientado a objetos tipo C". - wikipedia.org

4. C ++

Fue desarrollado por Bjarne Stroustrup a partir de 1979 en Bell Labs como una mejora del lenguaje C. - wikipedia.org

5. Objetivo-C

Objective-C es un lenguaje de programación reflexivo y orientado a objetos que agrega mensajes de estilo Smalltalk al lenguaje de programación C. - wikipedia.org

6. PHP

Reescribió estos scripts como archivos binarios del lenguaje de programación C Common Gateway Interface (CGI), extendiéndolos para agregar la capacidad de trabajar con formularios web y comunicarse con bases de datos y llamó a esta implementación "Intérprete personal de página de inicio / formularios" o PHP / FI. - wikipedia.org

8. Python

Python fue concebido a fines de la década de 1980 y su implementación fue iniciada en diciembre de 1989 por Guido van Rossum en CWI en los Países Bajos como un sucesor del lenguaje de programación ABC (inspirado por SETL) capaz de manejar e interactuar con el sistema operativo Amoeba. - wikipedia.org

ABC (lenguaje de programación) Sus diseñadores afirman que los programas ABC son típicamente alrededor de una cuarta parte del tamaño de los programas equivalentes Pascal o C, y más legibles. - wikipedia.org

9. Perl

Perl toma prestadas funciones de otros lenguajes de programación, incluidos C, scripting de shell (sh), AWK y sed. - wikipedia.org

10. JavaScript

JavaScript utiliza la sintaxis influenciada por la de C. - wikipedia.org

Parece que la mayoría de ellos toman prestada su sintaxis de C y / o están fuertemente influenciados de varias otras maneras, al menos en sus inicios. ¿Por qué?

John Isaiah Carmona
fuente
15
Tener una sintaxis similar a c no es lo mismo que estar basado en c.
Oded
15
Además, TIOBE es un índice basura.
DeadMG
3
Por el contrario, ¿puedo preguntar por qué los lenguajes de programación basados ​​en C son más populares?
Manoj R
3
@YannisRizos ¡Gran rescate de la pregunta! En realidad es una gran pregunta ahora.
maple_shaft
16
Debido a que C es un descendiente de ALGOL, y ALGOL es para bloquear los laboratorios imperativos de alcance, lo que Abraham es para cristianos, judíos y musulmanes.
Ingo

Respuestas:

40

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 lo siguieron de una forma u otra no es sorprendente, por dos razones:

  • Cuando se diseña 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 poco profunda, y una sintaxis que se asemeja a un idioma 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 idiomas, y todavía existen, algunos incluso anteriores a C: existe la familia LISP (CL, Clojure y Scheme son los dialectos modernos más populares), la familia ML (con varios dialectos modernos), hay un ejército completo de Dialectos BÁSICOS (VB.NET y VBA son implementaciones modernas), hay Pascal y sus parientes (Delphi es el más conocido) y muchos idiomas 'extraños' que tomaron influencias de muchos otros idiomas e inventaron algunas cosas; Los ejemplos incluyen Go, Python, Lua, Haskell (y su predecesor, Miranda), Prolog y Erlang. Si bien ninguno de estos lenguajes (excepto Python) se encuentra entre los 10 principales, 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 lenguajes casi 100% compatibles con C 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 idiomas en esa lista no tienen mucho en común con C. La gran mayoría tiene una gestión de memoria integrada en el lenguaje y, en consecuencia, copia semántica, aprobación 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 su semántica). Otras diferencias (con la excepción de C ++ y Objective-C, que son en su mayoría compatibles con C) incluyen manejo de errores, reglas de alcance,#include), y el hecho de que muchos de estos lenguajes están "virtualizados", es decir, se ejecutan en un intérprete, un 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 thisun 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 varios núcleos se están volviendo comunes, las GPU potentes, la CPU que deja de ser el típico cuello de botella de rendimiento, las conexiones de red rápidas y confiables, etc.) requieren enfoques radicalmente diferentes para la programación en general. Cualquiera que haya escrito una aplicación distribuida multiproceso en un lenguaje imperativo puede decir que es increíblemente difícil, mientras que los lenguajes como Haskell tienen características que eliminan la mayoría de los problemas típicos y ofrecen un enfoque más abstracto y más estructurado para el procesamiento distribuido, concurrente y paralelo. (La pureza es un concepto importante en este contexto). Los lenguajes de programación más nuevos (p. Ej., C # o D) ya incluyen muchas funciones para admitir tal modismo. En todo caso,

tdammers
fuente
Buena respuesta, pero "¿CPU deja de ser el típico cuello de botella de rendimiento"? En mi experiencia, abundan los problemas de rendimiento: CPU, IO, lo que sea. Si no, los perfiladores no serían necesarios, aunque no sean muy efectivos.
Mike Dunlavey
66
@MikeDunlavey: por lo general, los cuellos de botella que encuentro son causados ​​por E / S, redes, rendimiento de caché de CPU, rendimiento de bus y comunicación (ineficiente) entre procesos. En aquellos días, la CPU era casi inevitablemente el cuello de botella; Esto ya no es verdad.
tdammers
1

Esto es muy parecido a preguntar por qué el inglés es el idioma dominante en los Estados Unidos. ¿Por qué no español o francés? Controlaron más territorio estadounidense que las colonias inglesas. ¿Por qué no holandés? La primera capital de los Estados Unidos estaba en una antigua colonia holandesa. No estoy seguro de que pueda haber una "respuesta" a esto.

Sin embargo, la línea de tiempo "Historial de idiomas de computadora" ( http://www.levenez.com/lang/ ) proporciona toda la respuesta que posiblemente pueda haber.

S.Lott
fuente
66
Debido a que Gran Bretaña desde 1600-1880 fue aproximadamente la principal potencia industrial y financiera del mundo, seguida por los Estados Unidos desde 1880 hasta el presente (<- discutible). Se convirtió en el idioma de los negocios internacionales y es hablado con fluidez por más de 2 mil millones de personas en todo el mundo. Eso y nadie quiere hablar español u holandés :)
maple_shaft
66
@maple_shaft - "nadie quiere hablar español" ?! ... ¿sabes en cuántos países se habla? en.wikipedia.org/wiki/Spanish_language
Rook
12
@ S.Lott: ¿Te refieres a la parte donde el Imperio Británico fue el imperio más grande que existió y ocupó el 25% de la superficie del mundo entero? ¿Ese tipo de "no poderoso"?
DeadMG
3
@DeadMG: No estoy hablando del mundo. Estoy hablando de los Estados Unidos en la década de 1700, donde los franceses tenían a los británicos encerrados en una pequeña área a lo largo de la costa. Estoy hablando de que los británicos pierden compromisos militares solo en este teatro. Los franceses controlaban claramente la mayor parte de lo que se convirtió en Estados Unidos. Todavía. Estados Unidos terminó hablando inglés. No francés El mismo análisis se aplica a C. Es una historia compleja con muchos factores influyentes. No hay una respuesta trivial y pat.
S.Lott
44
@ S.Lott Los franceses no ganaron todos los encuentros. Solo mirando a Norteamérica ganaron la mayoría; pero perder 4 de las 5 batallas principales en NA durante 1559/60 resultó en una aplastante derrota en el teatro. Las capturas de los fuertes Ticonderoga y Niagara, Las llanuras de Abraham y la batalla de Restigouche fueron todas victorias británicas. Al cortar el suministro / refuerzo, este último hizo que la victoria francesa en Sainte-Foy fuera irrelevante.
Dan Neely
0

Si crea un nuevo lenguaje de programación, tener una sintaxis similar a los lenguajes existentes populares hace que el aprendizaje sea más fácil para sus nuevos usuarios. Especialmente si muchos conceptos son similares entre idiomas.

También creo que la sintaxis de estilo C es relativamente fácil de leer. Para comparar con Pascal, usar los símbolos "{" y "}" para bloques de código es más legible que "comenzar" y "terminar", 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 cada uno 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 hicieron algunos buenos decisiones

Viliam Búr
fuente
-1

Los lenguajes de programación evolucionan con el tiempo al igual que los lenguajes naturales, con algunos lenguajes antiguos que 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 y cuenta con el respaldo de los círculos de Unix y Microsoft. También es la supervivencia del problema más apto: es fácil ver que la sintaxis concisa tipo C tenía más atractivo que la sintaxis detallada derivada de Algol de Pascal y otros competidores de C en los años setenta y ochenta. Por lo tanto, fue ampliamente adoptado por los idiomas que le siguieron.

Con el crecimiento actual de 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 preguntas.

Una buena vista de la línea de tiempo de la historia del lenguaje para reflexionar sobre

scrwtp
fuente
Lo entendiste mal. Tanto PASCAL como C son descendientes de ALGOL.
Ingo
Es cierto, pero Algol es descendiente de Fortran y eligió algunas de las construcciones a las que me refería allí (programa, final, subrutina en comparación con los corchetes de c). Aún así, lo que tenía en mente era, de hecho, una sintaxis tipo Algol. Editado
scrwtp
la sintaxis similar a C tenía más atractivo que la sintaxis detallada derivada de Algol de Pascal y otros competidores de C en los años 70 y 80 +1 para eso. comienzan los programadores también son seres humanos terminan comienzan los que creen que es conveniente para trazar signos de puntuación de palabras como begin-end perdió su batalla para llaves fin de la historia
mosquito
No veo evidencia de que la sintaxis de C sea menos oscura, excepto en el sentido de que la mayoría de los desarrolladores conocen C o algún tipo de lenguaje relacionado con C, por lo que parece más familiar. AFAICT, C se ganó a Pascal debido a su estructura y al hecho de que las implementaciones no tenían que rodar su propio enlace, no la sintaxis.
David Thornley
@ David: por lo que recuerdo, una de las razones por las que C ganó a otros lenguajes fue por la relativa facilidad de acceso a la memoria en C (es decir, punteros). Sé que ahora se encuentran con problemas, pero cuando 1 KB de RAM tenía mucha memoria, esa era una característica muy poderosa del lenguaje. Sé que otros idiomas proporcionaron características similares a punteros, pero ninguno tan fácilmente como C.
Dunk
-3

La mayoría de los lenguajes que enumera no tienen prácticamente nada que ver con C, aparte de similitudes sintácticas irrelevantes. Los únicos dos derivados reales de C son Objective-C y C ++.

DeadMG
fuente
Si no consideramos la sintaxis, entonces las únicas diferencias entre los idiomas son la disponibilidad de construcciones de lenguaje general (bucles, condicionales, variables, abstracciones de estas clases y cierres, etc.) y que todas ellas equivalen al comportamiento de la máquina. código. Todos los idiomas de bajo nivel son similares entre sí y todos los idiomas de alto nivel son extremadamente similares entre sí en ese punto.
maple_shaft
2
No debe pensar en un lenguaje como qué funcionalidad tiene, sino cómo comunica el comportamiento de la aplicación. Su código fuente es su nivel más bajo de documentación y uno escribe el código fuente para las personas y NO para las máquinas . Si escribiéramos código estrictamente para máquinas, entonces todos estaríamos codificando en ensamblador.
maple_shaft
1
@maple_shaft: ¡Muy bien! En una entrevista me pidieron que explicara la diferencia entre el lenguaje de máquina (ensamblador) y el lenguaje de programación. Mi respuesta fue: "El lenguaje de máquina es para máquinas, el lenguaje de programación es para programadores".
Treb
1
@maple_shaft: la sintaxis es irrelevante en cuanto a su comunicación con las personas . Si reemplazara una palabra en inglés con una ortografía diferente, el inglés seguiría siendo el mismo idioma. La forma sintáctica es irrelevante, lo comunicativo es la semántica del lenguaje.
DeadMG
3
@DeadMG: Pero la pregunta es sobre la sintaxis. Puede considerar que las similitudes sintácticas son irrelevantes, pero la persona que hace la pregunta quiere saber por qué existen estas similitudes irrelevantes .
Nicol Bolas