Lenguaje de programación de alto nivel

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Lenguaje de programación con fuerte abstracción de los detalles del hardware

En informática, un lenguaje de programación de alto nivel es un lenguaje de programación con una fuerte abstracción de los detalles de la computadora. A diferencia de los lenguajes de programación de bajo nivel, puede usar elementos de lenguaje natural, ser más fácil de usar o puede automatizar (o incluso ocultar por completo) áreas significativas de los sistemas informáticos (por ejemplo, administración de memoria), lo que hace que la proceso de desarrollar un programa más simple y comprensible que cuando se usa un lenguaje de nivel inferior. La cantidad de abstracción proporcionada define cómo "alto nivel" un lenguaje de programación es.

En la década de 1960, un lenguaje de programación de alto nivel que usaba un compilador se llamaba comúnmente autocodificación. Ejemplos de códigos automáticos son COBOL y Fortran.

El primer lenguaje de programación de alto nivel diseñado para computadoras fue Plankalkül, creado por Konrad Zuse. Sin embargo, no se implementó en su época, y sus contribuciones originales quedaron en gran medida aisladas de otros desarrollos debido a la Segunda Guerra Mundial, además de la influencia del idioma en el 'Superplan'. lenguaje de Heinz Rutishauser y también hasta cierto punto ALGOL. El primer lenguaje de alto nivel significativamente extendido fue Fortran, un desarrollo independiente de la máquina de los sistemas Autocode anteriores de IBM. La familia ALGOL, con ALGOL 58 definido en 1958 y ALGOL 60 definido en 1960 por comités de científicos informáticos europeos y estadounidenses, introdujo recursividad y funciones anidadas en el ámbito léxico. ALGOL 60 fue también el primer lenguaje con una clara distinción entre valor y nombre-parámetros y su semántica correspondiente. ALGOL también introdujo varios conceptos de programación estructurada, como las construcciones while-do y if-then-else y su sintaxis fue la primera en describirse en notación formal: Forma Backus-Naur (BNF). Aproximadamente durante el mismo período, COBOL introdujo registros (también llamados estructuras) y Lisp introdujo una abstracción lambda completamente general en un lenguaje de programación por primera vez.

Características

"Lenguaje de alto nivel" se refiere al nivel más alto de abstracción del lenguaje de máquina. En lugar de tratar con registros, direcciones de memoria y pilas de llamadas, los lenguajes de alto nivel tratan con variables, arreglos, objetos, expresiones aritméticas o booleanas complejas, subrutinas y funciones, bucles, hilos, bloqueos y otros conceptos abstractos de las ciencias de la computación, con un Centrarse en la usabilidad sobre la eficiencia óptima del programa. A diferencia de los lenguajes ensambladores de bajo nivel, los lenguajes de alto nivel tienen pocos elementos de lenguaje, si es que tienen alguno, que se traduzcan directamente en los códigos de operación nativos de una máquina. También pueden estar presentes otras funciones, como rutinas de manejo de cadenas, funciones de lenguaje orientado a objetos y entrada/salida de archivos. Una cosa a tener en cuenta sobre los lenguajes de programación de alto nivel es que estos lenguajes permiten que el programador se separe y se separe de la máquina. Es decir, a diferencia de los lenguajes de bajo nivel como ensamblador o lenguaje de máquina, la programación de alto nivel puede amplificar las instrucciones del programador y desencadenar una gran cantidad de movimientos de datos en segundo plano sin su conocimiento. La responsabilidad y el poder de ejecutar instrucciones han sido entregados a la máquina por el programador.

Penalización por abstracción

