Sei sulla pagina 1di 35

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Introduccin al estudio de los lenguajes de programacin


Amads Antonio Martnez Morales
Departamento de Computacin Facultad Experimental de Ciencias y Tecnologa Universidad de Carabobo

Clases 01 y 02

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Agenda
1 2
Conceptos bsicos Premisas fundamentales Deniciones Evolucin histrica Lenguajes de mquina Lenguajes ensamblador Lenguajes de alto nivel El arte del diseo de lenguajes Cantidad de lenguajes Cualidades de un buen lenguaje Principios de diseo de lenguajes Razones para estudiar lenguajes de programacin Clasicacin de los lenguajes Modelos de programacin Modelo de programacin imperativa Modelo de programacin funcional Modelo de programacin lgica Paradigmas de programacin Estrategias para la implementacin de lenguajes Traduccin e Interpretacin Preprocesamiento Linking

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Premisas fundamentales Deniciones

Conceptos bsicos
Premisas fundamentales

El diseo y la implementacin de lenguajes de programacin son conceptos fuertemente relacionados La mayora de los lenguajes de programacin que se han diseado e implementado, se basan en un pequeo nmero de conceptos La mejor manera de aprender a programar es programando, es decir, utilizar un lenguaje de programacin para resolver problemas

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Premisas fundamentales Deniciones

Conceptos bsicos
Deniciones

Un lenguaje de programacin es una notacin para la escritura de programas Un programa es la especicacin de un cmputo (computation) Un cmputo es la aplicacin de una secuencia de operaciones a un valor para obtener otro valor Los lenguajes de programacin ofrecen estructuras (denominadas constructores) para organizar los cmputos

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Premisas fundamentales Deniciones

Conceptos bsicos
Deniciones

La descripcin completa de un lenguaje de programacin incluye tres facetas: la sintaxis, la semntica y la pragmtica La sintaxis se reere a las maneras en las que se pueden combinar los smbolos de un lenguaje de programacin para crear programas La semntica describe el comportamiento de un computador cuando ejecuta un programa de un lenguaje de programacin La pragmtica se reere a los aspectos de implementacin de un lenguaje de programacin

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Premisas fundamentales Deniciones

Conceptos bsicos
Deniciones: Sintaxis

La sintaxis se enfoca en las notaciones concretas utilizadas para representar frases de un lenguaje de programacin Considere una frase que indique la suma del producto de v y w con el cociente de y y z :
Como expresin matemtica: v w + y /z En LISP: (+ ( v w) (/ y z)) En una calculadora postja: v enter w enter y enter z enter / + En una hoja de clculo? Como un rbol binario?

La sintaxis de un lenguaje de programacin especica cules notaciones concretas en el lenguaje son legales y cul es la university-logo estructura abstracta asociada con cada notacin legal
Amads Antonio Martnez Morales Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Premisas fundamentales Deniciones

Conceptos bsicos
Deniciones: Semntica

La semntica especica la correspondencia (mapping) entre la estructura abstracta de una frase en un lenguaje de programacin y el signicado de esa frase Este signicado est determinado por el contexto de un sistema de interpretacin Una misma frase puede tener varios signicados posibles

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Premisas fundamentales Deniciones

Conceptos bsicos
Deniciones: Semntica

Considere el rbol de sintaxis asociado con la expresin matemtica ( (+ 1 11) 10)


Cul es la interpretacin si se utiliza el sistema de numeracin decimal, + representa al operador suma y denota el operador multiplicacin? Cmo se modicara esta interpretacin si:
representase el operador de exponenciacin Los operandos se interpretasen en un sistema de numeracin binario Los nmeros impares representasen el valor verdadero y los pares el valor falso, considerando + como disyuncin y como conjuncin

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Premisas fundamentales Deniciones

Conceptos bsicos
Deniciones: Pragmtica

La pragmtica se enfoca en los detalles de cmo se computa el signicado de una expresin Se considera el uso efectivo de varios recursos (tiempo, espacio, acceso a dispositivos) Una misma expresin puede tener varias estrategias de evaluacin posibles La pragmtica est relacionada con aspectos tales como la usabilidad, aplicabilidad, seguridad y eciencia Considere la evaluacin de la siguiente expresin: (/ ( (+ a b) ( 2 3)) (+ a b))

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Lenguajes de mquina Lenguajes ensamblador Lenguajes de alto nivel

Evolucin histrica
Lenguajes de mquina

