Académique Documents
Professionnel Documents
Culture Documents
Table of Contents
1 Bibliografa
2 Historia de los lenguajes de programacin
3 Elementos de los lenguajes de programacin
4 Abstraccin
5 Paradigmas de programacin
5.1 Paradigma funcional
5.2 Paradigma lgico
5.3 Paradigma imperativo
5.4 Paradigma orientado a objetos
6 Compiladores e intrpretes
6.1 Compilacin
6.2 Interpretacin
6.3 Ejecucin en mquina virtual
6.4 Enlazado de rutinas y libreras
6.5 Preprocesamiento
1 Bibliografa
El tema est basado en los siguientes captulos. Os recomendamos que los estudieis y, si os interesa y os queda tiempo, que exploris en los enlaces
que hemos dejado en los apuntes para ampliar informacin.
El UNIVAC fue el primer computador comercial. La primera unidad se vendi en 1951. Se vendieron varias decenas de instalaciones en organismos
oficiales, ejrcito y empresas importantes. Se daban cursos de programacin y apareci la figura del programador (manual de 1959 de programacin
del UNIVAC). Eran ms importantes las horas de funcionamiento del computador que las horas de trabajo del programador.
El FORTRAN fue el primero de ellos. Lo desarroll un equipo de IBM dirigido por John W. Backus. A finales de 1953, Backus lanz la propuesta de
desarrollar una alternativa ms productiva al lenguaje de programacin ensamblador: escribir los programas en un lenguaje ms expresivo y
traducirlos a ensamblador (FORmula TRANslating system). El primer manual de FORTRAN apareci en octubre de 1956 y el primer compilador se
termin en abril de 1956.
Desde 1954 hasta la actualidad se han documentado ms de 2.500 lenguajes de programacin (consultar en The Language List). Entre 1952 y 1972,
la primera poca de los lenguajes de programacin, se desarrollaron alrededor de 200 lenguajes, de los que una decena fueron realmente
siginificativos y tuvieron influencia en el desarrollo de lenguajes posteriores.
Una lista parcial de algunos de los lenguajes de programacin ms importantes, junto con su ao de creacin:
La Torre de Babel, representa el gran nmero de lenguajes de programacin. Esta imagen se us en la portada de Programming Languages: History
and Fundamentals, de J. E. Sauel, 1969, Prentice Hall.
Al principio, los lenguajes se diseaban nicamente para poder ejecutar los programas eficientemente. Los ordenadores, carsimos, eran el recurso
crtico, y los programadores eran bastante baratos. Un lenguaje de alto nivel tena que ser competitivo con la ejecucin de un cdigo en ensamblador.
A mediados de los aos 60, cuando se haban diseado FORTRAN, COBOL, LISP y ALGOL, John Backus (creador de FORTRAN) se dio cuenta que
la programacin estaba cambiando. Las mquinas eran menos caras, el coste de la programacin estaba aumentando, apareca la necesidad de
mover o migrar los programas de unas estaciones a otras, y surga la necesidad de llevar un buen mantenimiento de los programas resultantes. El
objetivo de un lenguaje de alto nivel se transform no slo en en ejecutar los programas eficientemente, sino tambin en facilitar el desarrollo de
programas para resolver problemas en determinadas reas de aplicacin.
La tecnologa de los ordenadores madur entre 1960 y 1970 y los lenguajes se centraron en resolver problemas especficos de un dominio. Los
Los primeros lenguajes que todava se usan tienen revisiones peridicas para reflejar influencias de otras reas de computacin. Lenguajes como
Java, C++ y ML reflejan una gran experiencia obtenida en el diseo y uso de los cientos de lenguajes antiguos. Algunas de esas influencias son:
Recursos del ordenador: la evolucin de los ordenadores desde los aos 50, junto con los modernos sistemas operativos, han influenciado las
caractersticas de los lenguajes de alto nivel.
Aplicaciones: el uso de los ordenadores se ha extendido rpidamente desde las aplicaciones militares, cientficas y de negocios a los juegos,
los ordenadores personales, internet y cualquier aplicacin cotidiana.
Mtodos de programacin : el diseo de los lenguajes tiene que reflejar los buenos mtodos para implementar programas grandes y
complejos.
Estudios tericos<: Gracias a la investigacin durante ms de 50 aos en el diseo e implementacin de lenguajes, se conocen los puntos
fuertes y dbiles de las caractersticas de los mismos, por lo que influye en el diseo de los nuevos lenguajes.
Estandarizacin: cada vez ms existe la necesidad de que los programas sean portables de unos sistemas a otros.</li>
La siguiente tabla (extraida del libro Programming Languages. Design and Implementation, de Terrence W. Pratt y Marvin V. Zelkowitz) muestra una
pequea lista de los lenguajes y las influencias que fueron importante a finales del siglo 20.
Mejora el uso del lenguaje de programacin : si se conoce cmo estn implementadas las caractersticas en un lenguaje de programacin, se
mejorar la habilidad para escribir programas eficientes. Por ejemplo, si se conoce cmo crear y manipular listas o cadenas en un lenguaje,
por ejemplo Scheme, utilizando recursin se conseguir construir programas ms eficientes.
Incrementa el vocabulario de los elementos de programacin .
Permite una mejor eleccin del lenguaje de programacin: El conocimiento de diversos lenguajes de programacin facilitan la eleccin del
lenguaje ms adecuado para un proyecto determinado.
Mejora la habilidad para desarrollar programas efectivos y eficientes: Muchos lenguajes proporcionan caractersticas que, cuando se utilizan
correctamente, aportan muchos beneficios a la programacin pero, cuando se hace un uso incorrecto, pueden ocasionar un gran coste
computacional. El ejemplo tpico es la <em>recursin</em>, que permite una implementacin elegante y eficiente de funciones. Pero cuando
no se sabe utilizar, puede ocasionar un aumento exponencial del tiempo de ejecucin.
Facilita el aprendizaje de un nuevo lenguaje de programacin : Cuando se conocen las estructuras, tcnicas de implementacin y
construcciones de un lenguaje, es mucho ms sencillo aprender un nuevo lenguaje de programacin que tenga estructuras similares.
Facilita el diseo de nuevos lenguajes de programacin : Es posible que en un futuro tengais que disear vosotros un lenguaje que se adapte a
vuestras necesidades. Cuantos ms lenguajes y paradigmas se conozcan, ms sencillo resultar el diseo y la implementacin.
La historia de los lenguajes de programacin es <em>dinmica</em> y se encuentra en continua expansin. El gran nmero de lenguajes de
programacin que han aparecido desde los aos 60 hasta la actualidad no son ni mucho menos los nicos que aparecern en un futuro.
Por ejemplo, a continuacin tenemos una lista extraida de freshmeat donde se puede ver el nmero de proyectos activos etiquetados con la etiqueta
Libraries ordenados por lenguaje de programacin (Febrero 2011):
En la siguiente web Timeline of Programming Languages tenemos una lista de los lenguajes que han aparecido cronolgicamente desde los aos 50.
Es interesante ver los que han aparecido desde el ao 2000 al 2007 (21 lenguajes).
La evolucin de los lenguajes de programacin nunca se detiene. Continuamente surgen nuevos lenguajes que toman relevancia. Algunos lenguajes
de programacin son el trabajo de personas individuales con ganas de combinar distintas ideas y solucionar problemas y limitaciones que detectan en
los lenguajes conocidos.
Por ejemplo, tenemos el caso de Ruby, un lenguaje de programacin ideado en 1993 por un joven japons llamado Yukihiro Matsumoto. Cre un
lenguaje multi-paradigma, interpretado y muy expresivo que actualmente se utiliza tanto para desarrollar aplicaciones web como videojuegos.
El propio lenguaje de programacin Ruby nunca ha parado de evolucionar. La primera versin pblica Ruby 0.95 se anunci en un grupo de noticias en
Japn en diciembre de 1995. A continuacin se lanzaron tres versiones ms y se cre el grupo de noticias ruby-list. La versin Ruby 1.0 apareci en
diciembre de 1996, la versin 1.3 en 1999 y la 1.8.7 en junio de 2008. La ltima versin que se ha lanzado Ruby 1.9.1 ha sido el 25 de Enero de 2009.
Un ltimo ejemplo de lenguaje muy reciente es 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 multiparadigma.
Segn la definicin de la Encyclopedia of Computer Science 1 (Encyclopedia of Computer Science, 4th Edition, Wiley, 2000)
A programming language is a set of characters, rules for combining them, and rules specifying their effects when executed by a computer,
which have the following four characteristics:
We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As
they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a
program. [] The programs we use to conjure processes are like a sorcerer's spells. They are carefully composed from symbolic
expressions in arcane and esoteric programming languages that prescribe the tasks we want our processes to perform.
A powerful programming language is more than just a means for instructing a computer to perform tasks. The language also serves as a
framework within which we organize our ideas about processes. Thus, when we describe a language, we should pay particular attention to
the means that the language provides for combining simple ideas to form more complex ideas.
As, entre las caractersticas de un lenguaje de programacin podemos remarcar las siguientes:
Para Abelson y Sussman, todos los lenguajes de progamacin permiten combinar ideas simples en ideas ms complejas mediante los siguientes tres
mecanismos
Cuando se habla de elementos en el prrafo anterior nos estamos refiriendo tanto a datos como a programas.
Tienen una sintaxis: un conjunto de reglas que definen qu expresiones de texto son correctas. Por ejemplo, en C todas las sentencias deben
terminar en ';'
Los lenguajes de programacin se ejecutan en un computador y tienen una determinada semntica que define cul ser el resultado de la
ejecucin de un programa.
Definen un conjunto de tipos de datos primitivos que representan los posibles valores que pueden devolver las expresiones del lenguaje.
Tienen mecanismos de abstraccin para definir nuevos tipos de datos a partir de los primitivos o nuevas funciones y procedimientos.
Otra idea importante es que Los lenguajes de programacin son para las personas .
Los lenguajes de programacin deben ser precisos, deben poder traducirse sin ambiguedad en lenguaje mquina para que sean ejecutados por
computadores. Pero deben ser utilizados (ledos, comentados, probados, etc.) por personas.
Es importante reflexionar sobre el campo de los lenguajes de programacin. El estudio general de este campo nos ayuda a:
4 Abstraccin
El concepto de abstraccin es fundamental en informtica. Para escribir un programa que preste unos servicios es fundemental modelar el dominio
(sistema de informacin de una universidad, sistema de sensores de una planta qumica, etc.) sobre el que va a trabajar. Para ello es necesario definir
distintas abstracciones que nos permitan tratar sus elementos y comunicarnos correctamente con los usuarios que van a utilizar el programa.
Una abstraccin agrupa un conjunto de elementos (datos y procedimientos) y le da un nombre. Por ejemplo, cuando hablamos del sistema de
informacin de una universidad identificamos elementos como:
Estudiantes
Asignaturas
Matrcula
Expediente acadmico
Existen abstracciones propias de la computacin, que se utilizan en mltiples dominios. Por ejemplo, abstracciones de datos como:
Listas
rboles
Grafos
Tablas hash
Tambin existen abstracciones que nos permiten tratar con dispositivos y ordenadores externos:
Fichero
Raster grfico
Protocolo TCP/IP
Uno de los trabajos principales de un informtico es la construccin de abstracciones que permitan ahorrar tiempo y esfuerzo a la hora de tratar con la
complejidad del mundo real.
TCP is what computer scientists like to call an abstraction: a simplification of something much more complicated that is going on under the
covers. As it turns out, a lot of computer programming consists of building abstractions. What is a string library? It's a way to pretend that
computers can manipulate strings just as easily as they can manipulate numbers. What is a file system? It's a way to pretend that a hard
drive isn't really a bunch of spinning magnetic platters that can store bits at certain locations, but rather a hierarchical system of folders-
Una misin fundamental de los lenguajes de programacin es proporcionar herramientas que sirvan para construir estas abstracciones.
5 Paradigmas de programacin
Existe una enorme variedad de lenguajes de programacin, no slo en cuanto a su sintaxis, sino tambin en cuanto a su comportamiento o semntica.
Hemos visto que cada ao el nmero de lenguajes se incrementa, de forma que para los informticos es prcticamente imposible conocer cada nuevo
lenguaje que aparece. Pero eso no es un problema, ya que todos esos lenguajes tienen caractersticas comunes y se pueden agrupar en cuatro
grandes grupos o modelos computacionales llamados paradigmas.
Todos los lenguajes pertenecen a uno de esos cuatro paradigmas. De forma que, si se conocen las caractersticas de los paradigmas de
programacin, es muy sencillo aprender a programar en un nuevo lenguaje, porque tendr las caractersticas del paradigma de programacin al que
pertenezca.
Convertido de web en PDF a http://www.htmlapdf.com con el api html a pdf
El origen de la palabra paradigma entendida como un marco general en el que se desarrollan teoras cientficas se encuentra en el trabajo de 1962 del
filsofo e historiador de la ciencia Thomas S. Kuhn, La estructura de las revoluciones cientficas . Esa palabra ha sido despus adoptada por el mundo
de la computacin para definir un conjunto de ideas y principios comunes de grandes grupos de lenguajes de programacin.
La definicin de la palabra paradigma ms cercana a lo que se quiere decir en la expresin paradigma de programacin es la siguiente:
Un marco filosfico y terico de una escuela o disciplina cientfica en el que se formulan teoras, leyes y generalizaciones y los
experimentos realizados en soporte de ellas.
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
Una reflexin importante es que la separacin entre los paradigmas y los lenguajes no es estricta. Existen ideas comunes a distintos paradigmas, as
como lenguajes de programacin que soportan ms de un paradigma. Por ejemplo, el paradigma funcional y lgico comparten caractersticas
declarativas, mientras que el paradigma orientado a objetos y procedural tienen caractersticas imperativas.
(define (factorial x)
(if (= x 0)
1
(* x (factorial (- x 1)))))
(factorial 8)
40320
(factorial 30)
265252859812191058636308480000000
Definicin de reglas
Unificacin como elemento de computacin
Programacin declarativa
hijode(A,B) :- padrede(B,A).
abuelode(A,B) :- padrede(A,C), padrede(C,B).
hermanode(A,B) :- padrede(C,A) , padrede(C,B), A \== B.
familiarde(A,B) :- padrede(A,B).
familiarde(A,B) :- hijode(A,B).
familiarde(A,B) :- hermanode(A,B).
?- hermanode('juan', 'marcela').
yes
?- hermanode('carlos', 'juan').
no
?- abuelode('pablo', 'maria').
yes
?- abuelode('maria', 'pablo').
no
Caractersticas:
Definicin de procedimientos
Definicin de tipos de datos
Chequeo de tipos en tiempo de compilacin
Cambio de estado de variables
Pasos de ejecucin de un proceso
tRango = record
f,c: tDimension value 1;
end;
tpMatriz = ^eMatriz;
Ejemplo (Java):
6 Compiladores e intrpretes
Convertido de web en PDF a http://www.htmlapdf.com con el api html a pdf
Existe una gran variedad de estrategias para conseguir que un programa se ejecute en un computador. Todas se basan en los "meta-programas"
(compiladores, intrpretes, etc.) cuyos datos de entrada son el cdigo fuente de otros programas.
6.1 Compilacin
La siguiente figura muestra el proceso de generacin y ejecucin de un programa compilado.
Ejemplos: C, C++
6.2 Interpretacin
6.5 Preprocesamiento
Sitio web realizado con org-mode y el estilo CSS del proyecto Worg
Footnotes:
1 La Encyclopedia of Computer Science est disponible en la biblioteca politcnica con el identificador: POE R0/E/I/ENC/RAL