Los lenguajes de alto nivel pretenden proporcionar funciones que estandaricen tareas comunes, permitan una depuración rica y mantengan el agnosticismo arquitectónico; mientras que los lenguajes de bajo nivel a menudo producen un código más eficiente a través de la optimización para una arquitectura de sistema específica. La penalización por abstracción es el costo que pagan las técnicas de programación de alto nivel por no poder optimizar el rendimiento o usar cierto hardware porque no aprovechan ciertos recursos arquitectónicos de bajo nivel. La programación de alto nivel exhibe características como operaciones y estructuras de datos más genéricas, interpretación en tiempo de ejecución y archivos de código intermedio; que a menudo dan como resultado la ejecución de muchas más operaciones de las necesarias, un mayor consumo de memoria y un tamaño de programa binario más grande. Por esta razón, el código que necesita ejecutarse de manera particularmente rápida y eficiente puede requerir el uso de un lenguaje de nivel inferior, incluso si un lenguaje de nivel superior facilitaría la codificación. En muchos casos, las partes críticas de un programa, principalmente en un lenguaje de alto nivel, se pueden codificar a mano en lenguaje ensamblador, lo que lleva a un programa optimizado mucho más rápido, más eficiente o simplemente confiable.

Sin embargo, con la creciente complejidad de las arquitecturas modernas de microprocesadores, los compiladores bien diseñados para lenguajes de alto nivel con frecuencia producen código comparable en eficiencia a lo que la mayoría de los programadores de bajo nivel pueden producir a mano, y la mayor abstracción puede permitir código más poderoso. técnicas que proporcionan mejores resultados generales que sus contrapartes de bajo nivel en entornos particulares. Los lenguajes de alto nivel están diseñados independientemente de la arquitectura de un sistema informático específico. Esto facilita la ejecución de un programa escrito en dicho lenguaje en cualquier sistema informático con soporte compatible para el programa Interpretado o JIT. Los lenguajes de alto nivel se pueden mejorar a medida que sus diseñadores desarrollan mejoras. En otros casos, los nuevos lenguajes de alto nivel evolucionan de uno o más con el objetivo de agregar las construcciones más populares con características nuevas o mejoradas. Un ejemplo de esto es Scala, que mantiene la compatibilidad con versiones anteriores de Java, lo que significa que los programas y bibliotecas escritos en Java seguirán siendo utilizables incluso si una tienda de programación cambia a Scala; esto hace que la transición sea más fácil y que la vida útil de la codificación de alto nivel sea indefinida. Por el contrario, los programas de bajo nivel rara vez sobreviven más allá de la arquitectura del sistema para la que fueron escritos sin una revisión importante. Esta es la 'compensación' de ingeniería. por la 'penalización por abstracción'.

Significado relativo

Ejemplos de lenguajes de programación de alto nivel en uso activo hoy en día incluyen Python, JavaScript, Visual Basic, Delphi, Perl, PHP, ECMAScript, Ruby, C#, Java y muchos otros.

Los términos alto nivel y bajo nivel son inherentemente relativos. Hace algunas décadas, el lenguaje C y otros lenguajes similares se consideraban con mayor frecuencia de "alto nivel", ya que admitían conceptos como la evaluación de expresiones, funciones recursivas parametrizadas y estructuras y tipos de datos, mientras que el lenguaje ensamblador era considerado "de bajo nivel". Hoy en día, muchos programadores pueden referirse a C como de bajo nivel, ya que carece de un gran sistema de tiempo de ejecución (sin recolección de basura, etc.), básicamente solo admite operaciones escalares y proporciona direccionamiento de memoria directo. Por lo tanto, se combina fácilmente con el lenguaje ensamblador y el nivel de máquina de las CPU y los microcontroladores. Además, en el capítulo de introducción de El lenguaje de programación C (segunda edición) de K&R, C se considera como un lenguaje de programación relativamente "de bajo nivel" idioma.

El lenguaje ensamblador puede considerarse en sí mismo como una representación de nivel superior (pero a menudo uno a uno si se usa sin macros) del código de máquina, ya que admite conceptos como constantes y expresiones (limitadas), a veces incluso variables, procedimientos y estructuras de datos. El código de máquina, a su vez, se encuentra inherentemente en un nivel ligeramente más alto que el microcódigo o las microoperaciones utilizadas internamente en muchos procesadores.

Modos de ejecución

