CUESTIONES DE DISEO DE LENGUAJES - PowerPoint PPT Presentation

About This Presentation
Title:

CUESTIONES DE DISEO DE LENGUAJES

Description:

Para ello, el hardware debe de soportar directamente la paginaci n o reubicaci n ... El lenguaje de m quina es distinto para cada plataforma de hardware. ... – PowerPoint PPT presentation

Number of Views:148
Avg rating:3.0/5.0
Slides: 53
Provided by: jennyagu
Category:

less

Transcript and Presenter's Notes

Title: CUESTIONES DE DISEO DE LENGUAJES


1
CUESTIONES DE DISEÑO DE LENGUAJES
  • La estructura y operación de una computadora.
  • Computadoras virtuales y tiempos de enlace.
  • Paradigmas en lenguajes.

2
INTRODUCCIÓN
  • En el diseño de un Lenguaje de Programación, hay
    que considerar tres aspectos básicos
  • La estructura y operación de la computadora dónde
    se van a ejecutar los programas escritos en el
    lenguaje.
  • El Modelo de Ejecución o Computadora Virtual con
    que se implementará el lenguaje en la Máquina
    Real.
  • El Modelo de Computación (Paradigma) que el
    lenguaje soportará.

3
La estructura y operación de una computadora
  • Una computadora es un conjunto integrado de
    algoritmos y estructuras de datos capaz de
    almacenar y ejecutar programas. Se puede
    construir una computadora por medio de
  • Un dispositivo físico real utilizando circuitos
    integrados, en cuyo caso se le conoce como
    computadora real o una computadora de hardware.
  • Programas que se ejecutan en una computadora
    simulando a otra computadora computadora
    simulada por software o computadora virtual.

4
Estructura y operación de una computadora
  • Un lenguaje de programación se implementa
    construyendo un traductor, el cual traduce los
    programas expresados en el lenguaje a programas
    en lenguaje de máquina que pueden ser ejecutados
    directamente por alguna computadora. La
    computadora que ejecuta los programas traducidos
    puede ser una computadora de hardware o una
    computadora virtual.
  • Arquitectura de Von Neumann. Consiste en una
    unidad central de procesamiento (UCP), compuesta
    de operaciones primitivas control de secuencia
    y registros internos para guardar los resultados
    de las operaciones primitivas una memoria
    principal y un proceso para recuperar y guardar
    palabras de datos entre la UCP y la memoria.

5
  • Tanto una computadora como un lenguaje de
    programación consisten de seis componentes
    fundamentales
  • Datos. Diversas clases de datos elementales y
    estructurados.
  • Operaciones primitivas. Operaciones para
    manipular los datos.
  • Control de secuencia. Mecanismos para controlar
    el orden en el que se van a ejecutar las
    operaciones primitivas.
  • Acceso a datos. Mecanismos para controlar los
    datos a cada ejecución de una operación.
  • Gestión de almacenamiento. Mecanismos para
    controlar la asignación de almacenamiento para
    programas y datos.
  • Entorno de operación. Mecanismos para la
    comunicación con el entorno.

6
Organización física de una computadora
  • Una computadora cuenta con una memoria principal
    la cual contiene programas y datos que se van a
    procesar.
  • El procesamiento está a cargo de un intérprete,
    el cuál toma cada instrucción de lenguaje de
    máquina por turno, la decodifica, e invoca la
    operación primitiva designada con los operandos
    designados como entrada.
  • Las Primitivas manipulan los datos almacenados
    en la memoria principal y en registros internos
    de alta velocidad. También pueden transmitir
    programas o datos de la memoria hacia el
    exterior.

7
Organización de una Computadora
8
Partes principales de una computadora
  • Datos Hay cuatro componentes principales de
    almacena-miento de datos
  • Memoria Principal . Organizada como una secuencia
    lineal de bits subdividida en palabras de
    longitud fija. Almacena datos y programas.
  • Registros Internos. Se componen de secuencias de
    bits con longitud de palabra. Su contenido puede
    representar datos o la dirección en la memoria
    principal dónde están los datos o la próxima
    instrucción.
  • Memoria Caché. Se encuentra entre la memoria
    principal y los registros internos. Sirve para
    acelerar el acceso a los datos de la memoria.
  • Archivos Externos. Son una serie de bits
    divididos en registros. Sirven para el
    almacenamiento externo de datos o programas.

