2010-08-12 55 views
30

He oído hablar estos términos describiendo idiomas antes, como C no es un lenguaje de bajo nivel, C++ es un nivel medio y Python es un lenguaje de alto nivel. Entiendo que tiene que hacer algo con la forma en que se compila el código y cómo está escrito. Pero lo que quiero saber es ¿qué define un idioma en una de esas 3 categorías? ¿Son estas categorías absolutas, o simplemente una idea general que utilizan los programadores para describir los idiomas entre sí?Lenguaje de nivel bajo, medio y alto, ¿cuál es la diferencia?

+0

posible duplicado de [¿Qué lenguajes de programación no se consideran de alto nivel?] (Http://stackoverflow.com/questions/2624781/which-programming-languages-arent-considered-high-level) – danben

+0

son similares pregunta, pero diferentes ángulos. Quería saber por qué hablar de estas cosas aún es relevante, quería una definición de los términos. Mirando la respuesta aceptada para ambos habla de la diferencia entre nuestras preguntas. También mi es una wiki de la comunidad. : 3 Estoy más interesado en conseguir que todos estén de acuerdo en una definición. – Narcolapser

Respuesta

57

Sí, son solo términos generales. Tiene que ver con la abstracción y lo cerca que estás de lo que la computadora realmente está haciendo.

He aquí una lista de los lenguajes de programación que van desde muy baja a muy alto nivel:

  • Machine Code probablemente se podría considerar el lenguaje de programación de nivel más bajo.

  • Assembly language está en el nivel de decirle al procesador qué hacer. Todavía hay un paso de conversión hacia el código de máquina.

  • C es un paso adelante del ensamblador, porque puedes especificar lo que quieres hacer en términos ligeramente más abstractos, pero aún estás bastante cerca del metal.

  • C++ hace todo lo que C puede hacer, pero agrega la capacidad de abstraer cosas en clases.

  • Java/C# hacer cosas similares a C++ en cierto modo, pero sin la oportunidad de hacer todo lo que puede hacer en C (como la manipulación de punteros en el caso de Java [gracias Joe!]). Sin embargo, tienen recolección de basura, que tienes que hacer manualmente en C++.

  • Python/Ruby tienen un nivel aún mayor, y le permiten olvidarse de muchos de los detalles que necesitaría especificar en algo como Java o C#.

  • SQL es un nivel aún mayor (es declarativo). Solo di "Dame todos los elementos de la tabla ordenados por edad" y te resultará la forma más eficiente de llevar esto a cabo por ti.

+0

¿Qué tal lisp? Yo pondría eso incluso más alto que SQL. También C# tiene manipulación de puntero (bloques inseguros). –

+2

@Joe D Creo que eso es discutible (me refiero a que lisp es de nivel más alto que SQL) ... – Skilldrick

+3

@Joe D Yo pondría lisp al mismo nivel que Python, probablemente. Todavía tiene que usar construcciones de programación como condicionales y funciones para hacer cosas ... a menos que, por supuesto, esté en una máquina LISP antigua, en cuyo caso es de nivel bajo B-) –

4

No son absolutas. Todos son relativos a los otros idiomas que se usan en la industria en ese momento. Por ejemplo, hubo un momento en que el montaje se consideraba de nivel medio.

El 'nivel' es esencialmente una medida de qué tan abstraído está el programador de las operaciones reales basadas en hardware. En un lenguaje de bajo nivel, puede que tenga que preocuparse por las ubicaciones reales de la memoria, mientras que en un nivel alto simplemente crea variables y deja que el SO maneje la memoria.

Una CPU normal procesa instrucciones de 32 o 64 bits. En la forma más simple, piense en esto como 32 1's y 0's seguidos, eso es lo que el procesador realmente interpreta y ejecuta. Escribir esto directamente (código de máquina) sería el 'nivel más bajo'.

1

Bajo nivel significa más cerca de la máquina, y por lo tanto más difícil y más potente. Cuanto más alto nivel obtienes, más retirado de la máquina e "parecido al inglés" obtienes, pero pierdes una gran parte de la potencia y funcionalidad que conlleva el poder controlar los minuciosos detalles de la máquina.Los idiomas de nivel superior generalmente también tienden a protegerlo más y tienen muchas más precauciones y controles, mientras que los idiomas de nivel inferior le confían, por así decirlo, y le permiten jugar bajo su propio riesgo.

+0

El estilo inglés no es realmente una buena medida, porque entonces obtienes COBOL como un lenguaje de alto nivel ... –

+0

Las definiciones de potencia varían, por ejemplo, ¿el ensamblaje es más potente que el ceceo? Eso depende de lo que quiere decir potencia, si el poder significa que todas las características de la máquina están disponibles, entonces sí, el ensamblaje es más poderoso. Pero, si esto significa que se puede expresar más en menos líneas de código (en este caso mucho, mucho menos), entonces el ceceo es claramente más poderoso. –

1

El término lenguaje de nivel medio es uno que nunca he escuchado.

"Bajo" y "Alto" se refieren a qué tan "cerca" de la máquina está en su programación. El nivel más bajo sería el código de máquina (binario). El siguiente (y aún considerado bajo) es ensamblador. Los lenguajes de nivel superior involucran más simbolismos y construcciones que se supone que están más cerca de lo que los humanos normalmente piensan. C (y algo C++) tiene una reputación como algo híbrido de nivel bajo/alto porque tiene muchas construcciones que están en idiomas de alto nivel, pero también tiene instrucciones (por ejemplo, cambios) que son idiomas de bajo nivel pero a menudo no en idiomas de nivel superior. .

+1

De nivel medio es generalmente C/C++ y tal vez D. –

8