Los primeros computadores electrnicos ocupaban gran cantidad de supercie (en m2 ), consuman mucha energa elctrica y eran muy costosas Los programadores trabajaban directamente en lenguaje de mquina Un lenguaje de mquina es una secuencia de bits que controla directamente el funcionamiento de un procesador La especicacin de programas a este nivel de detalle es una tarea tediosa y complicada

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Lenguajes de mquina Lenguajes ensamblador Lenguajes de alto nivel

Evolucin histrica
Lenguajes de mquina

Considere el programa que calcula el mximo comn divisor de dos enteros utilizando el algoritmo de Euclides, escrito en lenguaje de mquina (expresado en notacin hexadecimal) para el conjunto de instrucciones del procesador x86
55 89 e5 53 00 00 39 c3 75 f6 89 1c 83 ec 04 83 74 10 8d b6 24 e8 6e 00 e4 f0 e8 31 00 00 00 00 00 00 8b 5d 00 00 00 89 39 c3 7e 13 fc c9 c3 29 c3 e8 2a 00 29 c3 39 c3 d8 eb eb 90

A medida que comenzaron a requerirse programas ms grandes, se hizo evidente la necesidad de utilizar otra notacin university-logo para la escritura de programas
Amads Antonio Martnez Morales Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Lenguajes de mquina Lenguajes ensamblador Lenguajes de alto nivel

Evolucin histrica
Lenguajes ensamblador

Los lenguajes ensamblador fueron inventados para permitir que las operaciones sean expresadas utilizando mnemnicos Los lenguajes ensamblador fueron diseados como una correspondencia uno a uno entre mnemnicos e instrucciones de lenguaje de mquina La traduccin de mnemnicos a lenguaje de mquina se convirti en tarea de un programa de sistema denominado assembler Sin embargo, la programacin continu siendo una labor orientada a las mquinas Cada tipo de computador tena su propio lenguaje ensamblador
Amads Antonio Martnez Morales Introduccin

university-logo

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Lenguajes de mquina Lenguajes ensamblador Lenguajes de alto nivel

Evolucin histrica
Lenguajes ensamblador

Considere el programa que calcula el mximo comn divisor de dos enteros utilizando el algoritmo de Euclides, escrito en lenguaje ensamblador del procesador x86
pushl movl pushl subl andl call movl call cmpl je A: cmpl %ebp %esp, %ebp %ebx $4, %esp $-16, %esp getint %eax, %ebx getint %eax, %ebx C %eax, %ebx jle subl B: cmpl jne C: movl call movl leave ret D: subl jmp D %eax, %ebx %eax, %ebx A %ebx, (%esp) putint -4(%ebp), %ebx

%ebx, %eax B

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Lenguajes de mquina Lenguajes ensamblador Lenguajes de alto nivel

Evolucin histrica
Lenguajes de alto nivel

Dadas las limitaciones de los lenguajes ensamblador, los usuarios comenzaron a requerir lenguajes independientes de las mquinas, especialmente en clculo numrico Este requerimiento llev al desarrollo de Fortran a mediados de 1950s, el primer lenguaje de programacin de alto nivel. Fortran fue seguido inmediatamente por Lisp y Algol La traduccin de un lenguaje de alto nivel a lenguaje de mquina o ensamblador se convirti en tarea de un programa de sistema denominado compilador