9
  • Una computadora tiene ciertos tipos de datos
    integrados que se pueden manipular directamente
    con operaciones primitivas de hardware enteros,
    números de punto flotante (reales), cadenas de
    caracteres y cadenas de bits, todos ellos de
    longitud fija igual al número de bits de una
    palabra de almacenamiento.
  • Los programas también son un tipo de datos y por
    tanto tiene que haber una representación
    interconstruida para programas, la cual se
    designa como representación en lenguaje de
    máquina de la computadora.
  • Un programa en lenguaje de máquina se estructura
    como una serie de localidades de memoria, cada
    una de las cuales tiene una o más instrucciones.
  • Cada instrucción se compone de un código de
    operación y un operando.

10
  • Operaciones Una computadora debe contener un
    conjunto de operaciones primitivas
    interconstruidas, ordinariamente apareadas una a
    una con los códigos de operación que pueden
    aparecer en las instrucciones de lenguaje de
    máquina. Incluyen
  • Primitivas para Aritmética. Suma, resta,
    multiplicación y división de enteros y reales.
  • Primitivas para probar propiedades de los
    elementos de datos.
  • Primitivas de acceso y modificación de las
    componentes de un elemento de datos.
  • Primitivas para controlar dispositivos de E/S.
  • Primitivas para el control de secuencia.

11
  • Control de secuencia La instrucción siguiente
    que se debe ejecutar en cualquier punto durante
    la ejecución de un programa en lenguaje de
    máquina está determinada por el contenido de un
    registro de direcciones de programa ( o contador
    de localidades), el cuál siempre contiene la
    dirección de memoria de la próxima instrucción.
  • El intérprete ocupa un lugar central
    en la operación de una computadora. Accesa al
    registro de direcciones y guía la secuencia de
    operaciones.
  • Ejecuta un algoritmo cíclico. En cada
    ciclo obtiene del registro, la dirección de la
    instrucción siguiente, incrementa el valor del
    registro (para apuntar a la dirección de una
    nueva instrucción), toma la instrucción de la
    memoria, decodifica la instrucción a un código de
    operación y a un conjunto de designadores de
    operando, toma los operadores designados e invoca
    la operación designada con los operandos como
    argumentos. La operación primitiva puede
    modificar datos de la memoria o los registros,
    acceder a dispositivos de E/S o cambiar el orden
    de ejecución cambiando el contenido del registro.

12
Interpretación y Ejecución de un Programa
13
  • Acceso a datos Toda instrucción de máquina
    especifica un código de operación y los
    operandos que la operación va a usar.
  • Un operando puede estar en la memoria
    principal o en un registro.
  • Se debe de contar con algún mecanismo para
    designar operandos y recuperarlos de un
    designador dado.
  • De igual forma, el resultado de una operación
    primitiva se debe guardar en alguna localidad
    designada.
  • Llamamos a estos recursos el control de
    acceso a datos de la computadora. Consiste en
    asociar direcciones de enteros con localidades de
    memoria y suministrar operaciones para recuperar
    el contenido de una localidad dada su dirección.

14
  • Gestión de almacenamiento Un principio de diseño
    es el de tener en operación simultánea todos
    los recursos de la computadora.
  • El problema es que las operaciones de la UCP
    son mucho más rápidas que que el acceso a la
    memoria y éste a su vez, es más rápido que las
    operaciones con datos externos.
  • Una solución simple, es integrar en el
    hardware recursos sencillos para gestión de
    almacenamiento los programas y los datos residen
    en memoria sólo durante la ejecución del
    programa. Aunque la UCP debe esperar para que los
    datos apropiados queden disponibles, resulta
    económico no tener que agregar hardware adicional
    para acelerar el proceso.

15
  • Para compensar el desequilibrio entre el
    acceso a datos externos y el procesador central,
    el S.O. puede usar multiprogramación. Mientras
    espera a que se lean los datos (p.ejm., de un
    disco), se ejecuta otro programa.
  • Para ello, el hardware debe de soportar
    directamente la paginación o reubicación dinámica
    de programas. Que consiste en permitir que varios
    programas puedan residir conjuntamente y al mismo
    tiempo en memoria. Hay algoritmos de paginación
    que calculan cuales cuales direcciones de
    programas y datos tienen más probabilidad de ser
    utilizados nuevamente.
  • Otro mecanismo de compensación es el uso de una
    memoria caché. Es una memoria de alta velocidad,
    contiene los datos e instrucciones que con más
    probabilidad se volverán a usar. El procesador
    central accesa inmediatamente a los datos de esta
    memoria y si se modifican se almacenan en la
    memoria principal.

