COMPILADORES Y LENGUAJES FORMALES
GRADO INGENIERÍA INFORMÁTICA
ACTIVIDAD 1: Clasificación de los
lenguajes de programación
AUTOR:
DAVID SÁNCHEZ RUIZ
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
CONTROL DE DOCUMENTACIÓN
Versión Fecha Resumen de los cambios producidos
1.0 13-01-2013 Creación del documento.
Realizado por: Aprobado por:
AUTOR Fecha: 13-01-2013 Fecha: dd-mm-aaaa
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
ÍNDICE
1. INTRODUCCIÓN ........................................................................................................................ 4
1.1. PROPOSITO ....................................................................................................................... 4
1.2. OBJETIVOS ........................................................................................................................ 4
2. ACTIVIDAD A REALIZAR ......................................................................................................... 4
3. LENGUAJES DE PROGRAMACIÓN ...................................................................................... 5
3.1. C++ ....................................................................................................................................... 8
3.2. HASKELL ........................................................................................................................... 10
3.3. PYTHON ............................................................................................................................ 14
3.4. O’CAML (Objetive CAML) ............................................................................................... 16
3.5. JAVA ................................................................................................................................... 18
4. MAPA CONCEPTUAL ............................................................................................................. 21
5. TABLA DE CLASIFICACION DE LOS LENGUAJES ......................................................... 22
6. DATOS DE INTERES .............................................................................................................. 22
7. BIBLIOGRAFÍA ......................................................................................................................... 24
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
1. INTRODUCCIÓN
1.1. PROPOSITO
A continuación se detalla actividad 1 de la unidad 1 de la asignatura de Compiladores
y lenguajes formales, donde se describe, la clasificación de una serie de lenguajes de
programación en función de las clasificaciones formales estudiadas.
1.2. OBJETIVOS
Aplicar los conocimientos adquiridos sobre las clasificaciones en las que se puede encontrar
un lenguaje de programación.
Entender que estas clasificaciones no son incompatibles, así como las limitaciones que
tienen las distintas clasificaciones y cómo deben solaparse.
Hacer un esfuerzo de análisis de la información contenida en la página web que se indica en
el enunciado, para posteriormente hacer un esfuerzo de síntesis plasmándolo en el informe que
se entrega.
Realizar un mapa conceptual de las clasificaciones en las que se puede encontrar un
lenguaje de programación.
2. ACTIVIDAD A REALIZAR
Clasificación de lenguajes de programación en base a los siguientes puntos de vista:
Según su grado de independencia de la máquina.
Según la forma de sus instrucciones.
Por generaciones.
Según la forma de ejecución.
Los lenguajes que se clasifican son los siguientes:
C++
Haskell.
Python.
O´Caml (Objective CAML).
Java.
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
Salida de la actividad:
Clasificación para cada lenguaje con el siguiente contenido:
1. Lenguajes de los que deriva.
2. Características del mismo.
3. Principal utilización (ejemplo: cálculo matemático).
4. Dentro de cada clasificación, de qué tipo es.
5. Bibliografía.
6. Mapa conceptual con las clasificaciones de los lenguajes de programación y se indicarán
algunos de los lenguajes más representativos.
3. LENGUAJES DE PROGRAMACIÓN
Un lenguaje de programación es un idioma artificial diseñado para expresar procesos
que pueden ser llevadas a cabo por máquinas como las computadoras.
Pueden usarse para crear programas que controlen el comportamiento físico y lógico de
una máquina, para expresar algoritmos con precisión, o como modo de comunicación
humana y está formado por un conjunto de símbolos y reglas sintácticas y semánticas que
definen su estructura y el significado de sus elementos y expresiones.
La programación es el proceso de creación de un programa de computadora, mediante la
aplicación de procedimientos lógicos, a través de los siguientes pasos:
El desarrollo lógico del programa para resolver un problema en particular.
Escritura de la lógica del programa empleando un lenguaje de programación
específico (codificación del programa).
Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina.
Prueba y depuración del programa.
Desarrollo de la documentación.
Permite especificar de manera precisa sobre qué datos debe operar una computadora,
cómo deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada
gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente
próximo al lenguaje humano o natural. Una característica relevante de los lenguajes de
programación es precisamente que más de un programador pueda usar un conjunto
común de instrucciones que sean comprendidas entre ellos para realizar la construcción de
un programa de forma colaborativa.
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
Clasificación de los lenguajes de programación:
a) Según su grado de independencia de la máquina (abstracción):
Lenguaje máquina.
Lenguajes de bajo nivel: La programación se realiza teniendo muy en
cuenta las características del procesador. Ejemplo: Lenguajes ensamblador.
Lenguajes de medio nivel: Permiten un mayor grado de abstracción pero al
mismo tiempo mantienen algunas cualidades de los lenguajes de bajo nivel.
Ejemplo: C puede realizar operaciones lógicas y de desplazamiento con
bits, tratar todos los tipos de datos como lo que son en realidad a bajo nivel
(números), etc.
Lenguajes de alto nivel: Más parecidos al lenguaje humano. Manejan
conceptos, tipos de datos, etc., de una manera cercana al pensamiento
humano ignorando (abstrayéndose) del funcionamiento de la máquina.
Lenguajes orientados a problemas concretos: Por ejemplo SQL orientado a
bases de datos.
b) Según la forma de sus instrucciones:
Lenguajes imperativos: Programan mediante una serie de comandos,
agrupados en bloques y compuestos de órdenes condicionales que permiten
al programa retornar a un bloque de comandos si se cumple la condición.
Estos fueron los primeros lenguajes de programación en uso y aún hoy
muchos lenguajes modernos usan este principio. No obstante, los lenguajes
imperativos estructurados carecen de flexibilidad debido a la secuencia de
las instrucciones.
Lenguajes funcionales o declarativos: Es un lenguaje que crea programas
mediante funciones, devuelve un nuevo estado de resultado y recibe como
entrada el resultado de otras funciones. Cuando una función se invoca a sí
misma, hablamos de recursividad.
Lenguajes de programación orientada a objetos: Crean un sistema de
clases y objetos siguiendo el ejemplo del mundo real, en el que unos objetos
realizan acciones y se comunican con otros objetos.
Lenguajes concurrentes: Es la simultaneidad en la ejecución de múltiples
tareas interactivas.
Lenguajes intermediarios: Algunos lenguajes pertenecen a ambas
categorías (LISP, Java, Python...) dado que el programa escrito en estos
lenguajes puede, en ciertos casos, sufrir una fase de compilación
intermediaria, en un archivo escrito en un lenguaje ininteligible (por lo tanto
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
diferente al archivo fuente) y no ejecutable (requeriría un intérprete). Los
applets Java, pequeños programas que a menudo se cargan en páginas
web, son archivos compilados que sólo pueden ejecutarse dentro de un
navegador web (son archivos con la extensión .class).
c) Por generaciones:
Lenguajes de primera generación (1GL): Código máquina.
Lenguajes de segunda generación (2GL): Lenguajes ensamblador.
Lenguajes de tercera generación (3GL): La mayoría de los lenguajes
modernos, diseñados para facilitar la programación a los humanos.
Ejemplos: C++, Python, Java, etc.
Lenguajes de cuarta generación (4GL): Diseñados con un propósito
concreto, o sea, para abordar un tipo concreto de problemas. Ejemplos:
NATURAL, Mathematica.
Lenguajes de quinta generación (5GL): La intención es que el programador
establezca el qué problema ha de ser resuelto y las condiciones a reunir, y
la máquina lo resuelve. Se usan en inteligencia artificial. Ejemplo: Prolog.
d) Según la forma de ejecución:
Lenguajes compilados: Un programa traductor traduce el código del
programa (código fuente) en código máquina (código objeto). Otro
programa, el enlazador, unirá los ficheros de código objeto del programa
principal con los de las librerías para producir el programa ejecutable.
Ejemplo: C.
Lenguajes interpretados: Un lenguaje de programación debe traducirse para
que el procesador pueda comprenderlo. Un programa escrito en un lenguaje
interpretado requiere de un programa auxiliar (el intérprete), que traduce los
comandos de los programas según sea necesario y de manera directa.
Ejemplo: Lisp.
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
3.1. C++
Es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne
Stroustrup, el nombre C++ fue propuesto por Rick Mascitti en el año 1983.
La intención de su creación fue el extender al exitoso lenguaje de programación C con
mecanismos que permitan la manipulación de objetos.
Actualmente existe un estándar, denominado ISO C++, al que se han adherido la
mayoría de los fabricantes de compiladores más modernos. Existen también algunos
intérpretes, tales como ROOT.
Lenguajes de los que deriva
Se deriva sobre todo del Lenguaje C, que fue creado a mediados de los 70 por Dennis
Ritchie a partir del trabajo elaborado por su colega de los laboratorios Bell Telephone,
Ken Thompson. Estos habían diseñado con anterioridad el sistema operativo UNIX, y
su intención al desarrollar el lenguaje C fue la de conseguir un lenguaje idóneo para la
programación de sistemas que fuese independiente de la máquina con el cual escribir
su sistema UNIX.
Aunque fue diseñado inicialmente para la programación de sistemas, posteriormente
su uso se ha extendido a aplicaciones técnico-científicas, de bases de datos, de
proceso de textos, etc.
La utilización óptima de este lenguaje se consigue dentro de su entorno natural, que
es el sistema operativo UNIX.
Características
Conserva todas las capacidades de su predecesor C y añade el concepto de
clase (permiten definir conjunto de datos y las funcionen que lo manipulan),
tipos genéricos expresiones (de ADA).
Es un lenguaje de programación multiparadigma (se añadieron facilidades de
programación genérica).
Usa programación estructurada para resolver tareas de bajo nivel, así como la
amplia librería de rutinas de que dispone
Posibilidad de redefinir los operadores.
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
Otorgan el control absoluto de la aplicación al programador, consiguiendo una
velocidad muy superior a la ofrecida por otros lenguajes.
Poder crear nuevos tipos que se comporten como tipos fundamentales.
Implementación del solapamiento de funciones.
Optimización de explotación de memorias con la creación de estructuras de
datos dinámicas.
Programación orientada a objetos (permite asociar a los datos las funcionen que
lo manipulan). Características como:
o Abstracción (variables y métodos de instancia y de clase), permite al
programador “olvidar” el funcionamiento interno de una clase
o Encapsulación:
De variables: privada, pública y protegida.
De métodos: privada, pública y protegida.
o Herencia (Sencilla, múltiple, unidades genéricas, polimorfismo, no
dispone de Metaclases).
Utilización
En el año 1983, el lenguaje fue utilizado por primera vez fuera de un laboratorio
científico. Antes se había usado el nombre "C con clases". En C++, la expresión "C++"
significa "incremento de C" y se refiere a que C++ es una extensión de C.
Posteriormente se incorporó la librería STL, obra de Alexander Stepanov y Adrew
Koening. Esta librería de clases con contenedores y algoritmos genéricos proporciona a
C++ una potencia única entre los lenguajes de alto nivel.
En un principio C++ era traducido a código C a través de una utilidad llamada
precompilador.
Se puede utlizar algunas de las ventajas de C++, como C mejorado, para escribir
código no orientado a objetos.
Las primeras aplicaciones tendían hacia la programación de sistemas (se han escrito
varios SS.OO en C++), pero actualmente se utiliza para aplicaciones de banca,
comercio, seguros, telecomunicaciones, … y ampliamente en la docencia e
investigación ya que es un lenguaje claro, eficiente, realista, flexible y suficientemente
accesible.
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
Tipo
C++ es un lenguaje de tercera generación, híbrido y de alto nivel con programación de
sistema orientado a objeto Lenguaje compilado.
Es imperativo, en el sentido de que consisten en una secuencia de comandos, los
cuales son ejecutados estrictamente uno después de otro.
Ejemplo de programa en C++, el clásico Hola mundo:
/* Esta cabecera permite usar los objetos que encapsulan los descriptores stdout y stdin: cout(<<) y
cin(>>)*/ #include <iostream> int main() { std::cout << "Hola mundo" << std::endl; }
3.2. HASKELL
Es un lenguaje de programación estandarizado multi-propósito puramente funcional
con semánticas no estrictas y fuerte tipificación estática que nació en 1987.
Su nombre se debe al lógico estadounidense Haskell Curry. En Haskell, "una función
es un ciudadano de primera clase" del lenguaje de programación. Como lenguaje de
programación funcional, el constructor de controles primario es la función. Tiene sus
orígenes en las observaciones de Haskell Curry y sus descendientes intelectuales.
En los años 1980 se constituyó un comité cuyo objetivo era crear un lenguaje funcional
que reuniera las características de los múltiples lenguajes funcionales de la época,
como las funciones de orden superior, evaluación perezosa, inferencia estática de
tipos, tipos de datos definidos por el usuario, encaje de patrones y listas por
comprehensión. Al diseñar el lenguaje se observó que no existía un tratamiento
sistemático de la sobrecarga con lo cual se construyó una nueva solución conocida
como las clases de tipos. El lenguaje incorporaba, además, Entrada/Salida puramente
funcional y definición de arrays por comprehensión.
En Mayo de 1996 aparecía la versión 1.3 del lenguaje Haskell [Has95] que
incorporaba, entre otras características, mónadas para Entrada/Salida, registros para
nombrar componentes de tipos de datos, clases de constructores de tipos y diversas
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
librerías de propósito general. Posteriormente, surge la versión 1.4 con ligeras
modificaciones.
El lenguaje evoluciona rápidamente con y como los representantes actuales del
estándar de facto. El último estándar semi-oficial es Haskell 98, con la intención de
especificar una versión mínima y compatible del lenguaje como base para futuras
extensiones y para su enseñanza.
Lenguajes de los que deriva
Deriva del lenguaje de programación ML (Metalenguaje), que surgió en 1976 y que
trabajaba en un nuevo estilo de lenguajes funcionales con evaluación perezosa y
definición de funciones mediante encaje de patrones.
Características
Soporte para tipos de datos y funciones recursivas, listas, tuplas, guardas y
calce de patrones. La combinación de las mismas puede resultar en algunas
funciones casi triviales cuya versión en lenguajes imperativos pueden llegar a
resultar extremadamente tediosas de programar.
Tratamiento sistemático de la sobrecarga.
Facilidad en la definición de tipos abstractos de datos
El sistema de entrada/salida es puramente funcional
Posibilidad de utilización de módulos.
Se han desarrollado muchas variantes:
Versiones paralelas del MIT y Glasgow, ambas denominadas Parallel Haskell.
Más versiones paralelas y distribuidas de Haskell llamadas Distributed Haskell
(anteriormente Goffin) y Eden
Una versión con ejecución especulativa: Eager Haskell
Varias versiones orientadas a objetos: Haskell++, O'Haskell y Mondrian.
Una versión educativa llamada Gofer desarrollada por Mark Jones que fue
suplantada por Hugs.
Implementaciones:
Cumplen con los estándares de Haskell 98 y son distribuidas bajo licencias Open
Source:
Hugs: Es un intérprete, ofrece una compilación rápida de los programas y un
tiempo razonable de ejecución. Viene con una librería gráfica muy simple, pero
de las más livianas y compatibles.
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
GHC "Glasgow Haskell Compiler": compila a código nativo en una variedad de
arquitecturas y puede también compilar a C. Es, probablemente, uno de los
compiladores más populares e incluso tiene unas cuantas librerías (por ejemplo
OpenGL).
nhc98: es otro compilador con un mejor tiempo de ejecución que Hugs. Esta
implementación se enfocó a minimizar la utilización de la memoria
convirtiéndola en una buena opción para arquitecturas lentas o antiguas.
HBC: es otro compilador a código nativo de Haskell. Si bien no ha sido
actualizado en el último tiempo sigue siendo bastante útil.
Helium: es un nuevo dialecto de Haskell. Se centró en ser muy fácil de
aprender; por ello, no incluye soporte para todo el estándar de Haskell,
haciendo que no sea totalmente compatible.
Comparación de clases con otros lenguajes:
Las clases de Haskell son similares a las usadas en algunos lenguajes orientados a
objetos como C++ y Java. Sin embargo, hay diferencias significativas:
Haskell separa la definición de un tipo de la definición de los métodos asociados
con dicho tipo. Una clase en C++ o Java suele definir tanto una estructura de
datos (las variables miembros) como las operaciones asociadas con la
estructura (los métodos). En Haskell, estas definiciones aparecen separadas.
Los métodos de clase definidos en una clase Haskell se corresponden con las
funciones virtuales de C++. Cada instancia de una clase proporciona su propia
definición para cada método; los métodos por defecto se corresponden con las
definiciones por defecto de una función virtual en una clase base.
Las clases son similares a los interfaces de Java a grandes rasgos. Al igual que
una declaración de interfaz, una clase de Haskell define un protocolo para usar
un objeto en vez de un objeto en sí.
Haskell no proporciona el estilo de sobrecarga de C++, en el cual, funciones con
tipos distintos pueden compartir un mismo nombre.
El tipo de un objeto Haskell no puede ser promocionado (coerced)
implícitamente; no hay una clase base universal tal como Object cuyos valores
pueden ser projectados a otros objetos.
C++ y Java incluyen información identificativa (como la VTable) en la
representación en tiempo de ejecución de un objeto. En Haskell, esa
información es adjuntada de un modo lógico en vez de físico gracias al sistema
de tipos.
El sistema de clases de Haskell no contempla el control de acceso a los
métodos (tales como accesos privados o públicos). En Haskell, el sistema de
módulos puede ser usado para ocultar o revelar los componentes de una clase.
Utilización
Haskell es un lenguaje de programación para computadoras. Específicamente, es un
lenguaje polimórficamente tipificado, perezoso, puramente funcional, muy diferente a la
mayoría de los otros lenguajes de programación.
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
El lenguaje recibe su nombre en honor a Haskell Brooks Curry, por sus trabajos en
lógica matemática que sirvieron como fundamento para el desarrollo de lenguajes
funcionales. Haskell está basado en el cálculo lambda , por lo tanto el símbolo lambda
es usado como logo.
Escribir programas grandes que funcionen correctamente es difícil y costoso. Mantener
esos programas es aún más difícil y costoso tambien. Los lenguajes de programación
funcional, tales como Haskell, pueden hacerlo mucho más fácil y económicos.
Haskell te ofrece:
Un incremento substancial de productividad para el programador.
Código más corto, claro y fácil de mantener.
Menos errores, mayor confiabilidad.
Menor diferencia semántica; entre el programador y el lenguaje.
Desarrollo de programas en menor tiempo.
Está especialmente diseñado para manejar una amplia gama de aplicaciones, desde
análisis numérico hasta simbólico. Para alcanzar estos objetivos, Haskell posee una
sintaxis expresiva, y una rica variedad de tipos primitivos, incluyendo enteros y
racionales de precisión arbitraria, también como los tipos de enteros, punto flotante y
booleanos más convencionales.
Tipo
Haskell es un lenguaje de programación fuertemente tipado, los tipos son penetrantes
(pervasive), y el principiante deberá acostumbrarse desde el comienzo a la potencia y
complejidad del sistema de tipos de Haskell.
Es un lenguaje funcional puro, todos los cómputos vienen descritos a través de la
evaluación de expresiones (términos sintácticos) para producir valores (entidades
abstractas que son vistas como respuestas). Todo valor tiene asociado un tipo. Un
programa funcional es una expresión, la cual es ejecutada mediante su evaluación.
Haskell es perezoso. Es decir, a menos que le indiquemos lo contrario, Haskell no
ejecutará funciones ni calculará resultados hasta que se vea realmente forzado a
hacerlo. Esto funciona muy bien junto con la transparencia referencial y permite que
veamos los programas como una serie de transformaciones de datos. Incluso nos
permite hacer cosas interesantes como estructuras de datos infinitas.
Haskell es un lenguaje tipificado estáticamente. Cuando compilamos un programa, el
compilador sabe que trozos del código son enteros, cuales son cadenas de texto, etc.
Haskell es elegante y conciso. Se debe a que utiliza conceptos de alto nivel. Los
programas Haskell son normalmente más cortos que los equivalentes imperativos. Y
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
los programas cortos son más fáciles de mantener que los largos, además de que
poseen menos errores.
Ejemplo programa haskell:
-- PROGRAMA QUE DESCRIBE COMO ES LA TEMPERATURA, EN CADA
-- TEMPORADA CLIMATICA INGLESA!
-- TOMADO DE HASKELL. THE CRAFT OF FUNCTIONAL PROGRAMMING
module Weather where
data Temp = Cold | Hot
deriving (Show)
data Season = Spring | Summer | Autumn | Winter
deriving (Show)
weather :: Season -> Temp
weather Summer = Hot
weather _ = Cold
3.3. PYTHON
Es un lenguaje de programación interpretado cuya filosofía hace hincapié en una
sintaxis muy limpia y que favorezca un código legible.
Es administrado por la Python Software Foundation. Posee una licencia de código
abierto, denominada Python Software Foundation License, que es compatible con la
Licencia pública general de GNU a partir de la versión 2.1.1, e incompatible en ciertas
versiones anteriores.
El nombre del lenguaje proviene de la afición de su creador original, Guido van
Rossum, por los humoristas británicos Monty Python.
Lenguajes de los que deriva
Fue creado a finales de los ochenta por Guido van Rossum en el Centro para las
Matemáticas y la Informática (CWI, Centrum Wiskunde & Informatica), en los Países
Bajos, como un sucesor del lenguaje de programación ABC, capaz de manejar
excepciones e interactuar con el sistema operativo Amoeba, que fuera simple,
poderoso y elegante orientado a la creación de sistemas a partir de componentes.
Está basado e inspirado en la programación orientada a objetos, deriva del Pascal, C y
C++.
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
El 13 de febrero de 2009 se lanzó una nueva versión de Python bajo el nombre clave
"Python 3000" o, abreviado, "Py3K". Esta nueva versión incluye toda una serie de
cambios que requieren reescribir el código de versiones anteriores. Para facilitar este
proceso junto con Python 3 se ha publicado una herramienta automática llamada 2to3.
Características
Es muy legible y elegante.
Imposible escribir código ofuscado.
Simple y poderoso.
Minimalista: todo aquello innecesario no hay que escribirlo (;,{,},’\n’).
Muy denso, con poco código hace bastante.
Soporta objetos y estructuras de datos de alto nivel: strings, listas, diccionarios,
etc.
Múltiples niveles de organizar el código: funciones, clases, módulos y
paquetes.
Usa resolución dinámica de nombres; es decir, lo que enlaza un método y un
nombre de variable durante la ejecución del programa (también llamado enlace
dinámico de métodos).
Python standard library contiene un sinfín de clases de utilidad
http://docs.python.org/2/library/index.html
Si hay áreas que son lentas se pueden reemplazar por plugins en C o C++,
siguiendo la API para extender Python en una aplicación o a través de
herramientas como SWIG, sip o Pyrex.
El intérprete de Python estándar incluye un modo interactivo en el cual se
escriben las instrucciones en una especie de intérprete de comandos
No hay que declarar constantes y variables antes de utilizarlas.
No requiere paso de compilación/linkage, la primera vez que ejecutas un script
se compila y genera bytecode que es luego interpretado.
Alta velocidad de desarrollo y buen rendimiento.
Código interoperable (como en java “write once run everywhere”.
Se puede utilizar en múltiples plataformas (más aún que java).
Es OpenSource, razón por la cual la Python Library sigue creciendo cada vez
más.
Peculiaridades sintácticas:
o Usa tabulación o espaciado para mostrar estructuras de bloques.
o Tabula una vez para indicar el comienzo de un bloque.
Utilización
Python es bueno:
Para combinar con varios componentes juntos.
Para llevar a cabo prototipos de sistema.
Para la elaboración de aplicaciones cliente.
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
Para desarrollo web y de sistemas distribuidos.
Para el desarrollo de tareas científicas en las que hay que simular y prototipar
rápidamente.
Python NO es bueno en:
Programación de bajo nivel, no tiene control directo sobre memoria y otras
tareas.
Programación de drivers y kernels.
Aplicaciones que requieren alta capacidad de computo.
Tipo
Es un lenguaje interpretado cuya filosofía hace hincapié en una sintaxis muy limpia y
que favorezca un código legible.
Es multiparadigma, ya que soporta orientación a objetos, programación imperativa y,
en menor medida, programación funcional.
Usa tipado dinámico y conteo de referencias para la administración de memoria, es
fuertemente tipado y multiplataforma.
Aunque la programación en Python podría considerarse en algunas situaciones hostil
a la programación funcional tradicional del Lisp, existen bastantes analogías entre
Python y los lenguajes minimalistas de la familia Lisp como puede ser Scheme.
3.4. O’CAML (Objetive CAML)
Ocaml nace de la evolución del lenguaje CAML, abreviación de “Categorical Abstract
Machine Language”, al integrársele la programación con objetos.
Se desarrolló en 1992, con base en su predecesor Caml Special Light (inicio de la
década 1990), cuyo predecesor a su vez es Caml Light (1985-1990) que pertenece a
la familia de lenguajes de programación funcionales ML (que se inició en la década de
1970).
El código fuente en Ocaml se compila en código para una máquina virtual o en código
de máquina para diferentes arquitecturas. Este último compilador produce código
comparable en eficiencia al producido por compiladores como el del lenguaje C/C++.
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
Ocaml dispone de un análisis de tipos estático con inferencia de tipos, con valores
funcionales de primera clase, polimorfismo parametrizado, llamada por patrones,
manejo de excepciones, recolección de basura y otras características avanzadas.
Lenguajes de los que deriva
Es un lenguaje de programación avanzado de la familia de los lenguajes ML,
desarrollado y distribuido por el INRIA en Francia. Ocaml admite los paradigmas de
programación imperativa, programación funcional y programación orientada a objetos.
Características
Cuenta con herramientas que facilitan el desarrollo como un depurador
simbólico; herramientas para análisis léxico y sintáctico; herramientas para
automatizar compilación de proyectos grandes; editor y visualizador gráfico de
módulos; modos para diversos editores; preprocesador muy configurable pues
permite redefinir la sintaxis del lenguaje; extractor de documentación técnica;
medidor de desempeño.
La distribución básica incluye diversas librerías portables para manejo de
estructuras de datos. Hay también disponibles librerías desarrolladas por
diversas personas y grupos.
Tiene estilo imperativo, facilita los cálculos por medio de cambios de estado
(condición de una memoria o almacenamiento).
Estructuras de datos modificables como vectores, cadenas, campos mutables y
referencias.
Programación estructurada y orientada a objetos.
El código fuente en Ocaml se compila en código para una máquina virtual o en
código de máquina para diferentes arquitecturas. Este último compilador
produce código comparable en eficiencia al producido por compiladores como
el del lenguaje C/ C++.
Estructuras de control como secuencias y ciclos.
Las dos principales desventajas, comparadas al estilo puramente funcional,
son:
o Complica el sistema del tipo de la lengua, rechazando ciertos
programas que de otra manera serían considerados correctos.
o No tiene que perder de vista a la representación de la memoria y al
orden de los cálculos.
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
Utilización
Es un lenguaje funcional que se utiliza sobre todo para calculos y analisis
matematicos, permite programar empleando características imperativas, algunas
características propias de lenguajes orientados a objetos e incluye un sistema de
módulos que facilita el desarrollo de proyectos grandes (con signaturas y functores).
Como los demás lenguajes funcionales emplea un recolector de basura que permite
en muchos casos desentenderse del manejo de memoria dinámica (el recolector
elimina automáticamente memoria que no se usa --de forma que no es necesario usar
free como en C).
Tipo
Cuenta con un sistema de tipos fuerte, con un derivador de tipos que facilita el
chequeo estático de programas sin requerir del programador tiempo en declaración
explicita de tipos. Además de tipos básicos (enteros, flotantes, booleanos, caracteres
y cadenas) ofrece diversas formas de construir nuevos tipos como tuplas, arreglos,
listas, registros, conjuntos, streams y facilidades para definir tipos recursivos,
polimórficos y paramétricos.
En cuanto a interpretación/compilación se basa en un modelo de máquina abstracta
portable (máquina Zinc). Cuenta con un interprete (ocaml) que es a su vez un entorno
interactivo útil para experimentar y dos compiladores: ocamlc y ocamlopt.
Ejemplo de código:
> print_endline "Hello World !" ;;
Hello World !
val () : unit = <fun>
>
3.5. JAVA
Java es un lenguaje de programación originalmente desarrollado por James Gosling
de Sun Microsystems (la cual fue adquirida por la compañía Oracle) y publicado en el
1995 como un componente fundamental de la plataforma Java de Sun Microsystems.
La compañía Sun desarrolló la implementación de referencia original para los
compiladores de Java, máquinas virtuales, y librerías de clases en 1991 y las publicó
por primera vez en el 1995. A partir de mayo del 2007, en cumplimiento con las
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
especificaciones del Proceso de la Comunidad Java, Sun volvió a licenciar la mayoría
de sus tecnologías de Java bajo la Licencia Pública General de GNU. Otros también
han desarrollado implementaciones alternas a estas tecnologías de Sun, tales como el
Compilador de Java de GNU y el GNU Classpath.
Es un lenguaje de propósito general para realizar todo tipo de aplicaciones
profesionales, incluye una combinación de características que lo hacen único y está
siendo adoptado por multitud de fabricantes como herramienta básica para el
desarrollo de sus aplicaciones.
Lenguajes de los que deriva
Deriva mucho de su sintaxis de C y C++, pero tiene menos facilidades de bajo nivel
que cualquiera de ellos. Las aplicaciones de Java son generalmente compiladas a
bytecode (clase Java) que puede correr en cualquier máquina virtual Java (JVM) sin
importar la arquitectura de la computadora.
Características
Programación orientada a objetos.
Independencia de la plataforma, los programas se pueden ejecutar en cualquier
tipo de hardware. Este es el significado de ser capaz de escribir un programa
una vez y que pueda ejecutarse en cualquier dispositivo, tal como reza el
axioma de Java, “write once, run anywhere”.
Permite escribir applets (pequeños programas que se insertan en una página
HTML) y se ejecutan en el ordenador local.
Es fácil de aprender y está bien estructurado.
Las aplicaciones son fiables. Se puede controlar su seguridad frente al acceso
a recursos del sistema y es capaz de gestionar permisos y criptografía.
Funciona perfectamente en red
Aprovecha características de la mayoría de los lenguajes modernos evitando
sus inconvenientes. En particular los del C++.
Tiene una gran funcionalidad gracias a sus librerías (clases).
NO tiene punteros manejables por el programador, aunque los maneja interna y
transparentemente.
El manejo de la memoria no es un problema, la gestiona el propio lenguaje y no
el programador.
Genera aplicaciones con pocos errores posibles.
Incorpora Multi-Threading (para permitir la ejecución de tareas concurrentes
dentro de un mismo programa).
Utilización
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
El lenguaje Java se creó con cinco objetivos principales:
Debería usar el paradigma de la programación orientada a objetos.
Debería permitir la ejecución de un mismo programa en múltiples sistemas
operativos.
Debería incluir por defecto soporte para trabajo en red.
Debería diseñarse para ejecutar código en sistemas remotos de forma segura.
Debería ser fácil de usar y tomar lo mejor de otros lenguajes orientados a
objetos, como C++.
Para conseguir la ejecución de código remoto y el soporte de red, los
programadores de Java a veces recurren a extensiones como CORBA, Internet
Communications Engine o OSGi respectivamente.
Tipo
Programación orientada a Internet de lenguaje intermediario con propósito general, es
concurrente, esta basado en clases y orientado a objetos. Fue diseñado
específicamente para tener tan pocas dependencias de implementación como fuera
posible.
Su intención es permitir que los desarrolladores de aplicaciones escriban el programa
una vez y lo ejecuten en cualquier dispositivo (conocido en inglés como WORA, o
"write once, run anywhere"), lo que quiere decir que el código que es ejecutado en una
plataforma no tiene que ser recompilado para correr en otra. Java es, a partir del 2012,
uno de los lenguajes de programación más populares en uso, particularmente para
aplicaciones de cliente-servidor de web, con unos 10 millones de usuarios reportados.
Ejemplo código java:
// Hola.java
import javac.swing.JOptionPane;
public class Hola //Declara una clase llamada Hola, que es descendiente de la clase Object
{
//Entre llaves se declaran los atributos y métodos de la clase
public static void main(String[] args)
//public: indica que el método main()es público
//void: indica que la función main() no devuelve ningún valor
//El método main()debe aceptar siempre como parámetro un vector de strings
{
JOptionPane.showMessageDialog("Hola Mundo");
//Esta línea indica que se va a ejecutar el método showMessageDialog(), encargado de mostrar
//un valor a través de la salida estándar (en nuestro caso, un String)
//Este método pertenece al atributo out
}
}
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
4. MAPA CONCEPTUAL
LENGUAJES DE
PROGRAMACIÓN
Según su grado de independencia de
la máquina
Según la forma de sus instrucciones
Según la forma de ejecución
Lenguaje máquina
Orientados a
problemas concretos
Medio nivel
1ª Generación (1GL)
Compilados
Interpretados
DEFINICIÓN
Lenguaje artificial
diseñado para escribir
acciones que deben
obedecidas por una
máquina.
Bajo nivel
Alto nivel
Por generaciones
2ª Generación (2GL)
3ª Generación (3GL)
4ª Generación (4GL)
5ª Generación (5GL)
Imperativos
Funcionales
Programación
Orientada a objetos
Concurrentes
Intermediarios
Binario
Los ensambladores son programas que son usados para dar ordenes y lo transforman a
código máquina
Tienen mayor grado de abstracción pero mantienen algunas cualidades de los lenguajes de bajo nivel.
Ejemplo: C
Manejan conceptos, tipos de datos, etc., de una manera cercana al pensamiento humano ignorando
(abstrayéndose) del funcionamiento de la máquina.
Ejemplos: C++, Haskell, Python, OCAML, Java
Por ejemplo SQL orientado a bases de datos
Programan mediante una serie de comandos, agrupados en bloques y compuestos de órdenes condicionales que
permiten al programa retornar a un bloque de comandos
si se cumple la condición
Ejemplos: C++, Haskell, Python, OCAML, Java
Crea programas mediante funciones, devuelve un nuevo estado de resultado y recibe como entrada
el resultado de otras funciones.
Ejemplo: Python
Crean un sistema de clases y objetos siguiendo el ejemplo del mundo real, en el que unos objetos realizan
acciones y se comunican con otros objetos.
Ejemplo: C++, Python, OCAML, Java
Simultaneidad en la ejecución de múltiples tareas interactivas.
Algunos lenguajes pertenecen a ambas categorías de compilados e interpretados.
Ejemplo: LISP, Java, Python.
Código máquina
Lenguajes ensamblador
La mayoría de los lenguajes modernos, diseñados para facilitar la programación a los humanos.
Ejemplos: C++, Python, OCALM, Java
Diseñados para abordar un tipo concreto de problemas.
Ejemplos: NATURAL, Mathematica
El programador establece qué problema ha de ser resuelto y las condiciones a reunir, y la máquina lo
resuelve. Se usan en inteligencia artificial.
Ejemplo: Prolog
Se traduce el código fuente en código objeto. El enlazador une los ficheros de código objeto con los de
las librerías para producir el programa ejecutable.
Ejemplos: C++, Haskell, OCALM, Java
El intérprete traduce los comandos de los programas según sea necesario y de manera directa.
Ejemplos: Python, Lisp
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
5. TABLA DE CLASIFICACION DE LOS LENGUAJES
Clasificación C++ Haskell Python Objective CAML Java
Según su grado de independencia de la máquina
Alto nivel Alto nivel Alto nivel Alto nivel Alto nivel
Según la forma de sus instrucciones
Imperativo y orientado a objetos
Declarativo Imperativo, orientado a
objetos y funcional Imperativo y
orientado a objetos
Intermediario, Imperativo y orientado a
objetos
Por generaciones 3ª generación 5ª generación 3ª generación 3ª generación 3ª generación
Según la forma de ejecución Compilado Compilado Interpretado Compilado Compilado
Lenguajes de los que deriva C, CLU, ML, Simula, Ada 83, ALGOL 68
Miranda, ML, Gofer
ABC, ALGOL 68, C, Haskell, Icon, Lisp,
Modula-3, Perl, Smalltalk, Java
Caml Light, Standard ML
Objective-C, C++, Smalltalk, Eiffel
6. DATOS DE INTERES
Ranking de lenguajes más usados en la actualidad
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
Genealogía de los lenguajes de programación
Clasificación de lenguajes de programación Versión 1.0
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA
7. BIBLIOGRAFÍA
Página web propuesta por el profesor: http://www.levenez.com/lang/
Wikipedia: http://es.wikipedia.org/wiki
http://prezi.com/e77ysy3cc-ae/ramas-de-los-lenguajes-de-programacion-orientado-a-
objetos/
http://cdtextos.blogspot.com.es/2010/07/modelos-de-mapas-conceptuales.html
http://www.lcc.uma.es/~blas/pfHaskell/gentle/index.html
http://horru.lsi.uniovi.es/~labra/FTP/IntHaskell98.pdf
http://aprendehaskell.es/main.html
http://www.haskell.org/haskellwiki/Introduccion
http://clubensayos.com/Tecnolog%C3%ADa/Tabla-Comparativa-Acerca-De-
Los/293068.html
http://qbitacora.wordpress.com/2007/09/21/clasificacion-de-lenguajes-de-programacion/
http://structio.sourceforge.net/guias/progocaml/progocaml.html
http://www.gacetadelinux.com/es/lg/current/stellingwerff.html
Libro de Pearson “El lenguaje de programación C++”.