¿Por qué C sigue en la categoría de lenguaje de alto nivel? [cerrado]

12

Muchos de los libros de texto sobre el lenguaje de programación C dicen que C es un lenguaje de programación de alto nivel, pero muchos de los tutores en línea dicen que C también es un lenguaje de programación de nivel medio. ¿Por qué es así?

CodeIt
fuente
3
lectura recomendada: Discuta esto $ {blog}
mosquito
66
Siento empatía con tu confusión. Este es el tipo de clasificación que me agravaría ver en un examen porque incluso una respuesta "incorrecta" es correcta. Ore para que nunca tenga esto como una pregunta de examen verdadero / falso o de opción múltiple. Si lo hace, responda con base en lo que dice el libro de texto, no en lo que usted siente que es correcto (me siento mal recomendando ir en contra de su instinto).
Brandon
1
Históricamente, los 'lenguajes de alto nivel' eran aquellos que, a diferencia del lenguaje ensamblador, permitían al programador abstraer de la máquina específica y escribir código de una manera más problemática. Fortran y Cobol eran de "alto nivel" debido a eso en los primeros días. C no es más que un velo delgado sobre las cosas específicas de la máquina, pero su propósito es ser portátil, no específico de la máquina. Entonces, para la década de 1960, el estándar C era de alto nivel. En comparación con C ++ 14 o Haskell u OCaml o Rust, C es un nivel no tan alto, por supuesto.
9000
La mayoría de estos "lenguajes" "modernos de alto nivel" son realmente solo lenguajes de script. La diferencia es si se compila o se interpreta.
MarcusJ
Asm es de alto nivel. La abstracción proporcionada por asm sobre hardware es enorme.
curioso

Respuestas:

34

Históricamente, todo lo que se resume sobre el código de ensamblaje se llamaba de alto nivel. C ciertamente hace eso. Esta definición también es relativamente clara, en contraste con lo que sigue.

Con el tiempo, creamos más y más lenguajes de programación e inventamos más y más abstracciones y herramientas. Comparado con, por ejemplo, Python, el lenguaje C es positivamente primitivo en riqueza semántica y nivel de abstracción sobre el hardware. Con eso en mente, a muchas personas les resulta engañoso llamar a C de alto nivel, cuando hay una gran cantidad de lenguajes que están muy por encima del hardware.

Así que ahora "alto nivel" generalmente significa "resúmenes mucho sobre hardware" y "bajo nivel" significa "resúmenes poco". Esta es la definición que usan sus tutores. Sin embargo, no todos están de acuerdo, y los textos antiguos no adoptan mágicamente la nueva terminología, por lo que aún se ve el antiguo uso de "alto nivel" (bajo el cual C es de alto nivel) flotando. Tenga en cuenta que muchos buenos libros de C son básicamente ediciones más nuevas de libros lanzados hace veinte años.


fuente
Para que algo se considere un lenguaje de programación adecuado de bajo nivel, se debe permitir que un programador opere fácilmente al mismo nivel de abstracción que el hardware subyacente. Si bien el Estándar C permitiría que las implementaciones se comporten de tal manera, no existe una distinción formalmente reconocida entre las implementaciones que operan en ese nivel de abstracción frente a aquellas que no lo hacen.
supercat
12

Es un lenguaje de nivel más alto que el código de máquina (ensamblado), que es el punto de vista del que provienen los libros y tutoriales de programación en C.

En ese sentido, es un lenguaje de programación de alto nivel.

Sin embargo, todavía está muy cerca del hardware, mucho más que otros lenguajes más modernos (Java, C # y similares), cuando se ve desde este punto de vista, es un lenguaje de programación de nivel medio.

Oded
fuente
1
Entonces, ¿por qué no podemos decir claramente que C es un lenguaje de programación de nivel medio? En los libros de texto no encontramos eso.
CodeIt
55
@manutd - esa es una pregunta para los autores de libros;) - pero esa es la cuestión. Desde su punto de vista, C es un lenguaje de alto nivel. De eso tratan. El concepto de "lenguaje de alto nivel" es confuso: no existe una única definición acordada por todos.
Oded
Desafortunadamente, acordar opiniones en una comunidad no es cómo funciona la definición. Sus creadores y sus conceptos tienen un nivel más alto que el lenguaje ensamblador del procesador: esta es la línea definitoria. Esto es lo que lo define como de alto nivel. Cualquier libro que elija sobre informática siempre lo definirá de esta manera. Es posible que los tutores no y las opiniones de las personas no, pero la ciencia real de cómo funcionan las computadoras y cómo se ha definido en la ciencia de las computadoras y los procesadores es muy clara.
Ryan Rentfro
C # permite a los programadores acceder a un rango de memoria como una secuencia de valores de 64 bits, 32 bits, 16 bits u 8 bits, según convenga; si la memoria contiene píxeles de 16 bits, por ejemplo, el código puede procesar píxeles individualmente o en grupos de 2 o 4, según lo que sea mejor para el algoritmo. C, tal como lo define el Estándar, no define un medio práctico por el cual los programadores puedan solicitar una semántica similar. Muchos dialectos de C son de nivel inferior que C #, por supuesto, pero el lenguaje definido por el Estándar no lo es.
supercat