16
  • Entorno de operación El entorno de operación de
    una computadora consiste en un conjunto de
    dispositivos periféricos de almacenamiento y de
    E/S que sirven para comunicarse con ella.
  • Arquitecturas alternativas de computadora Un
    enfoque alternativo a la arquitectura de Von
    Newmann es el uso de sistemas de
    multiprocesamiento formados por múltiples UCP
    acoplados y compartiendo conjuntos únicos de
    memoria, discos, etc. Esto implica el diseño de
    lenguajes que permitan escribir programas que se
    ejecuten en varias máquinas y puedan comunicarse
    entre sí (paralelismo).

17
  • Estados de computadora El concepto de estado de
    computadora es un medio para visualizar el
    comportamiento dinámico de una computadora.
  • El proceso de ejecución de programas se da se
    da a través de una serie de estados, cada uno
    definido por el contenido de la memoria, de los
    registros internos, y de los almacenes externos
    en algún instante de tiempo durante la ejecución.
  • El contenido inicial en áreas de
    almacenamiento define el estado inicial .
  • Cada paso en la ejecución del programa
    transforma el estado existente en uno nuevo a
    través de la modificación del contenido de un
    área de almacenamiento o más es decir, genera
    una transición de estado.
  • Al terminar el programa, el estado final esta
    definido por el contenido final de las áreas de
    almacenamiento.

18
Computadora de Firmware
  • Existe un principio de diseño que estipula
    que Cualquier algoritmo o estructura de datos
    definida con precisión se puede producir en
    hardware.
  • Esto significa que se pueden construir
    computadoras que directamente en su hardware
    implementen un lenguaje de alto nivel e incluso
    simulen otra máquina por hardware.
  • Una alternativa a la producción estricta en
    hardware de una computadora es la computadora de
    firmware, simulada por un microprograma que se
    ejecuta en una computadora microprogramable de
    hardware especial.
  • El microprograma simula la operación de la
    computadora deseada en la computadora
    microprogramable anfitrión. A este proceso se le
    conoce como emulación y la computadora resultante
    es una máquina virtual.

19
Traductores y Computadoras Simuladas por Software
  • Para facilitar la programación, lo común es
    expresar los programas en un lenguaje de alto
    nivel, el cual es muy cercano al lenguaje del
    programador y muy distante del lenguaje de
    máquina (bajo nivel).
  • El lenguaje de máquina es distinto para cada
    plataforma de hardware.
  • El problema que se enfrenta al implementar un
    lenguaje es, como hacer que se ejecuten programas
    en un lenguaje de alto nivel en diferentes
    computadoras, independientemente de su lenguaje
    de máquina.

20
Existen dos soluciones básicas
  • Traducción (compilación) Se puede construir un
    traductor para traducir programas en el lenguaje
    de alto nivel a programas equivalentes en el
    lenguaje de máquina de la computadora real.
  • Un traductor es un procesador de lenguajes
    que toma programas en un cierto lenguaje fuente y
    los transforma en programas funcionalmente
    equivalentes codificados en otro lenguaje objeto.
  • TIPOS ESPECIALIZADOS DE TRADUCTORES.
  • Ensambladores.
  • Compiladores.
  • Cargador o Editores de Vínculos.
  • Preprocesadores o Macroprocesadores.

21
  • Un ensamblador, es un traductor cuyo lenguaje
    fuente es un lenguaje ensamblador, y cuyo
    lenguaje objeto es un lenguaje de máquina de una
    computadora real específica.
  • Un lenguaje ensamblador es una representación
    simbólica de de un lenguaje de máquina.
  • Un compilador, es un traductor cuyo lenguaje
    fuente es un lenguaje de alto nivel y cuyo
    lenguaje objeto se aproxima al lenguaje de
    máquina de una computadora real, ya sea que se
    trate de un lenguaje ensamblador o alguna
    variedad de lenguaje de máquina.

