1 mircoles 9 de febrero de 2011 Referencias Tema 1 de apuntes Introduccin captulo 1 SICP (Building Abstractions with Procedures) Captulo 1.2 PLP (The Programming Language Spectrum) Captulo 1.3 PLP (Why Study Programming Languages) Captulo 1.4 PLP (Compilation and Interpretation) 2 mircoles 9 de febrero de 2011 Indice Historia de los lenguajes de programacin Elementos de los lenguajes de programacin Abstraccin Paradigmas de programacin Compiladores e intrpretes Por qu estudiar lenguajes de programacin? 3 mircoles 9 de febrero de 2011 Historia de los lenguajes de programacin Al comienzo slo exista el cdigo mquina (aos 40). No existan los lenguajes de programacin. Cdigo mquina: secuencia de bits que controlan directamente un procesador. Muy tedioso. 55 89 e5 53 83 ec 04 f0 e8 31... Ensamblador: Abreviaturas mnemotcnicas para expresar operaciones. El traductor abreviatura-instruccin cdigo mquina es el ensamblador. subl, pushl, movl, ... Necesidad de un lenguaje independiente de la mquina (aos 50). 4 mircoles 9 de febrero de 2011 Historia de los lenguajes de programacin UNIVAC primer computador comercial 5 mircoles 9 de febrero de 2011 Historia de los lenguajes de programacin 6 A finales de los aos 50 surgieron los primeros lenguajes de programacin FORTRAN fue el primer lenguaje de programacin. Desarrollado por un equipo de IBM dirigido por John Backus en 1956. Cita de John Backus: Much of my work has come from being lazy. I didn't like writing programs, and so , when I was working on the IBM 701, writing programs for computing missile trajectories, I started work on a programming system to make it easier to write programs. mircoles 9 de febrero de 2011 Historia de los lenguajes de programacin Desde 1954 hasta la actualidad se han documentado ms de 2500 lenguajes de programacin rbol genealgico de lenguajes de programacin Torre de Babel de ric Lvenez Lenguajes ms influyentes 7 mircoles 9 de febrero de 2011 Historia de los lenguajes de programacin Al principio los lenguajes de programacin se diseaban slo para poder ejecutar los programas eficientemente Ordenadores carsimos, los programadores muy baratos Aos 60, cuando haban surgido FORTRAN, COBOL, LISP y ALGOL, la programacin empez a cambiar Nuevas necesidades: migrar programas, buen mantenimiento de los programas Aos 70, la tecnologa de los ordenadores empez a madurar, los lenguajes se centraban en un dominio: FORTRAN cientfico, LISP IA, COBOL negocios, JOVIAL militar. 8 mircoles 9 de febrero de 2011 Aspectos que provocan la evolucin de los LP Recursos y tipos de ordenadores Aplicaciones y necesidades de los usuarios Nuevos mtodos de programacin Estudios tericos Estandarizacin 9 mircoles 9 de febrero de 2011 Por qu estudiar lenguajes de programacin? Mejora el uso del lenguaje de programacin Incrementa el vocabulario de los elementos de programacin Permite una mejor eleccin del lenguaje de programacin Mejora la habilidad para desarrollar programas efectivos y eficientes Facilita el aprendizaje de un nuevo lenguaje de programacin Facilita el diseo de nuevos lenguajes de programacin 10 mircoles 9 de febrero de 2011 Los LP en continua evolucin Ruby: Ruby, un lenguaje de programacin ideado en 1993 por un joven japons llamado Yukihiro Matsumoto Lenguaje multi-paradigma interpretado y muy expresivo que actualmente se utiliza tanto para desarrollar aplicaciones web como videojuegos. Proyecto vivo, cada ao aparecen nuevas versiones 11 mircoles 9 de febrero de 2011 Los LP en continua evolucin Scala: Scala, diseado en 2003 por el profesor alemn Martin Odersky Respuesta a los problemas de los lenguajes tradicionales imperativos para manejar la concurrencia Est implementado sobre Java y corre en la Mquina Virtual Java Go, el nuevo lenguaje de programacin de Google Una mezcla de C y Python que intenta conseguir un lenguaje de programacin de sistemas muy eficiente, expresivo y tambin 12 mircoles 9 de febrero de 2011 Definicin de lenguaje de programacin Definicin de la Encyclopedia of Computer Science Definicin de Abelson y Sussman 13 A programming language is a set of characters, rules for combining them, and rul es specifying their effects when executed by a computer, which have the following four characteristics: - It requires no knowledge of machine code on the part of the user - It has machine independence - Is translated into machine language - Employs a notation that is closer to that of the specific problem being solved than is machine code A powerful programming language is more than just a means for instructing a comp uter to perform tasks. The language also serves as a framework within which we organi ze our ideas about processes. Thus, when we describe a language, we should pay particular attention to the means that the language provides for combining simpl e ideas to form more complex ideas. mircoles 9 de febrero de 2011 Caractersticas de los lenguajes de programacin Define un proceso que se ejecuta en un computador Es de alto nivel, cercano a los problemas que se quieren resolver (abstraccin) Permite construir nuevas abstracciones que se adapten al dominio que se programa 14 mircoles 9 de febrero de 2011 Elementos de los lenguajes de programacin Para Abelson y Sussman, todos los lenguajes de progamacin permiten combinar ideas simples en ideas ms complejas mediante los siguientes tres mecanismos Expresiones primitivas que representan las entidades ms simples del lenguaje Mecanismos de combinacin con los que se construyen elementos compuestos a partir de elementos ms simples Mecanismos de abstraccin con los que dar nombre a los elementos compuestos y manipularlos como unidades 15 Los lenguajes son para las personas mircoles 9 de febrero de 2011 Abstraccion Una misin fundamental de los lenguajes de programacin es proporcionar herramientas que sirvan para construir abstracciones Abstracciones: sirven para tratar la complejidad del mundo real Existen abstracciones propias de la computacin: listas, rboles, grafos, tablas hash... 16 mircoles 9 de febrero de 2011 Paradigmas de programacin Un paradigma define un conjunto de reglas, patrones y estilos de programacin que son usados por un grupo de lenguajes de programacin Paradigma funcional Paradigma lgico Paradigma imperativo o procedural Paradigma orientado a objetos 17