Hay tres modos generales de ejecución para los lenguajes modernos de alto nivel:

Interpreted
Cuando el código escrito en un idioma se interpreta, su sintaxis se lee y luego se ejecuta directamente, sin etapa de compilación. Un programa llamado intérprete lee cada declaración del programa, siguiendo el flujo del programa, luego decide qué hacer, y lo hace. Un híbrido de un intérprete y un compilador compilará la declaración en código de máquina y ejecutará eso; el código de máquina se descarta, para ser interpretado de nuevo si la línea se ejecuta de nuevo. Los intérpretes son comúnmente las implementaciones más simples del comportamiento de un idioma, en comparación con las otras dos variantes enumeradas aquí.
Compilado
Cuando se compila el código escrito en un idioma, su sintaxis se transforma en una forma ejecutable antes de correr. Hay dos tipos de compilación:
Generación de código de máquina
Algunos compiladores compilan código fuente directamente en código de máquina. Este es el modo original de compilación, y los idiomas que se transforman directamente y completamente en código nativo automático de esta manera pueden llamarse realmente compilado idiomas. Ver lenguaje de montaje.
Representaciones intermedias
Cuando el código escrito en un idioma se compila a una representación intermedia, esa representación puede ser optimizada o guardada para la ejecución posterior sin la necesidad de volver a leer el archivo fuente. Cuando se guarda la representación intermedia, puede estar en una forma como bytecode. La representación intermedia debe ser interpretada o compilada para ejecutarla. Las máquinas virtuales que ejecutan bytecode directamente o lo transforman aún más en código de máquina han difuminado una vez clara distinción entre representaciones intermedias y lenguajes verdaderamente compilados.
Fuente a fuente traducida o realizada
El código escrito en un idioma puede traducirse en términos de un lenguaje de menor nivel para el cual los compiladores de código nativo ya son comunes. JavaScript y el idioma C son objetivos comunes para tales traductores. Ver CoffeeScript, Chicken Scheme y Eiffel como ejemplos. Específicamente, se puede ver el código generado C y C++ (como se genera desde el idioma Eiffel al utilizar el IDE de Eiffel) en el directorio EIFGENs de cualquier proyecto Eiffel compilado. In Eiffel, the traducido el proceso se denomina transcompilador o transcompilado, y el compilador Eiffel como transcompilador o compilador fuente a fuente.

Tenga en cuenta que los lenguajes no son estrictamente lenguajes interpretados o lenguajes compilados. Más bien, las implementaciones del comportamiento del lenguaje utilizan la interpretación o la compilación. Por ejemplo, ALGOL 60 y Fortran se han interpretado (aunque normalmente se compilaron). De manera similar, Java muestra la dificultad de intentar aplicar estas etiquetas a los lenguajes, en lugar de a las implementaciones; Java se compila en un código de bytes que luego se ejecuta interpretando (en una máquina virtual Java (JVM)) o compilando (generalmente con un compilador justo a tiempo como HotSpot, nuevamente en una JVM). Además, la compilación, la transcompilación y la interpretación no se limitan estrictamente a una descripción del artefacto del compilador (ejecutable binario o ensamblado IL).

Arquitectura informática de lenguaje de alto nivel

Alternativamente, es posible que una computadora implemente directamente un lenguaje de alto nivel: la computadora ejecuta directamente el código HLL. Esto se conoce como arquitectura informática de lenguaje de alto nivel: la arquitectura informática en sí está diseñada para ser el objetivo de un lenguaje específico de alto nivel. Los sistemas grandes de Burroughs fueron máquinas objetivo para ALGOL 60, por ejemplo.

Contenido relacionado

Vorbis

Vorbis es un proyecto de software libre y de código abierto encabezado por la Fundación Xiph.Org. El proyecto produce un formato de codificación de audio y...

Programación lógica

La programación lógica es un paradigma de programación que se basa en gran medida en la lógica formal. Cualquier programa escrito en un lenguaje de...

Transporte en Colombia

El transporte en Colombia está regulado por el Ministerio de...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save