22
  • Un cargador o editor de vínculos es un traductor
    cuyo lenguaje objeto es un código de máquina real
    y cuyo lenguaje fuente es casi idéntico y está
    compuesto por lo general de programas en lenguaje
    de máquina en forma reubicable junto con tablas
    de datos que especifican puntos donde el código
    reubicable se debe modificar para volverlo
    auténticamente ejecutable. En otras ocasiones se
    le denomina enlazador o ligador.
  • Un preprocesador o macroprocesador es un
    traductor cuyo lenguaje fuente es una forma
    ampliada de un lenguaje de alto nivel ( como C
    ) y cuyo lenguaje objeto es la forma estándar del
    mismo lenguaje.

23
  • Simulación de software En lugar de traducir
    los programas de un lenguaje de alto nivel a un
    lenguaje de máquina, se puede simular una
    computadora cuyo lenguaje de máquina sea el
    len-guaje de alto nivel. Para hacer esto se
    construye un conjunto de programas en el lenguaje
    de máquina de la computadora anfitrión que
    representan los algoritmos (y estructuras de
    datos) necesa-rios para la ejecución de programas
    en el lenguaje de alto nivel.
  • A diferencia de un traductor, el simulador
    ejecuta el programa directamente, no lo traduce.
  • En la práctica pocas veces se usan la
    traducción o la simulación puras, mas bién se
    trabaja con una combinación de ambas. Un programa
    se descompone en varios subprogramas
    independientes que se compilan por separado,
    luego en la fase de carga se combinan con rutinas
    de apoyo (operaciones simuladas por software) en
    tiempos de ejecución para obtener su forma
    ejecutable, la cual se decodifica y se ejecuta
    por simulación.

24
Estructura de la Implementación de un Lenguaje
25
Lenguajes Compilados e Interpretados
  • La cuestión clave en la implementación de un
    lenguaje es saber si la representación base del
    programa durante su ejecución será la del
    lenguaje de máquina de la computadora real en la
    que corra o nó. Esto establece dos tipos de
    implementaciones de lenguajes
  • 1. Lenguajes compilados. Los programas en estos
    lenguajes se traducen al lenguaje de máquina de
    la computadora real antes de ejecutarse, y la
    simulación se usa en las rutinas de apoyo en
    tiempo de ejecución que simulan operaciones
    primitivas que no tienen representación directa
    en el lengua-je de máquina. Ejm C, C, Pascal,
    Ada, FORTRAN.
  • 2. Lenguajes Interpretados. El traductor produce
    un código intermedio, y un software intérprete lo
    ejecuta ya que el intérprete de hardware no lo
    puede ejecutar. Ejm LISP, Prolog, Smalltalk, ML
    y BASIC.

26
Computadoras Virtuales y Tiempos de Enlace
  • Cuando se implementa un lenguaje de
    programación, se define una computadora virtual,
    formada por las estructuras de datos y algoritmos
    en tiempo de ejecución que se emplean en la
    ejecución de programas.
  • El lenguaje de máquina de una computadora
    virtual es el programa ejecutable que produce el
    traductor del lenguaje, el cuál puede adoptar la
    forma de código de máquina autentico si el
    lenguaje se compila o, de manera alternativa,
    puede tener alguna estructura arbitraria si el
    lenguaje se interpreta.

27
Sintaxis y Semántica
  • La sintaxis de un lenguaje de programación es
    el aspecto que ofrece el programa, proporcionar
    las reglas de sintaxis para un lenguaje de
    programación significa decir como se escriben los
    enunciados , declaraciones y otras construcciones
    de lenguaje.
  • La semántica de un lenguaje de programación es
    el significado que se le da a las diversas
    construcciones sintácticas.

28
Computadoras virtuales e implementación de
lenguajes
  • Cuando un lenguaje de programación se
    implementa en una computadora particular, primero
    se determina la computadora virtual que
    representa una interpretación de la semántica del
    lenguaje y luego se construye esa computadora
    virtual a partir de los elementos de hardware y
    software que suministra la computadora
    subyacente. Por ejemplo, se puede determinar que
    una operación de suma de enteros se implemente
    directamente por hardware y que una raíz cuadrada
    se simule en la computadora virtual.
  • También se debe determinar qué se va a hacer
    durante la traducción del programa y qué durante
    su ejecución. Ya que algunas representaciones de
    estructuras de datos u operaciones en la
    computadora virtual, sólo se pueden usar si el
    traductor las definió dentro de la estructura en
    tiempos de ejecución.

