580 likes | 815 Vues
Aspectos de diseñó de los lenguajes de programación. (Tema 2). Introducción. Los primeros lenguajes al ejecutarse en equipos costosos se proyectaban para producir un código de máquina eficiente, aún cuando la escritura de los programas era difícil . Ejemplos: Fortran y LISP. Introducción.
E N D
Aspectos de diseñó de los lenguajes de programación (Tema 2)
Introducción Los primeros lenguajes al ejecutarse en equipos costosos se proyectaban para producir un código de máquina eficiente, aún cuando la escritura de los programas era difícil. Ejemplos: Fortran y LISP
Introducción En la actualidad los equipos son de bajo costo, por lo que, permiten el desarrollo de programas que son fáciles de escribir correctamente aunque se ejecuten con lentitud algo mayor. Ejemplos: C++, Java, Ada • Pero, ¿cómo se diseñan esta clase de lenguajes?
¿Cómo diseñar un lenguaje? Se tiene que tomar en cuenta tres influencias principales: • La computadora subyacente en donde se van a ejecutar los programas escritos en el lenguaje. • El modelo de ejecución, o computadora virtual, que apoya a ese lenguaje en el equipo real. • El modelo de computación que el lenguaje implementa.
Organización y operación de una computadora • La arquitectura de una computadora la podemos describir como la unión de microprocesadores, memoria y dispositivos de I/O.
Organización y operación de una computadora • Una computadora es un conjunto de tipos de datos, operaciones y características, capaz de almacenar y ejecutar programas. • A partir de la definición de una computadora siempre es posible construir la computadora en hardware.
Tipos de Arquitecturas Arquitectura Tradicional • Von Newmann Arquitecturas Alternativas • Multiprocesadores
Archivos externos dispositivos de entrada y salida Memoria Principal Memoria Caché UCP Registro de Direcciones Registros de Datos Intérprete Operación Primitiva Operación Primitiva Organización de una computadora convencional
Componentes Fundamentales de una Computadora • Datos • Operaciones Primitivas • Control de Secuencia • Acceso a Datos • Gestión de Almacenamiento • Entorno de Operación.
Datos Elementos de información integrados a la computadora, manipulables directamente a través de operaciones primitivas de hardware.
Operaciones Primitivas Una computadora debe contener un conjunto de operaciones primitivas interconstruidas, útiles para la manipulación de datos.
Control de Secuencia Una computadora debe proporcionar mecanismos para controlar el orden en el que se van a ejecutar las Operaciones primitivas.
Acceso a Datos Una computadora debe incorporar algún medio para designar operandos y un mecanismo para recuperar operandos de un designador de operandos dado.
Gestión de Almacenamiento Una computadora debe proveer mecanismos para la asignación de almacenamiento para programas.
Entorno de Operación El entorno de operación de una computadora consiste ordinariamente en un conjunto de dispositivos periféricos de almacenamiento de entrada / salida
Estados de Computadoras • Representación dinámica de la computadora durante la ejecución de los programas.
Computadoras de Firmware • Es la computadora simulada por un microprograma que se ejecuta en una computadora microprogramable de hardware especial. • Su lenguaje de máquina consiste en un conjunto de microinstrucciones de nivel extremadamente bajo.
Traductores y computadoras simuladas por Software I. Traducción Preprocesador Compilador Ensamblador Cargador II. Simulación de software
Programa Fuente Preprocesador Programa Fuente estándar Compilador Código Objeto Ensamblador Código Máquina Cargador Ejecutable
Preprocesador Básicamente es un procesador de texto, toma como entrada una forma ampliada de un lenguaje fuente y su salida es una forma estándar del mismo lenguaje fuente.
Compilador Un compilador es un traductor cuyo lenguaje fuente es un lenguaje de alto nivel y cuyo lenguaje objeto se aproxima al lenguaje máquina de una computadora real , ya sea que se trate de un lenguaje ensamblador o alguna variedad de lenguaje máquina.
Ensamblador Es un traductor cuyo lenguaje objeto es también alguna variedad de lenguaje máquina para una computadora real, pero cuyo lenguaje fuente, un lenguaje ensamblador, constituye en gran medida una representación simbólica del código de máquina objeto.
Cargador Es un traductor cuya entrada es un lenguaje objeto y la salida es un programa en lenguaje máquina relocalizable.
Máquina Virtual • Son las estructuras de datos y algoritmos de un lenguaje que se emplean durante el tiempo de ejecución de un programa. Programa en C ADD #1, AX MOV BX, 300 Máquina virtual de C 010111011 Oculta las operaciones y estructuras de bajo nivel
Relación entre Lenguaje y Máquina Virtual • Una máquina define un lenguaje • Un lenguaje define una máquina Código en C if (x==n) { var1 = 1; var2 = 0; } else { var1 = 0; var2 = 1; } var1 = 0; var2 = 0; Máquina virtual de C
Programador Jerarquía de Máquinas Virtuales • Una computadora con n niveles puede verse como nmáquinas virtuales diferentes, cada una de las cuales tiene un lenguaje especial. Nivel de lenguaje orientado a problemas Nivel de lenguaje ensamblador Nivel del Sistema Operativo Nivel del Sistema Convencional Nivel de Microprogramación Los RISC no cuentan con una descripción de microinstrucciones 0101 Nivel de Lógica Digital Nivel de Dispositivo Física Estado Sólido
Traductor para la Máquina Virtual • Se debe suministrar un traductor para traducir programas de usuario al lenguaje de máquina de la computadora virtual definida por el lenguaje. Programa en C traductor Computadora virtual de C traductor Computadora virtual de Ensamblador traductor ... Computadora de Hardware Real
Jerarquía de Máquinas Virtuales • Cada nivel representa una abstracción con objetos y operaciones diferentes • Cada nivel esta construido sobre su predecesor • Si se quiere escribir programas para la máquina virtual del nivel n, no se necesita conocer los interpretes ni los traductores de los niveles de abajo. • Las computadoras están diseñadas como una serie de niveles • Para diseñar nuevos niveles, se necesita conocer todos.
La Máquina Virtual de Java • ¿Por qué están de moda los Bytecodes Habrás oído que con el lenguaje de programación Java, puedes "escribir una vez, ejecutar en cualquier parte". Esto significa que cuando se compila un programa, no se generan instrucciones para una plataforma específica. En su lugar, se generan bytecodes Java, que son instrucciones para la Máquina Virtual Java (Java VM). Si tu plataforma- sea Windows, UNIX, MacOS o un navegador de internet-- tiene la Java VM, podrá entender los bytecodes.
Enlaces y tiempo de enlace • Un enlacees la asignación de atributos a una celda de memoria para un elemento de programa. • El momento en que el programa hace esta elección se conoce como el tiempo de enlace. nombre tipo dirección a entero • a Tabla de Símbolos Memoria
Tipos de tiempos de enlace • Tiempo de ejecución • El enlace de parámetros formales a reales • A través de la asignación de valores a variables • Tiempo de compilación • Tipos para las variables • Como se guardan las estructuras de datos y sus descriptores • Tiempo de carga • Fusionar los subprogramas en un ejecutable único enlazando las variables a direcciones reales de memoria
Tipos de tiempos de enlace • Tiempo de implantación del lenguaje • Representación de números y operaciones aritméticas en la computadora de hardware subyacente • Tiempo de definición del lenguaje • Todas las posibles formas opcionales de enunciados, tipos de estructuras de datos, estructuras de programa. • Por ejemplo, cuántos tipos de enlace tiene este sencillo enunciado de asignación escrito en un lenguaje L: X := X + 10
Tipos de tiempos de enlace • Cuando un enlace se efectúa durante el tiempo de ejecución, se dice que es de tipo dinámico. • Ejemplos: Prolog, LISP y ML • El enlace que ocurre durante el tiempo de compilación es de tipo estático. • Ejemplos: C, Pascal y Fortran
Alcance de una variable • Es el conjunto de enunciados en el que el identificador de la variable es válido. • Alcance estático: El alcance se determina de acuerdo al lugar donde el identificador es definido. Se le llama también alcance lexicográfico. • El alcance estático se determina fácilmente utilizando diagramas de contorno.
A x,l,m m,r C l B x,y,z D Alcance estático Diagrama de Contorno
Enlace dinámico Enlace estático Dir. de retorno Valor de retorno Variables Locales Parámetros Alcance Dinámico • El alcance se determina de acuerdo al lugar donde se hizo la última definición del identificador. Se puede decir que va siguiendo “la historia del programa”. • El alcance dinámico se determina utilizando los registros de activación. Quien lo llamó
B a = 7 a = 0 P2 P1 Diferencias entre Alcance Estático y Alcance Dinámico Diagrama de Contorno Imprime 7 Alcance estático
Enlace dinámico Enlace estático Dir. de retorno Valor de retorno a = 0 Enlace dinámico Enlace estático Dir. de retorno Valor de retorno Diferencias entre Alcance Estático y Alcance Dinámico Registros de Activación P1 a = 7 P2 B Imprime 0 Alcance dinámico
Funciones Virtuales en C++ mini radio=1.0 plastico radio=24.0 luna radio=1e+024 mini plastico luna
Funciones Virtuales en C++ mini radio=1.0 plastico radio=24.0 luna radio=1e+024 mini radio=1.0 plastico radio=24.0 luna radio=1e+024
Consecuencias del tiempo de enlace • Dependiendo del tipo de enlace un programa puede ser más eficiente o más flexible
Paradigmas de los lenguajes de programación • En ciencias de la computación un paradigma se puede definir como un conjunto de conceptos que permiten modelar el mundo. • Un paradigma es usado para formular una solución de cómputo a un problema.
Paradigmas de los lenguajes de programación Existen 5 modelos que describen los lenguajes de programación • Lenguajes imperativos o de procedimientos • Lenguajes aplicativos o funcionales • Lenguajes con base en reglas o lógicos • Lenguajes orientados a objetos • Lenguajes concurrentes
1. Lenguajes imperativos o de procedimientos Se caracterizan por ser claros, formales y elegantes. • Son controlados por enunciados imperativos enunciado 1; enunciado 2; ... • La ejecución de un enunciado hace que el interprete cambie el valor de una o mas localidades en memoria • Ejemplos: Fortran, Pascal, C, Algol, Ada, PL/1
2. Lenguajes aplicativos o funcionales Se caracterizan por ser muy eficientes, expresivos y semanticamente elegantes. • Los lenguajes aplicativos hacen uso de las funciones puras con composición funcional, recursión y expresiones condicionales • Tienen 4 componentes: • un conjunto de funciones primitivas • un conjunto de formas funcionales • la operación de aplicación • un conjunto de objetos de datos • Ejemplos: LISP, ML
3. Lenguajes con base en reglas o lógicos Se caracterizan por ser eficaces y veloces • Se ejecutan verificando una condición, que cuando se satisface ejecutan una acción condición 1 entonces acción 1 condicion 2 entonces accion 2 ... • Ejemplo: Prolog
Pam Tom Bob Liz Ann Pat Jim PROLOG
4. Lenguajes orientados a objetos Se caracterizan por trabajar con entes abstractos (objetos) que reflejan las propiedades y características de objetos o entes reales • Las actividades a realizarse se tornan alrededor de los objetos mediante métodos (funciones) • La comunicación con el objeto se da a través de mensajes • Un aspecto fundamental es el concepto de herencia que se da cuando los objetos pertenecen a la misma clase • Ejemplos: Simula, Smalltalk, Java