CLF-Clasificación de lenguajes de programación

24
COMPILADORES Y LENGUAJES FORMALES GRADO INGENIERÍA INFORMÁTICA ACTIVIDAD 1: Clasificación de los lenguajes de programación AUTOR: DAVID SÁNCHEZ RUIZ

Transcript of CLF-Clasificación de lenguajes de programación

Page 1: CLF-Clasificación de lenguajes de programación

COMPILADORES Y LENGUAJES FORMALES

GRADO INGENIERÍA INFORMÁTICA

ACTIVIDAD 1: Clasificación de los

lenguajes de programación

AUTOR:

DAVID SÁNCHEZ RUIZ

Page 2: CLF-Clasificación de lenguajes de programación

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

Page 3: CLF-Clasificación de lenguajes de programación

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

Page 4: CLF-Clasificación de lenguajes de programación

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.

Page 5: CLF-Clasificación de lenguajes de programación

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.

Page 6: CLF-Clasificación de lenguajes de programación

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

Page 7: CLF-Clasificación de lenguajes de programación

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.

Page 8: CLF-Clasificación de lenguajes de programación

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.

Page 9: CLF-Clasificación de lenguajes de programación

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.

Page 10: CLF-Clasificación de lenguajes de programación

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

Page 11: CLF-Clasificación de lenguajes de programación

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.

Page 12: CLF-Clasificación de lenguajes de programación

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.

Page 13: CLF-Clasificación de 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

Page 14: CLF-Clasificación de lenguajes de programación

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++.

Page 15: CLF-Clasificación de 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 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.

Page 16: CLF-Clasificación de lenguajes de programación

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++.

Page 17: CLF-Clasificación de lenguajes de programación

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.

Page 18: CLF-Clasificación de lenguajes de programación

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

Page 19: CLF-Clasificación de lenguajes de programación

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

Page 20: CLF-Clasificación de 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 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

}

}

Page 21: CLF-Clasificación de lenguajes de programación

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

Page 22: CLF-Clasificación de lenguajes de programación

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

Page 23: CLF-Clasificación de lenguajes de programación

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

Page 24: CLF-Clasificación de 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++”.