29
Jerarquías de Computadoras
  • La computadora virtual que se utiliza cuando
    se hace un programa en algún lenguaje de alto
    nivel, esta formada por una jerarquía de
    computadoras virtuales.
  • El el nivel más bajo se encuentra la máquina
    real. El segundo nivel (o tercero si existe un
    microprograma antes) se encuentra el sistema
    operativo, que provee simulaciones de un cierto
    número de operaciones y estructuras de datos
    nuevas que no proporciona directamente el
    hardware.
  • Luego se encuentra la máquina virtual del
    lenguaje de programación y su traductor que se
    ejecutan en la máquina virtual definida por el
    sistema operativo.
  • Por último, en la parte superior de la
    jerarquía se encuentra la computadora virtual
    implementada por el modelo de ejecu-ción del
    programa codificado en el lenguaje de
    programación.

30
Jerarqía de computadoras virtuales para un
programa en C.
31
Enlace y tiempos de enlace
  • Nombramos enlace de un elemento de programa a
    una característica o propiedad particular a la
    elección de dicha propiedad de entre un conjunto
    de propiedades posibles.
  • El momento durante la formulación o
    procesamiento del programa en el que se hace está
    elección se conoce como tiempo de enlace de esa
    propiedad para ese elemento.
  • Los lenguajes de programación cuentan con
    distintas variedades de enlaces y tiempos de
    enlace.

32
Clases de tiempos de enlace
  • 1.-TIEMPO DE EJECUCIÓN. Tiempo de los enlaces que
    se llevan a cabo durante la ejecución de
    programa, como son los enlaces de las variables a
    sus valores o localidades particulares de
    almacenamiento. Hay varias categorias
  • a) Al entrar a un subprograma o bloque. En
    casi todos los len-guajes las clases importantes
    de enlaces sólo pueden ocurrir en el momento de
    entrar a un subprograma bloque durante la
    ejecución. P. ejm., en C y Pascal el enlace de
    parametros for-males a reales sólo puede ocurrir
    al entrar a un subprograma.
  • b) En puntos arbitrarios durante la
    ejecucion. Ciertos enlaces pueden ocurrir en
    cualquier punto durante la ejecución de un
    programa. P. Ejm., el enlace de variables a
    valores a través de asignación, o como en LISP y
    ML que permiten enlazar nombres a localidades de
    almacenamiento en puntos arbitrarios del programa.

33
  • 2.- TIEMPO DE TRADUCCIÓN o COMPILACION.
  • a) Enlaces elegidos por el programador. El
    programador elige nombres de variables y tipos de
    las mismas, estructuras de enunciados, etc., que
    representan enlaces durante la traducción.
  • b) Enlaces elegidos por el traductor. Ciertos
    enlaces son elegidos por el traductor del
    lenguaje sin que el programador intervenga. P.
    ejm., la asignación de las localidades relativas
    de almacenamiento de un objeto de datos.
  • c) Enlaces elegidos por el cargador. Un programa
    se compone generalmente de varios subprogramas
    que se deben de fusionar en un programa
    ejecutable único. El traductor enlaza variables a
    direcciones relativas dentro del espacio de
    almacenamiento designado para cada subprograma.
    Durante el tiempo de carga (o tiempo de
    vinculación) las direcciones relativas deben de
    ser asignadas a las direcciones reales de la
    máquina real donde se ejecuta el programa.

