Lenguajes de Programación I - LDC

Anuncio
Lenguajes de Programación I
Prof. Wilmer Pereira
Universidad Simón Bolívar
Primeros pasos en los
lenguajes de alto nivel
El primer computador (1940) tenía el poder cálculo de una calculadora actual
Primer lenguaje de alto nivel FORTRAN y LISP con traducción directa del
lenguaje alto nivel al lenguaje de máquina.
¿Por qué hay tantos lenguajes?
Evolución de las instrucciones o primitivas de uso:
Ciclos estilo lenguajes ensamblador (goto)
Ciclos estructurados (while, repeat)
Orientación a objetos
Programación concurrente ...
Especificidad en función a la aplicación a programar:
C como lenguajes cercano al bajo nivel
LISP para manipulación de símbolos
Prolog para aplicaciones con relaciones lógicas en la data
Preferencias personales:
Recursión vs iteración
Apuntadores o no ...
¿Qué hace a un lenguaje exitoso?
Poder expresivo: aunque todos tienen el poder de computo de una
Máquina de Turing ... hasta el lenguaje ensamblador
Facilidad de uso para los novatos: LOGO es intencionalmente sencillo
Para algunos BASIC y PASCAL también lo son ...
Estandarización: Aunque los diferentes desarrolladores agregan ciertas
características casi todos respetan el mínimo del estandar.
Código abierto: Casi todos los lenguajes tiene al menos un compilador o
interpretador
Buenos compiladores: FORTRAN es reconocido en este aspecto
Apadrinamiento: ADA por ejemplo fue impuldado, sin mucho, exito por
el departamento de defensa. En cambio JAVA tuvo exito
siendo una propuesta de una compañía privada ...
Tipos de Lenguajes ...
Inicialmente
Inicialmentese
seanteponen
anteponenlos
losdeclarativos
declarativosvs
vslos
losimperativos.
imperativos.
Los
Losdeclarativos
declarativosse
seconsideran
considerande
demás
másalto
altonivel
nivel…
…
…
…pero
perolos
losimperativos
imperativosofrecen
ofrecen mejor
mejorrendimiento
rendimiento
Imperativos dan énfasis al como:
– Estructurados bajo el modelo Von Neumann (C)
– Orientados a Objetos inspirados en simula (JAVA)
– Orientados a Strings con énfasis en prototipado rápido (PERL)
Declarativos se centran en el que:
– Funcionales inspirado en lambda cálculo (HASKELL)
– Lógicos provenientes del cálculo de predicado simplificado (PROLOG)
– Flujos de datos inherentemente concurrente (VAL)
También están lenguajes paralelos o concurrente vs los secuenciales.
que son independiente de la clasificación anterior
En muchos casos se estila tener librerías que permiten desarollar
aplicaciones concurrentes en lenguajes secuenciales
También depende de la arquitectura (Cluster, Grid, ...)
Máximo común divisor ...
PROLOG:
mcd(A,B,X) :- A @> B, C is A - B, mcd(C,B,X).
mcd(A,B,X) :- B @> A, C is B - A, mcd(A,C,X).
mcd(A,A,A).
HASKELL:
mcd
mcd
|
|
|
C:
:: Int ->
a b
(a == b)
(a > b)
otherwise
Int -> Int
= a
= mcd (a-b) b
= mcd a (b-a)
#include <stdio.h>
#include <stdlib.h>
int gcd (int a, int b) {
printf("El MCD de a = %d y b = %d es ",a,b);
while (a!=b)if (a>b) a=a–b; else b=b-a;
printf("%d.\n",a);
}
main (int argc, char **argv) {
gcd(atoi(argv[1]),atoi(argv[2]));
}
¿ Por qué estudiar diferentes
lenguajes de programación?
Entender aspectos obscuros ... herencia múltiple, union, etc. Esto hace más fácil
comprenderlo cuando se desean utilizar
Saber seleccionar entre diferentes maneras de escribir un proceso o instrucción
para generar código más eficiente
Hacer uso eficiente de depuradores (debuggers), enlazadores. Saber ciertos
detalles permite descubrir errores dificiles.
Usar buenas prácticas o funcionalidades en lenguajes que no las ofrecen. Por
ejemplo, armar código estructurado en FORTRAN o usar iteradores.
Hacer buen uso de la tecnología de lenguajes
Filosofías de traducción ...
Los
Loslenguajes
lenguajesde
deprogramación
programaciónpueden
puedenser
sercompilados,
compilados,
interpretados
interpretadosoobajo
bajoun
unparadigma
paradigmade
demáquina
máquinavirtual
virtual
Compilación pura:
– El código fuente es traducido directamente a lenguaje de máquina
– El programa objeto opera indepedientemente sobre el procesador
– Son más eficiente a cambio de un costo previo de procesamiento
Interpretación pura:
– La traducción se realiza paso a paso, ejecutandose directamente
sobre el procesador
– Cada línea es analizada y ejecutada con sus entradas y salidas
– Los programas tienen menos velocidad de ejecución pero son más
flexible en el diagnóstico
Compilación + Interpretación
– El código fuente es traducido a una representación intermedia
de más bajo nivel
– El código intermedio es interpretado por una máquina que ejecuta
sobre el procesador
– La calidad de la traducción y la expresividad del lenguaje intermedio
combinado con la implantación eficiente de la máquina virtual,
permite un buen compromiso:
velocidad de ejecución y velocidad de desarrollo
Compilación ...
Código fuente
Compilador
Entrada
Código Objeto
Salida
Interpretación ...
Código fuente
Interpretador
Entrada
Salida
Compilación + Interpretación ...
Código fuente
Compilador
Código Intermedio
Interpretador
Entrada
Salida
Compilación + Librería + Enlazador ...
Código fuente
Compilador
En un lenguaje puramente compilado,
el enlazador resuelve las dependencias
estáticamente.
En un lenguaje puramente interpretado,
el enlazador resuelve las dependencias
dinámicamente, agregando las librerías
durante la ejecución.
Código fuente
incompleto
Enlazador
Librerías
Código objeto
Preprocesador ...
Código fuente
Expande macros
Preprocesador
Enriquece código fuente
Elimina código condicionado
Código fuente
modificado
Compilador
Código objeto
¿Cómo escribir un compilador del
lenguajes con el propio?
Niklaus
NiklausWirth
Wirthadaptó
adaptópara
paradistribuir
distribuirPASCAL
PASCAL
una
unaestrategia
estrategiaconocida
conocidacomo
comobootstrapping
bootstrapping
BOOTSTRAPPING:
En vez de escribir compilador de código fuente a ensamblador, escribir un
interpretador que es más sencillo
Ahora escribir un compilador del lenguaje X en X
Correr el compilador en el intrepretador dandole como entrada el compilador anterior
El programa objeto opera indepedientemente sobre el procesador
son más eficiente a cambio de un costo previo de procesamiento
Técnica de PASCAL:
Compilador para PASCAL escrito en PASCAL que genera p-code
Compilador para PASCAL traducido en p-code
Interpretador de p-code escrito en PASCAL
Ahora basta con traducir ese interpretador en un lenguaje local ...
Descargar