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 utilizar elementos de lenguaje natural , ser más fácil de usar o puede automatizar (o incluso ocultar por completo) áreas importantes de los sistemas informáticos (por ejemplo, la gestión de la memoria ), simplificando y simplificando el proceso de desarrollo de un programa. más comprensible que cuando se utiliza un lenguaje de nivel inferior. La cantidad de abstracción proporcionada define qué tan "alto nivel" es un lenguaje de programación. [1]
En la década de 1960, un lenguaje de programación de alto nivel que utilizaba un compilador se llamaba comúnmente código automático . [2] Ejemplos de códigos automáticos son COBOL y Fortran . [3]
El primer lenguaje de programación de alto nivel diseñado para ordenadores fue Plankalkül , creado por Konrad Zuse . [4] Sin embargo, no se implementó en su época, y sus contribuciones originales estuvieron en gran medida aisladas de otros desarrollos debido a la Segunda Guerra Mundial , aparte de la influencia del lenguaje en el lenguaje "Superplan" 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 anteriores sistemas Autocode de IBM . La familia ALGOL , con ALGOL 58 definido en 1958 y ALGOL 60 definido en 1960 por comités de informáticos europeos y estadounidenses, introdujo la recursividad y las funciones anidadas bajo el alcance léxico . ALGOL 60 fue también el primer lenguaje con una distinción clara entre valor y nombre-parámetros y su correspondiente semántica . [5] ALGOL también introdujo varios conceptos de programación estructurada , como las construcciones y y su while-do
sintaxis fue la primera en ser descrita en notación formal: forma Backus-Naur (BNF). Aproximadamente durante el mismo período, COBOL introdujo registros (también llamados estructuras) y Lisp introdujo por primera vez una abstracción lambda completamente general en un lenguaje de programación.if-then-else
"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 se ocupan de variables, matrices, objetos , expresiones aritméticas o booleanas complejas, subrutinas y funciones, bucles, subprocesos , bloqueos y otros conceptos abstractos de la informática, 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 a los códigos de operación nativos de una máquina . También pueden estar presentes otras características, como rutinas de manejo de cadenas, características 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 separe de la máquina. Es decir, a diferencia de los lenguajes de bajo nivel como el ensamblador o el 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 desde el programador.
Los lenguajes de alto nivel pretenden proporcionar características que estandaricen tareas comunes, permitan una depuración enriquecida y mantengan el agnosticismo arquitectónico; mientras que los lenguajes de bajo nivel suelen producir código más eficiente mediante 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 utilizar 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 intermedios; lo que a menudo resulta en la ejecución de muchas más operaciones de las necesarias, un mayor consumo de memoria y un mayor tamaño de programa binario. [6] [7] [8] Por esta razón, el código que necesita ejecutarse particularmente rápido y eficientemente 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, pueden codificarse manualmente en lenguaje ensamblador , lo que lleva a un programa optimizado mucho más rápido, más eficiente o simplemente con un funcionamiento más confiable .
Sin embargo, con la creciente complejidad de las arquitecturas de microprocesadores modernas , los compiladores bien diseñados para lenguajes de alto nivel frecuentemente producen código comparable en eficiencia al que la mayoría de los programadores de bajo nivel pueden producir a mano, y la mayor abstracción puede permitir técnicas más poderosas que brinden mejores resultados. resultados generales que sus homólogos de bajo nivel en entornos particulares. [9] Los lenguajes de alto nivel se diseñan independientemente de una arquitectura de sistema informático específica . 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, nuevos lenguajes de alto nivel evolucionan a partir de uno o más otros con el objetivo de agregar las construcciones más populares con características nuevas o mejoradas. Un ejemplo de esto es Scala , que mantiene compatibilidad con versiones anteriores de Java , lo que significa que los programas y bibliotecas escritos en Java seguirán siendo utilizables incluso si un taller de programación cambia a Scala; esto facilita la transición y hace que la vida útil de dicha 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 para la 'penalización por abstracción'.
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, [ ¿plazo? ] el lenguaje C y lenguajes similares se consideraban con mayor frecuencia de "alto nivel", ya que admitía conceptos como evaluación de expresiones, funciones recursivas parametrizadas y tipos y estructuras de datos, mientras que el lenguaje ensamblador se consideraba de "bajo nivel". Hoy en día, muchos programadores podrían referirse a C como de bajo nivel, ya que carece de un gran sistema de ejecución (sin recolección de basura, etc.), básicamente admite sólo operaciones escalares y proporciona direccionamiento directo de memoria; por lo tanto, se combina fácilmente con el lenguaje ensamblador y el nivel de máquina de CPU y microcontroladores . Además, en el capítulo de introducción de El lenguaje de programación C (segunda edición) de Brian Kernighan y Dennis Ritchie, C se describe como un lenguaje "no de muy alto nivel". [10]
El lenguaje ensamblador puede considerarse en sí mismo como una representación de código de máquina de nivel superior (pero a menudo todavía uno a uno si se usa sin macros ) , ya que admite conceptos como constantes y expresiones (limitadas), a veces incluso variables, procedimientos y datos. estructuras . El código de máquina , a su vez, está inherentemente en un nivel ligeramente superior al del microcódigo o las microoperaciones utilizadas internamente en muchos procesadores. [11]
Hay tres modos generales de ejecución para los lenguajes modernos de alto nivel:
Tenga en cuenta que los idiomas no son lenguajes estrictamente interpretados ni lenguajes compilados . Más bien, las implementaciones del comportamiento del lenguaje utilizan la interpretación o la compilación. Por ejemplo, se han interpretado ALGOL 60 y Fortran (aunque normalmente fueron compilados). De manera similar, Java muestra la dificultad de intentar aplicar estas etiquetas a lenguajes, en lugar de a implementaciones; Java se compila en código de bytes que luego se ejecuta mediante interpretación (en una máquina virtual Java (JVM)) o compilación (normalmente con un compilador justo a tiempo como HotSpot , nuevamente en una JVM). Además, la compilación, transcompilación e interpretación no se limitan estrictamente a una descripción del artefacto del compilador (ejecutable binario o ensamblado IL).
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 dirigida por un lenguaje de alto nivel específico. Las grandes instalaciones de Burroughs fueron , por ejemplo, las máquinas objetivo de ALGOL 60 . [12]
Los lenguajes de programación de "alto" nivel suelen denominarse códigos automáticos y el programa del procesador, compilador.
{{cite book}}
: CS1 maint: location (link)Dos lenguajes de programación de alto nivel que se pueden utilizar aquí como ejemplos para ilustrar la estructura y el propósito de los códigos automáticos son COBOL (lenguaje común orientado a los negocios) y FORTRAN (traducción formulada).
{{cite book}}
: CS1 maint: location (link)value
parámetros).{{cite journal}}
: Citar diario requiere |journal=
( ayuda ){{cite book}}
: CS1 maint: bot: original URL status unknown (link)