34
3.- Tiempo de implementación del lenguaje.
Ciertos aspectos de la definición de un lenguaje
pueden ser iguales para todos los programas que
se ejecutan usando una implementación particular
del mismo, pero pueden variar entre las distintas
implementaciones. Por ejemplo, sí un programa usa
una característica que se ha definido durante la
implementación, no se puede asegurar que correrá
en otra implementación del mismo lenguaje. 4.-
Tiempo de definición del lenguaje. Casi toda la
estructu-ra de un lenguaje de programación se
fija cuando el len-guaje se define, en el sentido
de la especificación de las alternativas
disponibles para un programador cuando escribe un
programa. Por ejemplo, todos los tipos de datos,
estructuras de programa, etc., suelen fijarse en
el tiempo de definición del lenguaje.
35
Para ilustrar la diversidad de enlaces y tiempos
de enlace, analice-mos el siguiente enunciado de
asignación x x 10 Tenemos enlaces y tiempos
de enlace en los elementos siguientes 1. El
Conjunto de posibles tipos para la variable X. Se
suele fijar durante la definición del lenguaje.
Sí el lenguaje puede dejar que cada programa
defina tipos nuevos, el conjunto de posibles
tipos para X se fija durante la traducción. 2.
Tipo de variable X. El tipo de datos elegido para
la variable X se suele fijar durante la
traducción, a través de una declaración explícita
en el programa. En algunos lenguajes, como
Smalltalk y Prolog, el tipo de datos de X puede
enlazarse sólo durante la ejecución a través de
la asignación de un valor de un tipo particular a
X. En estos len-guajes, X se puede referir a un
entero en un punto y a una cadena en un punto
posterior del mismo programa.
36
3. Conjunto de valores posibles para la variable
X. Esta determinado por el intervalo de valores
que se pueden representar y manipular en la
computadora virtual que define el lenguaje, el
cual a su vez se relaciona con el conjunto de
valores que se pueden representar en la
computadora de hardware subyacente. Así pues, el
conjunto de valo-res posibles para X se puede
determinar durante la implementación del
lenguaje las distintas implementaciones del
lenguaje pueden permitir diferentes intervalos de
valores posibles para X. De manera alternativa,
se puede determinar en el tiempo de carga, de
acuerdo con el hardware que ejecutará el
programa. 4. Valor de la variable X. En cualquier
punto durante la ejecución del programa, un valor
particular está enlazado a la variable X. De modo
habitual, este valor se determina durante la
ejecución a través de la asignación de un valor a
X. La asignación X X 10 cambia el enlace de
X sustituyendo su valor antiguo por uno nuevo que
es 10 más que el antiguo.
37
5. Representación de la constante 10. El entero
10 tiene a la vez una representación como
constante en los programas, usando la cadena 10,
esta elección se hace generalmente en el tiempo
de definición del lenguaje y una representación
durante la ejecución, casi siempre como una serie
de bits, que se hace en el tiempo de
implementación del lenguaje. 6. Propiedades del
operador . En un lenguaje compilado el símbolo
se enlaza a un conjunto de operaciones de adición
durante la definición del lenguaje cada
operación de adición del conjunto se define
durante la implementación del lenguaje, cada uso
particular del símbolo en un programa se enlaza
a una operación particular de adición durante la
traducción, y el valor particular de cada
operación particular de adición para sus
operandos se determina sólo durante la ejecución.
Este ejemplo representa los posibles enlaces y
tiempos de enlace en diversos lenguajes de
programación. Sin embargo, también es posible
elegir muchos otros enlaces y tiempos de enlace.
38
Importancia de los tiempos de enlace
  • Muchas de las diferencias más importantes y
    sutiles entre lenguajes implican diferencias en
    cuanto a tiempos de enlace.
  • Se dice que un lenguaje, donde casi todos los
    enlaces se efectúan durante la traducción, al
    principio del procesamiento de un programa, tiene
    enlace temprano un lenguaje con enlace tardío,
    demora casi todos los enlaces hasta el tiempo de
    ejecución.
  • Las ventajas y desventajas del enlace temprano
    respecto al enlace tardío giran en torno al
    conflicto entre eficiencia y flexibilidad. En
    len-guajes donde se persigue la eficiencia de
    ejecución, como FORTRAN, Pascal y C, es común
    proyectar el lenguaje de manera que se puedan
    efectuar tantos enlaces como sea posible durante
    la traducción. En los casos donde la flexibilidad
    es lo se persigue, como en ML y LISP, casi todos
    los enlaces se retrasan hasta el tiempo de
    ejecución para que puedan adaptarse a los datos
    introducidos durante la ejecución.
  • En un lenguaje diseñado para ofrecer a la vez
    ejecución eficiente y flexibilidad, como Ada, se
    suele disponer de múltiples opciones que permiten
    elegir tiempos de enlace.

