stringtranslate.com

Lenguaje de programación de alto nivel.

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 while-doconstrucciones y if-then-elsey su 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.

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 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.

Penalización por abstracción

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'.

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, [ ¿ 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 The C Programming Language (segunda edición) de K&R, C se considera un lenguaje de relativamente "bajo 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, se encuentra inherentemente en un nivel ligeramente superior al del microcódigo o las microoperaciones utilizadas internamente en muchos procesadores. [11]

Modos de ejecución

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

Interpretado
Cuando se interpreta el código escrito en un lenguaje , se lee su sintaxis y luego se ejecuta directamente, sin etapa de compilación. Un programa llamado intérprete lee cada declaración del programa, sigue el flujo del programa, luego decide qué hacer y lo ejecuta. Un híbrido de intérprete y compilador compilará la declaración en código de máquina y la ejecutará; Luego, el código de máquina se descarta y se interpreta de nuevo si la línea se ejecuta nuevamente. Los intérpretes suelen ser 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 lenguaje , su sintaxis se transforma en un formato ejecutable antes de ejecutarse. Hay dos tipos de compilación:
Generación de código de máquina
Algunos compiladores compilan el código fuente directamente en código máquina . Este es el modo original de compilación, y los lenguajes que se transforman directa y completamente en código nativo de máquina de esta manera pueden denominarse lenguajes verdaderamente compilados . Ver lenguaje ensamblador .
Representaciones intermedias
Cuando el código escrito en un lenguaje se compila en una representación intermedia , esa representación se puede optimizar o guardar para su posterior ejecución sin necesidad de volver a leer el archivo fuente. Cuando se guarda la representación intermedia, puede tener un formato como bytecode . Luego, la representación intermedia debe interpretarse o compilarse aún más para ejecutarla. Las máquinas virtuales que ejecutan código de bytes directamente o lo transforman aún más en código de máquina han desdibujado la distinción que alguna vez fue clara entre representaciones intermedias y lenguajes verdaderamente compilados.
Traducido o transcompilado de fuente a fuente
El código escrito en un idioma puede traducirse a términos de un lenguaje de nivel inferior para el cual los compiladores de código nativo ya son comunes. JavaScript y el lenguaje C son objetivos comunes para este tipo de traductores. Vea CoffeeScript , Chicken Scheme y Eiffel como ejemplos. Específicamente, el código C y C++ generado se puede ver (tal como se genera a partir del lenguaje Eiffel cuando se usa el IDE de EiffelStudio ) en el directorio EIFGENs de cualquier proyecto Eiffel compilado. En Eiffel, el proceso traducido se denomina transcompilación o transcompilado, y al compilador Eiffel como transcompilador o compilador de fuente a fuente .

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 interpretando (en una máquina virtual Java (JVM)) o compilando (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).

Arquitectura informática en 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 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]

Ver también

Referencias

  1. ^ "HThreads - Glosario RD". Archivado desde el original el 26 de agosto de 2007.
  2. ^ Londres, Keith (1968). "4, Programación". Introducción a los computadores . 24 Russell Square Londres WC1: Faber and Faber Limited. pag. 184.ISBN _ 0571085938. Los lenguajes de programación de "alto" nivel suelen denominarse códigos automáticos y el programa del procesador, compilador.{{cite book}}: Mantenimiento CS1: ubicación ( enlace )
  3. ^ Londres, Keith (1968). "4, Programación". Introducción a los computadores . 24 Russell Square Londres WC1: Faber and Faber Limited. pag. 186.ISBN _ 0571085938. 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}}: Mantenimiento CS1: ubicación ( enlace )
  4. ^ Giloi, Wolfgang, K.  [Delaware] (1997). "Plankalkül de Konrad Zuse: el primer lenguaje de programación" no von Neumann "de alto nivel". Anales IEEE de la historia de la informática, vol. 19, núm. 2, págs. 17 a 24, abril a junio de 1997 (resumen)
  5. ^ Aunque carecía de noción de parámetros de referencia , lo que podría ser un problema en algunas situaciones. Varios sucesores, incluidos ALGOL W , ALGOL 68 , Simula , Pascal , Modula y Ada , incluyeron parámetros de referencia (la familia de lenguajes C relacionada permitía direcciones como valueparámetros).
  6. ^ Surana P (2006). "Metacompilación de abstracciones del lenguaje" (PDF) . Archivado (PDF) desde el original el 17 de febrero de 2015 . Consultado el 17 de marzo de 2008 . {{cite journal}}: Citar diario requiere |journal=( ayuda )
  7. ^ Kuketáyev. "El punto de referencia de penalización por abstracción de datos (DAP) para objetos pequeños en Java". Archivado desde el original el 11 de enero de 2009 . Consultado el 17 de marzo de 2008 .
  8. ^ Chatzigeorgiou; Estefanides (2002). "Evaluación del rendimiento y el poder de los lenguajes de programación orientados a objetos frente a los procedimentales". En Blieberger; Strohmeier (eds.). Actas - Séptima Conferencia Internacional sobre Tecnologías de Software Confiables - Ada-Europe'2002 . Saltador. pag. 367.
  9. ^ Manuel Carro; José F. Morales; Henk L. Müller; G.Puebla; M. Hermenegildo (2006). "Lenguajes de alto nivel para dispositivos pequeños: un estudio de caso" (PDF) . Actas de la Conferencia internacional de 2006 sobre compiladores, arquitectura y síntesis para sistemas integrados . ACM.
  10. ^ Kernighan, Brian W.; Ritchie, Dennis M. (1988). El lenguaje de programación C: segunda edición. Prentice Hall. ISBN 9780131103627. Archivado desde el original el 13 de diciembre de 2018.
  11. ^ Hyde, Randall. (2010). El arte del lenguaje ensamblador (2ª ed.). San Francisco: No Starch Press. ISBN 9781593273019. OCLC  635507601.
  12. ^ Chu, Yaohan (1975), "Conceptos de arquitectura informática en lenguaje de alto nivel", Arquitectura informática en lenguaje de alto nivel , Elsevier, págs. 1-14, doi :10.1016/b978-0-12-174150-1.50007-0, ISBN 9780121741501

enlaces externos