Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Clases 01 y 02
university-logo
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
Introduccin
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
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
Introduccin
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
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
Introduccin
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
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
Introduccin
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
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
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
Introduccin
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
Conceptos bsicos
Deniciones: Semntica
university-logo
Introduccin
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
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
Introduccin
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
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
Introduccin
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
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
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
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
Introduccin
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Introduccin
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
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
Introduccin
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
university-logo
Introduccin
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
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
Introduccin
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
university-logo
Introduccin
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
Algunos lenguajes de programacin implementan un enfoque hbrido, que consiste en una combinacin de traduccin con interpretacin
university-logo
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
El objetivo del preprocesador consiste en producir cdigo intermedio que pueda ser compilado o interpretado de manera ms eciente
university-logo
Introduccin
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
university-logo
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
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
Introduccin
Conceptos bsicos Evolucin histrica El arte del diseo de lenguajes Clasicacin de los lenguajes Estrategias para la implementacin de lenguajes
university-logo