39
Tiempos de enlace e implementaciones de lenguajes
  • Un lenguaje se proyecta de tal modo que un
    enlace particular se puede efectuar, por ejemplo,
    durante la traducción, pero el momento efectivo
    en el cual el enlace se lleva a cabo está
    definido de hecho sólo por la implementación del
    lenguaje.
  • P. ejm., Pascal se diseñó para permitir que el
    tipo de variables se determine durante la
    compilación, pero una implementación particular
    de Pascal puede realizar la verificación de tipos
    durante la ejecución.
  • En general, un diseño de lenguaje especifica
    el momento más cer-cano durante el procesamiento
    del programa en el cual es posible un enlace
    particular. Sin embargo, por lo general casi
    todas las imple-mentaciones del lenguaje efectúan
    la mayoría de los enlaces al mismo tiempo. Si el
    lenguaje está proyectado para permitir enlaces
    durante la compilación, entonces el retraso de
    estos enlaces hasta el tiempo de ejecución
    conducirá probablemente a una ejecución menos
    eficien-te sin tener ganancia de flexibilidad,
    como en el ejemplo anterior de verificación de
    tipos en tiempo de ejecución en Pascal. De hecho,
    resulta conveniente efectuar los enlaces lo más
    pronto posible.

40
Paradigmas en Lenguajes
  • Además de conocer la máquina virtual que va a
    proporcionar el almacenamiento de datos en tiempo
    de ejecución y las operaciones para la ejecución
    de un programa traducido y el hardware dónde se
    va a correr realmente el programa traducido a
    código ejecutable, se tiene que analizar el
    modelo de computación que maneja el lenguaje de
    programación.
  • Es decir, el modelo de computación se plantea
    preguntas como Cómo se ejecuta el programa?
    Qué clase de construcciones suministra el
    programa?
  • Existen dos modelos básicos de computación que
    describen a los lenguajes de programación
    actuales el Imperativo y el Declarativo.

41
Lenguajes Imperativos
  • Los lenguajes imperativos o de procedimiento
    son lenguajes controlados por mandatos u
    orientados a enunciados (instrucciones). Un
    programa se compone de una serie de enunciados, y
    la ejecución de cada enunciado hace que el
    intérprete cambie el valor de una localidad o más
    en su memoria, es decir, que pase a un nuevo
    estado. La sintaxis de esta clase de lenguajes
    tiene por lo general la forma
  • enunciado1
  • enunciado2
  • ...
  • enunciadoN
  •  

42
Lenguajes Imperativos ...
  • La memoria consiste en una colección de
    celdas, y la ejecución del enunciado (por
    ejemplo, sumar dos variables para obtener una
    tercera) se puede representar como acceder a las
    localidades de memoria (las celdas), combinar los
    valores contenidos en las celdas en alguna forma
    y guardar el resulta-do en la nueva localidad. El
    desarrollo de programas consiste en construir los
    estados de máquina sucesivos (valores en las
    celdas) que se necesitan para llegar a la
    solución. Muchos lenguajes (por ejemplo, C, C,
    FORTRAN, ALGOL, PL/I, Pascal, Ada, Smalltalk,
    COBOL) manejan este modelo.
  •  
  • En general, este modelo procede del hardware de
    la computadora convencional que ejecuta
    instrucciones en forma secuencial.

43
Lenguajes de Programación y Modelos de Computación
44
  • Lenguajes Estructurados en Bloques . Un lenguaje
    con bloques de programa, divide el estado en
    bloques que representan subrutinas y datos
    comunes. Los bloques se pueden pensar como un
    archivo plano, donde cada bloque sigue a sus
    predecesores. El término estructuras en bloques
    se refiere a los ámbitos anidados. Es decir, los
    bloques pueden estar anidados dentro de otros
    bloques, y pueden contener sus propias variables.
    El estado representa una pila con una referencia
    al bloque actualmente activo en la parte
    superior. En los lenguajes estructurados en
    bloques, el procedimiento es el principal bloque
    de construcción de los programas. Ejemplos de
    lenguajes son Ada, ALGOL 60, Pascal, ALGOL 68 y
    C.