En informática, un lenguaje de programación de bajo nivel es un lenguaje de programación que proporciona poca o ninguna abstracción de la arquitectura del conjunto de instrucciones de un ordenador. La palabra "baja" se refiere a pequeña o inexistente cantidad de abstracción entre el lenguaje y el lenguaje de máquina; debido a esto, los idiomas de bajo nivel a veces se describen como "cerca del hardware". Un lenguaje de bajo nivel no necesita un compilador o intérprete para ejecutarse; el procesador para el que se escribió el idioma puede ejecutar el código sin utilizar ninguno de estos.

En comparación, un lenguaje de programación de alto nivel aísla la semántica de ejecución de una arquitectura de computadora de la especificación del programa, haciendo que el proceso de desarrollo de un programa sea más simple y comprensible.

lenguajes de nivel Medio de pie en medio de los dos anteriores

+0

Esta es la respuesta más clara y concisa que he visto hasta ahora. – RavB

+5

@baultista: Sí, eso es porque es de Wikipedia: http://en.wikipedia.org/wiki/Low-level_programming_language – Skilldrick

+0

Esta es la peor demarcación que he escuchado desde el argumento del sistema frente a la aplicación. El ensamblaje requiere un "translater", se lo denomina ensamblador fecking. Puede usar máquinas virtuales para enfocar aspectos de un sistema que los lenguajes compilados no entienden. – cdcdcd

13

muy bajo nivel: Código de Máquina

bajo nivel: ensamblador, Forth

nivel medio: C, C++, la mayoría de lenguajes de programación del sistema

medio/alto nivel: D, Ir, recogida de basura del sistema lenguajes de programación

alta lev EL: Java, C#, idiomas más interpretados

Incluso nivel superior: dialectos Lisp

más alto nivel: SQL, lenguajes de programación declarativos

Si hay algo más que añadir, dime.

+0

Probablemente también podrías poner a Go en el nivel medio/alto. – Skilldrick

+0

Lisp puede ser declarativo, puede hacer programación lógica de estilo prólogo incluso – Anandamide

1

De menor a mayor, puede categorizar los idiomas de la siguiente manera.

Código de Máquina -> Lenguaje Ensamblador -> Compilado Idioma -> lenguaje interpretado

Recuerde que estas definiciones no son absolutos en blanco y negro, sino más bien tonos de gris. Esto es más una pauta que una regla.

Considere el código de máquina como una cadena larga de 1s y 0s que entiende la plataforma nativa. Considera esta tu línea de base ... el "nivel" más bajo que puedas tener.

El lenguaje ensamblador podría considerarse una representación simbólica de esto. Creo que hay una asignación de 1 a 1 entre las instrucciones del código de ensamblaje y las instrucciones del código de máquina. Este es tu lenguaje de bajo nivel. Java y C++, por ejemplo, son lenguajes compilados, pero muchos considerarían que C++ es un lenguaje de nivel inferior que Java porque expone el acceso de bajo nivel al sistema, mientras que Java se ejecuta en un entorno protegido (la máquina virtual). Recuerde que un lenguaje compilado se compila (convertido, si se quiere) a código de máquina antes de la ejecución. C también es un lenguaje compilado, pero se consideraría un nivel más bajo que Java y C++.

Por nuestra parte, diremos que C y C++ son lenguajes de bajo nivel porque ofrecen (relativamente) poca abstracción del hardware y la administración directa de la memoria. En realidad, caen en algún lugar entre bajo y medio, como verá pronto.

Llamaremos a los lenguajes de nivel medio Java y C# (.NET) porque tienen administración de memoria automática (recolección de basura), muchas abstracciones de alto nivel (objetos IE ... pero C++ admite objetos. ¿Ve por qué? la escala se considera vagamente definida?)

Con un lenguaje interpretado, el intérprete reside en la memoria y lee el código fuente directamente. Estos son lenguajes de alto nivel. Python, Perl, Javascript y PHP son ejemplos de lenguajes de alto nivel.

14

bajo nivel = tiempo de desarrollo a largo + archivo ejecutable muy rápido

nivel alto = más corto el tiempo de desarrollo + archivo ejecutable más lenta

nivel medio está entre los dos

+0

No sé quién votó eso, en realidad es una declaración bastante buena cuando se piensa en las respuestas anteriores. – Narcolapser

+0

+1 Estoy de acuerdo con Narcolapser: definitivamente es generalizado, pero en serio, es cierto. – DMan

+3

de hecho. las personas no piensan en la respuesta, simplemente votan :) – docesam

0

C es el lenguaje de nivel medio Becoz podemos usar el código en el lenguaje ensamblador solo una ligera diferencia puntero hacerlo potente (si el puntero eliminar en c, entonces se considerará en el nivel bajo) Es función portátil hacer medio lavel por lo que podemos decir es un lenguaje de nivel medio.

0

todo es relativo ... el "nivel" refleja la cantidad de abstracción.

0

Una vez que agrega un espectro de niveles de un lenguaje de programación, agrega matices a la definición. Claramente, el código de máquina y el ensamblaje dependen de la máquina. C y C++ en teoría son independientes de la máquina, pero en verdad eso no es universal. En C cosas como la alineación NECESITAN tenerse en cuenta y siempre se puede administrar la pila en C y en el subconjunto C de C++) mediante un puntero y una variable inicializada única, si estás lo suficientemente loco, de modo que (x86) la rsp nunca se usa Entonces C, sí, es de nivel medio. Todo lo demás es de alto nivel, algo de súper alto nivel.

0

Los idiomas de bajo nivel están muy cerca del lenguaje de máquina que puede ser binario o RTL. Difícil de escribir y muy rápido de ejecutar. Puede interactuar con el hardware y el lenguaje de programación de alto nivel es muy fácil de escribir, pero se puede ejecutar después de la compilación.

Cuestiones relacionadas