Hoy existen miles de lenguajes de alto nivel (1442 de ellos categorizados en http://www.99-bottles-of-beer.net/), university-logo y continan emergiendo otros nuevos
Amads Antonio Martnez Morales Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Lenguajes de mquina Lenguajes ensamblador Lenguajes de alto nivel

Evolucin histrica
Lenguajes de alto nivel

Considere el programa que calcula el mximo comn divisor de dos enteros utilizando el algoritmo de Euclides, escrito en lenguaje C
#include <stdio.h> int gcd(int a, int b) { while (a != b) { if (a > b) a = a - b; else b = b - a; } return a; } int main() { int i, j; scanf("%d %d", &i, &j); printf("%d\n", gcd(i, j)); }
Amads Antonio Martnez Morales Introduccin

university-logo

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Cantidad de lenguajes Cualidades de un buen lenguaje Principios de diseo de lenguajes Razones para estudiar lenguajes de programacin

Diseo de lenguajes
Cantidad de lenguajes

Por qu hay tantos lenguajes de programacin? Esta pregunta tiene varias respuestas posibles:
Evolucin: la constante bsqueda de mejores maneras para hacer las cosas Propsitos especcos: los lenguajes de programacin pueden ser utilizados para varias tareas, pero algunos fueron diseados para nes especcos en los que se destacan Preferencias personales: los gustos de los usuarios inuyen en el lenguaje de programacin que utilizan. Es poco probable lograr un lenguaje de programacin de aceptacin universal

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Cantidad de lenguajes Cualidades de un buen lenguaje Principios de diseo de lenguajes Razones para estudiar lenguajes de programacin

Diseo de lenguajes
Cualidades de un buen lenguaje

Qu hace que un lenguaje de programacin sea exitoso? Esta pregunta tambin tiene varias respuestas posibles:
Poder expresivo Facilidad de uso para el usuario principiante Simplicidad en su implementacin Estandarizacin Cdigo abierto (open source) Excelentes compiladores Libreras y herramientas de desarrollo Economa, patrocinio e inercia

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Cantidad de lenguajes Cualidades de un buen lenguaje Principios de diseo de lenguajes Razones para estudiar lenguajes de programacin

Diseo de lenguajes
Principios de diseo de lenguajes

Completitud computacional: un lenguaje de programacin debe ser diseado para facilitar la lectura y escritura por parte de sus usuarios y garantizar la ejecucin eciente en el hardware disponible Claridad: los conceptos utilizados por un lenguaje de programacin deberan ser bien denidos, y el resultado de una seccin particular de cdigo fcilmente predecible Simplicidad: un lenguaje de programacin debera estar fundamentado en la menor cantidad de conceptos bsicos posibles

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Cantidad de lenguajes Cualidades de un buen lenguaje Principios de diseo de lenguajes Razones para estudiar lenguajes de programacin

Diseo de lenguajes
Principios de diseo de lenguajes

Ortogonalidad: un conjunto relativamente pequeo de conceptos bsicos pueden ser combinados en un nmero relativamente pequeo de maneras para generar las estructuras de datos y de control de un lenguaje Regularidad: un conjunto de elementos es regular con respecto a una condicin si y slo si esa condicin es aplicable a cada elemento del conjunto Extensibilidad: los nuevos elementos sintcticos de un lenguaje de programacin deberan ser generados de una manera sistemtica a partir de los conceptos bsicos denidos

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Cantidad de lenguajes Cualidades de un buen lenguaje Principios de diseo de lenguajes Razones para estudiar lenguajes de programacin

Diseo de lenguajes
Razones para estudiar lenguajes de programacin

Mejorar las bases para la seleccin adecuada de lenguajes de programacin, de acuerdo con la tarea a resolver Incrementar la habilidad para el aprendizaje de nuevos lenguajes de programacin Entendimiento de caractersticas oscuras Seleccionar entre distintas alternativas para expresar una idea Hacer buen uso de debuggers, assemblers, linkers y herramientas relacionadas Simular caractersticas tiles en lenguajes de programacin que carecen de ellas Mejor uso de la teora de lenguajes, cuando se requiera
Amads Antonio Martnez Morales Introduccin

university-logo

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Modelos de programacin Modelo de programacin imperativa Modelo de programacin funcional Modelo de programacin lgica Paradigmas de programacin

Clasicacin de los lenguajes


Modelos de programacin

Un modelo de programacin:
Representa un enfoque particular o losofa para la construccin de software Dene una manera de conceptualizar lo que signica realizar un cmputo y cmo deberan estar organizadas y estructuradas las tareas que sern llevadas a cabo en un computador

Los modelos de programacin dieren entre s en los conceptos utilizados para representar los elementos de un programa y las operaciones que utiliza para denir un cmputo En computacin existen tres modelos bsicos de programacin: imperativo, funcional y lgico

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Modelos de programacin Modelo de programacin imperativa Modelo de programacin funcional Modelo de programacin lgica Paradigmas de programacin

Clasicacin de los lenguajes


Modelo de programacin imperativa

El modelo imperativo consiste de un estado y la operacin de asignacin para modicar ese estado Los programas consisten de secuencias de comandos y los cmputos son cambios de estado Es el modelo que toma ms en cuenta las consideraciones del hardware en el cual se ejecutan los programas

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Modelos de programacin Modelo de programacin imperativa Modelo de programacin funcional Modelo de programacin lgica Paradigmas de programacin

Clasicacin de los lenguajes


Modelo de programacin funcional

El modelo funcional consiste de un conjunto de valores, funciones y la operacin de aplicacin de funcin Las funciones pueden ser compuestas con otras funciones, pueden recibir otras funciones como argumentos y pueden retornar funciones como resultado Los programas consisten de deniciones de funciones y los cmputos son aplicaciones de funciones a valores Desde el punto de vista terico, es el modelo con ms tiempo en desarrollo

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Modelos de programacin Modelo de programacin imperativa Modelo de programacin funcional Modelo de programacin lgica Paradigmas de programacin

Clasicacin de los lenguajes


Modelo de programacin lgica

El modelo lgico consiste de un conjunto de relaciones y la operacin de inferencia lgica Los programas consisten de deniciones de relaciones y los cmputos son inferencias Este modelo es importante porque formaliza el proceso de razonamiento

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Modelos de programacin Modelo de programacin imperativa Modelo de programacin funcional Modelo de programacin lgica Paradigmas de programacin

Clasicacin de los lenguajes


Paradigmas de programacin

Paradigmas (modelos secundarios) de programacin: orientado a objetos y concurrente Los programas en el paradigma orientado a objetos consisten de un conjunto de objetos que intercambian mensajes para realizar los cmputos Cada objeto est conformado por valores y operaciones que determinan los mensajes a los que responde El paradigma orientado a objetos puede ser implementado en cualquiera de los modelos bsicos de programacin

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Modelos de programacin Modelo de programacin imperativa Modelo de programacin funcional Modelo de programacin lgica Paradigmas de programacin

Clasicacin de los lenguajes


Paradigmas de programacin

El paradigma concurrente est relacionado con mecanismos para la sincronizacin y comunicacin entre procesos Los programas en el paradigma concurrente consisten de mltiples procesos o tareas que intercambian informacin Los cmputos pueden realizarse de manera concurrente o en cualquier orden El paradigma concurrente puede ser implementado en cualquiera de los modelos bsicos de programacin

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Traduccin e Interpretacin Preprocesamiento Linking

Estrategias para la implementacin de lenguajes


Traduccin e Interpretacin

Bajo el enfoque de traduccin, un programa escrito en un lenguaje S es reescrito en un programa equivalente escrito en un lenguaje T Esta reescritura es realizada por un traductor, un programa escrito en un lenguaje de implementacin Un traductor se denomina compilador cuando traduce de un lenguaje de alto nivel a un lenguaje de bajo nivel

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Traduccin e Interpretacin Preprocesamiento Linking

Estrategias para la implementacin de lenguajes


Traduccin e Interpretacin

Figura: Enfoque de traduccin

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Traduccin e Interpretacin Preprocesamiento Linking

Estrategias para la implementacin de lenguajes


Traduccin e Interpretacin

Bajo el enfoque de interpretacin, un programa escrito en un lenguaje S es ejecutado directamente por un intrprete o interpretador Un interpretador es un programa escrito en un lenguaje de implementacin Un interpretador generalmente ejecuta, comando por comando, el programa escrito en el lenguaje S , traduce si es necesario, pero no almacena el resultado de esta traduccin Un interpretador implementa una mquina virtual, cuyo lenguaje de mquina es el lenguaje S

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Traduccin e Interpretacin Preprocesamiento Linking

Estrategias para la implementacin de lenguajes


Traduccin e Interpretacin

Figura: Enfoque de interpretacin

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Traduccin e Interpretacin Preprocesamiento Linking

Estrategias para la implementacin de lenguajes


Traduccin e Interpretacin

Algunos lenguajes de programacin implementan un enfoque hbrido, que consiste en una combinacin de traduccin con interpretacin

Figura: Enfoque hbrido


Amads Antonio Martnez Morales Introduccin

university-logo

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Traduccin e Interpretacin Preprocesamiento Linking

Estrategias para la implementacin de lenguajes


Preprocesamiento

Un preprocesador es un traductor inicial que se encarga de:


Eliminar comentarios y espacios en blanco Agrupar caracteres en tokens (palabras clave, identicadores, nmeros y smbolos) Expandir macros Identicar estructuras sintcticas de alto nivel (ciclos y subrutinas)

El objetivo del preprocesador consiste en producir cdigo intermedio que pueda ser compilado o interpretado de manera ms eciente

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Traduccin e Interpretacin Preprocesamiento Linking

Estrategias para la implementacin de lenguajes


Preprocesamiento

Figura: Enfoque de preprocesamiento


Amads Antonio Martnez Morales Introduccin

university-logo

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Traduccin e Interpretacin Preprocesamiento Linking

Estrategias para la implementacin de lenguajes


Linking

Existen programas que incluyen libreras de subrutinas que no son parte del programa original Las libreras de subrutinas pueden verse como una extensin del conjunto de instrucciones de hardware En estos casos, el compilador se apoya en un programa separado, que se denomina linker El linker se encarga de incluir las libreras requeridas en el programa nal

university-logo

Amads Antonio Martnez Morales

Introduccin

Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes

Traduccin e Interpretacin Preprocesamiento Linking

Estrategias para la implementacin de lenguajes


Linking

university-logo

Figura: Enfoque de linking


Amads Antonio Martnez Morales Introduccin

Potrebbero piacerti anche