45
Lenguajes Basados en Objetos El paradigma basado
en objetos describe los lenguajes que soportan
objetos en interacción. Un objeto es un grupo de
procedimientos que comparten un estado. Puesto
que los datos son también parte de un estado, los
datos y todos los procedimientos o funciones que
se le aplicarán son encapsulados en un solo
objeto. Los ejemplos son Ada, donde los objetos
son llamados paquetes Modula, donde se denominan
módulos y Smalltalk, donde los objetos se llaman
(correctamente) objetos. En C, una colección de
objetos se agrupa en una clase.  Lenguajes
Orientado a Objetos son aquellos lenguajes
basados en objetos que soportaban clases de
objetos y la herencia de atributos de un objeto
padre por parte de sus hijos.  
46
Lenguajes para la Programación Concurrente. La
programa-ción concurrente está asociada con más
de un CPU funcionan-do simultáneamente en
paralelo, compartiendo o no datos. Sin embargo,
los CPU múltiples no son esenciales para este
para-digma. Lo que es esencial es que el trabajo
sobre un problema en particular pueda ser
compartido. En Ada o en Java dos o más
procedimientos se ejecuten de manera
independiente. La programación concurrente se
divide en dos categorías, sistemas distribuidos
y sistemas con memoria compartida. El término
distribuido se refiere a lenguajes para sistemas
acoplados débilmente que soportan que un programa
se ejecute de manera simultánea y se comunique a
través de paso de mensajes mediante un canal de
comunicación, tal como un enlace de punto a punto
o una red de área local.
47
Un sistema acoplado fuertemente o de memoria
compartida, permite que más de un proceso en
ejecución tenga acceso a la misma ubicación de
memoria. Un lenguaje asociado con el sistema debe
sincronizar el uso compartido de memoria, de modo
que sólo un proceso escriba a una variable
compartida a la vez, y de modo que un proceso
pueda esperar hasta que ciertas condiciones se
satisfagan por completo antes de continuar la
ejecución. La memoria compartida tiene la ventaja
de la velocidad, porque no se necesita pasar
mensajes. Recientemente, se han hecho trabajos en
lenguajes que difuminan la distinción entre los
paradigmas acoplados débil y fuertemente.
Lenguajes tales como PROLOG concurrente, Linda y
Occam tienen algunas características de ambos.
48
Lenguajes Declarativos
Un lenguaje declarativo es aquel en el que un
programa especifica una relación o función.
Cuando se programa en el estilo declarativo, no
se hacen asignaciones a variables del programa.
El intérprete o compilador para el lenguaje en
particular administra la memoria
independientemente del programador. Lenguajes
Funcionales. Los lenguajes aplicativos o
funcionales en vez de examinar la serie de
estados a través de los cuales debe pasar la
máquina para obtener una respuesta, se preguntan
Cuál es la función que se debe aplicar al estado
de máquina inicial accediendo al conjunto inicial
de variables y combinándolas en formas
específicas para obtener una respuesta?  
49
El desarrollo de programas procede a través
del desarrollo de funciones a partir de funciones
previamente desarrolladas para construir
funciones más complejas que manipulan el conjunto
inicial de datos hasta que la función final se
puede usar para calcular una respuesta a partir
de los datos iniciales. Así, la programación
funcional proporciona la capacidad para que un
programa (función) se modifique a sí mismo, es
decir, aprenda. En general, la sintaxis de esta
clase de lenguajes es similar a  funciónN
(....función2 (función1 (datos))..)  LISP ,
Scheme y ML son lenguajes funcionales manejan
este modelo de programación.
50
Lenguajes de Programación Lógica. La
programación lógica está basada en el cálculo de
predicados, el cual proporciona axiomas y reglas
de modo que se pueden deducir nuevos hechos a
partir de otros hechos conocidos. Un programa
basado en la lógica se compone de una serie de
axiomas o hechos, reglas de inferencia y un
teorema o cuestión por demostrarse. La salida es
verdadera si los hechos soportan o apoyan la
cuestión, y es falsa en el caso contrario.
Prolog es el ejemplo típico de este tipo de
lenguajes.
51
Lenguajes de base de datos. Las propiedades
que distinguen a los lenguajes diseñados para
tratar con bases de datos son la persistencia y
la administración de cambios. Las entidades de
base de datos no desaparecen después de que
finaliza un programa, sino que permanecen activas
durante tiempo indefinido como fueron
estructuradas originalmente. Puesto que la base
de datos, una vez organizada, es permanente,
estos lenguajes también deben soportar los
cambios. Los datos pueden cambiar y así también
pueden hacerlo las relaciones entre objetos o
entidades de datos.  Un sistema de administración
de base de datos incluye un lenguaje de
definición de datos (DDL) para describir una
nueva colección de hechos, o datos, y un lenguaje
de manipulación de datos (DML) para la
interacción con las bases de datos existentes.
SQL es un ejemplo de este tipo de lenguajes. 
52
Clasificación de los Lenguajes de Programación
Write a Comment
User Comments (0)
About PowerShow.com