-Que es un Lenguaje de Programación?
Clasificación de los Lenguajes de Programación
-Imperativos
-Declarativos
Historia y Características de algunos Lenguajes
Ada - Objetos, Imperativo híbrido http://labsopa.dis.ulpgc.es/ada/
Smalltalk -
Objetos puro http://www.smalltalk.org/
Java - Objetos, Imperativo híbrido http://www.java.org/
C++ - Objetos, Imperativo, Hipertexto híbrido http://www.masternet.com.co/prod/delphi.htm
Pascal - Objetos, Imperativo híbrido busca un link en google, hay demasiados, el mejor es borland
Delphi - Objetos, Imperativo híbrido http://www.masternet.com.co/prod/delphi.htm
Ocaml - Objetos, Imperativo y Funcional híbrido http://www.ocaml.org/
Haskell - Funcional puro http://www.haskell.org/
Lisp - Funcional híbrido http://www.lisp.org/
Prolog - Lógico puro http://www.prolog.org/
Perl - Objetos, Imperativo, Hipertexto, Expresiones Regulares híbrido http://www.perl.org/
PHP - Imperativo, Hipertexto, híbrido http://www.php.org/
SQL - Lenguaje Declarativo, Expresiones Regulares http://www.sql.org/
UML -
Lenguaje Modelado http://www.uml.org/
Para cada lenguaje seleccionando su nombre podrás ver su historia y características y a la derecha tienes un link a un sitio que te brinda de todo demasiado.
¿Qué es un lenguaje de programación?. Un conjunto de sintaxis y reglas semánticas que definen los programas del computador. Es una técnica estándar de comunicación para entregarle instrucciones al computador. Un lenguaje le da la capacidad al programador de especificarle al computador, qué tipo de datos actúan y que acciones tomar bajo una variada gama de circunstancias, utilizando un lenguaje relativamente próximo al lenguaje humano.
Un programa escrito en un lenguaje de programación necesita pasar por un proceso de compilación, interpretación o intermedio, es decir, ser traducido al lenguaje de máquina para que pueda ser ejecutado por el ordenador.
Los lenguajes de programación pueden ser clasificados de acuerdo a diversos criterios:
Lenguajes interpretados (Interpretes) como Basic, Dbase.
Lenguajes compilados (Compiladores) como C, C++, Clipper.
Lenguajes interpretados con recolectores de basura (Maquina Virtual) como Smalltalk, Java, Ocaml.
Lenguajes Scripts (Motor de ejecución) como Perl, PhP.
Se les conoce como lenguajes declarativos en ciencias computacionales aquellos lenguajes de programación en los cuales se le indica a la computadora que es lo que se desea obtener o que es lo que se esta buscando, por ejemplo: Obtener los nombres de todos los empleados que tengan más de 32 años. Algunos ejemplos de lenguajes declarativos son el Datatrieve, SQL y las expresiones regulares.
Siglas de Structured Query Language (Lenguaje
Estructurado de Consultas). Es un lenguaje declarativo que aúna
características del Álgebra y el Cálculo Relacionales que nos permite lanzar
consultas contra una Base de Datos para recuperar información de nuestro
interés, almacenada en ella.
Ejemplos de consultas SQL:
SELECT Nombre From Tabl_fich_personales
where Edad >=18;
Muestra el Campo "Nombre" de todos los individuos mayores de 18 años de la tabla
"Tabl_fich_personales"
El concepto de expresiones regulares (Regular expressions en inglés) se refiere a una familia de lenguajes compactos y potentes para la descripción de conjuntos de cadenas de caracteres. Numerosos editores de texto y otras utilidades (especialmente en el sistema operativo UNIX), como por ejemplo sed y awk, utilizan estos lenguajes para buscar ciertas estructuras en el texto y, por ejemplo, remplazarlas con alguna otra cadena de caracteres.
En ciencias de la computación se llama lenguajes
imperativos a aquellos en los cuales se le ordena a la computadora
cómo realizar una tarea siguiendo una serie de pasos o instrucciones, por
ejemplo:
Paso 1, solicitar
número.
Paso 2, multiplicar número por dos.
Paso 3, imprimir resultado de la
operación.
Paso 4, etc,
Algunos ejemplos de lenguajes imperativos son: BASIC, C, C++, Java, Clipper, Dbase, C# y Perl.
Los equipos de ordenador (el hardware) han pasado por cuatro generaciones, de las que las tres primeras (ordenadores con válvulas, transistores y circuitos integrados) están muy claras, la cuarta (circuitos integrados a gran escala) es más discutible.
Algo parecido ha ocurrido con la programación de los ordenadores (el software), que se realiza en lenguajes que suelen clasificarse en cinco generaciones, de las que las tres primeras son evidentes, mientras no todo el mundo está de acuerdo en las otras dos. Estas generaciones no coincidieron exactamente en el tiempo con las de hardware, pero sí de forma aproximada, y son las siguientes:
Primera generación: Los primeros ordenadores se programaban directamente en código binario, que puede representarse mediante secuencias de ceros y unos sistema binario. Cada modelo de ordenador tiene su propio código, por esa razón se llama lenguaje de máquina.
Segunda generación: Los lenguajes simbólicos, así mismo propios de la máquina, simplifican la escritura de las instrucciones y las hacen más legibles.
Tercera generación: Los lenguajes de alto nivel sustituyen las instrucciones simbólicas por códigos independientes de la máquina, parecidas al lenguaje humano o al de las Matemáticas.
Cuarta generación: se ha dado este nombre a ciertas herramientas que permiten construir aplicaciones sencillas combinando piezas prefabricadas. Hoy se piensa que estas herramientas no son, propiamente hablando, lenguajes. Algunos proponen reservar el nombre de cuarta generación para la programación orientada a objetos.
Quinta generación: se llama así a veces a los lenguajes de la inteligencia artificial, aunque con el fracaso del proyecto japonés de la quinta generación el nombre ha caído en desuso.
Lenguaje de programación diseñado por Jean Ichbiah de Cii
Honeywell Bull por encargo del Departamento de Defensa de los EE.UU. para
unificar el uso de los lenguajes de programación en los proyectos que le fuesen
entregados. Es un lenguaje diseñado con la seguridad en mente y es
multipropósito, pudiendo llegar desde la facilidad de Pascal a la flexibilidad
de C pero con una filosofía orientada a la reducción de errores.
Su nombre conmemora a la condesa Ada Lovelace, hija de Lord Byron, a quien se considera la primera programadora de la Historia, por su relación con Charles Babbage, creador de la máquina analítica. El Departamento de Defensa de los Estados Unidos (DoD) y los ministerios equivalentes de varios países europeos exigen la utilización de este lenguaje en los proyectos realizados bajo su patrocinio. También es usado en otros entornos en los que también se necesita una gran seguridad como la gestión del tráfico aéreo (en empresas como Boeing o la española Indra).
Ada se diseñó de manera que permita evitar los errores comunes y difíciles de descubrir. Esto puede hacer que sea muy irritante para los programadores principiantes.
Hasta la fecha la ISO ha publicado dos ediciones del estándar de Ada: la original Ada 83 que incluía conceptos novedosos como las excepciones y la programación genérica; y la revisión Ada 95, que entre otras cosas añadió la capacidad de herencia para completar sus características de lenguaje OOP.
Un compilador de Ada muy usado es GNAT, originalmente desarrollado por la Universidad de Nueva York y mantenido en la actualidad por Ada Core Technologies. Está basado en la tecnología de GCC y es software libre.
Ejemplo: «Hola Mundo» en Ada es:
with
Ada.Text_IO; use Ada.Text_IO;
procedure
Hola_Mundo is
begin
Put_Line ("Hola Mundo");
end;
Aquí abajo hay un ejemplo más elaborado (función de Ackermann) de código fuente escrito en Ada, para mostrar sus rasgos principales.
with
Ada.Command_Line; use Ada.Command_Line;
with
Ada.Text_Io; use Ada.Text_Io;
procedure
Ackermann is
function ack (x : integer; y: integer)
return integer is
begin
if x = 0 then
return y + 1;
elsif y = 0 then
return ack(x-1,1);
else
return ack(x-1,ack(x,y-1));
end if;
end ack;
x,y,a : integer;
begin
if Argument_Count = 2 then
x := Integer'Value (Argument(1));
y := Integer'Value (Argument(2));
elsif Argument_Count = 1 then
x := 3;
y := Integer'Value (Argument(1));
else
x := 3;
y := 3;
end if;
a := ack (x,y);
Put ("Ack (" & Integer'Image (x)
& ",");
Put_Line (Integer'Image (y) & ")
= " & Integer'Image (a));
end Ackermann;
Podemos observar que:
La sintaxis, inspirada en Pascal, es bastante legible incluso para personas que no conozcan el lenguaje. Es un lenguaje que no escatima en la longitud de las palabras clave, en la filosofía de que un programa se escribe una vez, se modifica decenas de veces y se lee miles de veces (legibilidad es más importante que rapidez de escritura).
Todo es case-insensitive. Ya que todo el entorno Unix es case-sensitive, a algunos programadores de Unix no les gusta este rasgo de Ada.
En este caso, todo el programa es un solo procedimiento, que puede contener subprogramas (procedimientos o funciones) (en este caso: la función ack).
Cada sentencia se cierra con un end qué_cerramos. Es un modo de evitar errores y facilitar la lectura. No es necesario hacerlo en el caso de subprogramas, aunque todos los manuales lo aconsejan y casi todos los programadores de Ada lo hacen.
Se asigna un valor con :=, se comparan dos valores con =. A los programadores de C les puede confundir este rasgo inspirado en Pascal.
La sintaxis de atributos es objeto'atributo (o tipo'atributo) (nota: esto sólo aplica a los objetos predefinidos, ya que no es el concepto de atributo típico de OOP).
Se distingue entre "procedimientos" (subrutinas que no devuelven ningún valor pero pueden modificar sus parámetros) y "funciones" (subrutinas que devuelven un valor y no modifican los parámetros). La mayoría de lenguajes de programación no hacen esta distinción, sin embargo las funciones de Ada favorecen la seguridad al reducir los posibles efectos colaterales, pues no tienen parámetros in out.
Diseñado por Alan Kay durante los años setenta en el Palo Alto
Reasearch Institute de Xerox (conocido como Xerox Parc). Smalltalk era un
elemento de la primera computadora personal con interfaz gráfica el
"Alto" (que nunca fue llevado al mercado pero de cuyas ideas nació el
Macintosh).
Smalltalk es considerado el primero de los lenguajes orientados a
objetos (OOP). En Smalltalk TODO es un objeto.. aun los
números enteros. Smalltalk se basó en ideas de Simula (un lenguaje de
simulaciones).
Pero Smalltalk no es meramente un lenguaje, sino un entorno
completo, prácticamente un sistema operativo que se ejecuta encima de una
"máquina virtual". Esto asegura su máxima portabilidad entre
plataformas.
A pesar de ser un lenguaje muy simple, muy poderoso, y que
promueve buenas prácticas de programación, Smalltalk (hasta el 2002) no había
llegado a ser un lenguaje muy popular. Esto se debe a la poca aceptación de
lenguajes interpretados en los años 1980 y 1990. A pesar de esto algunas
empresas como Digitalk, VisualWorks e IBM llegaron a tener relativo éxito con
la plataforma como una herramienta de desarrollo rápido que competía contra
herramientas como PowerBuilder y en menor grado contra VisualBasic que eran muy
populares en los años 80 y 90.
En 1995, Sun Microsystems lanzó Java que es un lenguaje
fuertemente influenciado por Smalltalk. Un lenguaje que popularizaría el
concepto de lenguajes interpretados con recolectores de basura.
Ejemplos de Smalltalk:
En
Smalltalk todo es un objeto, y a un objeto le enviamos mensajes. Por ejemplo:
1
+ 1
Significa que al objeto "1" le enviamos el mensaje "+" con el parámetro "1". Este ejemplo entonces resulta en el valor "2".
Plataforma
de software desarrollada por Sun Microsystems. Esta plataforma ha sido
desarrollada de tal manera que los programas desarrollados para ella puedan
ejecutarse de la misma forma en diferentes tipos de arquitecturas y dispositivos
computacionales.
La
plataforma Java consta de tres partes:
Originalmente llamado OAK por Ingenieros de Sun Microsystems, Java fue diseñado
para correr en computadoras embebidas. Sin embargo, en 1995, dada la atención
que estaba produciendo la Web, Sun Microsystems la distribuyó para sistemas
operativos tales como Microsoft Windows.
El
lenguaje mismo adopta la sintaxis de C++, pero su funcionamiento es muy similar
al de Smalltalk. Incorpora sincronización y manejo de tareas en el lenguaje
mismo (similar a Ada) e incorpora interfaces como un mecanismo alternativo a la
herencia múltiple de C++.
A
fines del siglo XX, Java llegó a ser el lenguaje de mayor acogida para
programas de servidor. Utilizando una tecnología llamada JSP (similar a ASP de
Microsoft), se hizó muy fácil escribir páginas dinámicas para sitios de
Internet. Sumado a esto, la tecnología de JavaBeans,
al incorporarse con JSP, permitía utilizar el patrón MVC (Modelo-Vista-Controlador) que ya tanto
se había aplicado a interfaces gráficas.
Java
llegó a ser extremadamente popular cuando Sun Microsystems introdujo la
plataforma y el modelo de programación J2EE (Java 2 Enterprise Edition). Este modelo permite una
separación entre la presentación de los datos al usuario (JSP o Applets),
el modelo de datos (EJB), y el control (Servlets). Enterprise Java Beans
(EJB) que es una tecnología de objetos distribuídos que pudo lograr el
sueño de muchas empresas como Microsoft e IBM de crear una plataforma de
objetos distribuídos con un monitor de transacciones. Con este nuevo estándar,
empresas como BEA, IBM, Sun Microsystems, Oracle y otros crearon nuevos
"servidores de aplicaciones" que tuvieron gran acogida en el
mercado.
Además de programas del servidor, Java permite
escribir programas de interfaz gráfica o textual. Además se pueden correr
programas de manera incorporada o embebida en los navegadores web de Internet,
aunque esto nunca llegó a popularizarse como se esperaba en un principio.
Los programas en Java generalmente son compilados a un lenguaje
intermedio o bytecode, y luego interpretados por una máquina virtual
(JVM). Esta última sirve como una plataforma
de abstracción entre la máquina y el lenguaje permitiendo que se pueda
"escribir el programa una vez, y correrlo en cualquier lado". También
existen compiladores nativos de Java, tanto comercial como libre. El compilador
GCC de GNU compila Java a código de máquina con algunas limitaciones al año
2002.
import javax.swing.JFrame;import javax.swing.JLabel; public class HolaMundo extends javax.swing.JFrame { public static void main(String[] args) {System.out.println("Vamos a crear una ventana que ponga \"HolaMundo\"");
new HolaMundo(); } public HolaMundo() { super("HolaMundo"); JLabel etiqueta = new JLabel("HolaMundo");etiqueta.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
getContentPane().add(etiqueta); setSize(400,200); addWindowListener( new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { System.exit(0); } } ); setVisible(true);}
}
C++
(pronunciado "C plus plus" o "C más más", por algunos
programadores de habla hispana) es un lenguaje de programación, diseñado a
mediados de los ochenta, por Bjarne Stroustrup, como extensión del lenguaje de
programación C.
Es
un lenguaje híbrido, que se puede compilar y resulta más sencillo de aprender
para los programadores que ya conocen C. 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 como ROOT (http://root.cern.ch/) (enlace externo). Las
principales características del C++ son abstracción (encapsulación), el soporte
para programación orientada a objetos (polimorfismo) y el soporte de plantillas
o programación genérica (Templates). Las plantillas se las define de
la manera siguiente: template <parámetros> declaración X y se las instancia con X<parámetros>.
Pero
añade otra serie de propiedades que se encuentran más difícilmente en otros
lenguajes de alto nivel:
El
nombre C++ fue propuesto por Rick Masciatti en el año 1983,
cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio
científico. Antes se había usado el nombre "C con clases". En el C++,
"C++" significa "uno más de C" y se refiere a que C++ es
una extensión del C.
Algunos
dicen que "C++" todavía significa "C", porque
"++" en este caso es el operador de la postincrementación,
es decir, aumenta el valor de la expresión a la que se refiere, después, en las
instrucciones siguientes. Por esto el valor de la expresión en este momento
permanece original.
Aquí
hay un programa de ejemplo escrito en C++:
#include <iostream>
int main(){
std::cout << "¡Hola mundo!" << std::endl; }
Pascal
es un lenguaje de programación de alto nivel, desarrollado por Niklaus Wirth.
Se convirtió en uno de los lenguajes extensamente usados en lo cursos de
introducción a la programación, pues fue bien recibido como lenguaje de
enseñanza para estudiantes universitarios. Pascal es un lenguaje con técnicas
de programación estructurada, dicha programación hace programadores
disciplinados.
Sus
primeras versiones datan de 1970. Es un lenguaje de programación estructurado
creado por Niklaus Wirth, un profesor del Instituto tecnológico de Zurich, que
lo creó pensando en un lenguaje didáctico que enseñase la programación como
"una disciplina sistemática basada en determinados conceptos
fundamentales". Estos conceptos más tarde se tornarían motivo de
controversia entre los que creen que este lenguage tiene utilidad limitada a
los medios academicos, como Brian W. Kernighan.
A
partir de los años setenta se convirtió en el sucesor de ALGOL en el entorno
universitario. Pascal permite construir programas muy legibles. Wirth es
también autor del lenguaje Modula-2 y de Oberon.
El
lenguaje de programación Delphi es una versión orientada a objetos moderna del
lenguaje Pascal y es ampliamente utilizada en la industria de software.
PROGRAM Ejemplo(INPUT, OUTPUT); FUNCTION PreguntaNombre:STRING;VAR nombre:STRING;BEGIN REPEAT WRITELN('Ingresa tu nombre:'); READLN(nombre); UNTIL nombre <> ''; PreguntaNombre := nombre;END; PROCEDURE Saluda;VAR nombre:STRING; BEGIN nombre := PreguntaNombre;IF nombre = 'wirth' THEN
WRITELN('Hola señor Wirth!'); ELSE WRITELN('Hola '+nombre);
END; BEGIN Saluda;END.
En
la ciencia de la computación, Pascal es uno de los hitos de lenguajes de
programación el cual tiene definido la programación de computadora y esta
todavía en uso hoy en día.
Niklaus
Wirth lo desarrollo para hacer posible la programación estructurada que seria
mas fácil para un compilador para procesar. Pascal se baso en el lenguaje de
programación Algol y su nombre se debe en honor del matemático Blaise Pascal.
Wirth también desarrollo Modula-2 y Oberon, lenguajes similares a Pascal el
cual también soporta programación orientada a objetos.
A
diferencia de lenguajes de programación descendientes de C, Pascal utiliza :=
para asignamiento en vez de =. Esto es una ventaja en diferenciar comparaciones
y asignamientos. En C = = es comparación, pero = es una asignación. Esas pueden
ser fáciles de confundir resultando en una línea de asignamiento en vez de comparación.
También = tiene siempre siendo comparación en matemáticas, así a cambiar el
significado en un lenguaje de programación resulta en confusión. Esta sintaxis
conduce a muchos errores [bugs] difíciles de rastrear en código C. Desde que
Pascal no permite asignamientos en línea y utiliza sintaxis distinta para
asignamientos y comparaciones, esto no sufre de esos errores.
Otra
mayor diferencia es que Pascal se determina el tipo fuertemente. Esto significa
que toda variable debe ser definida con un tipo especifico antes que puedan ser
usadas. También, asignamientos de variable incompatibles no son permitidas sin
un tipo explicito. Esto previene errores comunes donde variables son usadas
incorrectamente por que el tipo es desconocido. Esto también aliviana la
necesidad de notación húngara - la practica de nombres de variables sufijos con
tipo- identificando letras.
Primeros
acercamientos (mas notables en UCSD p-System) trasladar código Pascal dentro de
una representación de p-Code de máquina independiente. Este código
intermediario fue entonces interpretado por un programa especifico a cada
arquitectura. Como una consecuencia, solo el interprete pequeño tuvo que ser
portada a muchas arquitecturas.
En
los 1980s Anders Hejlsberg escribió el compilador Blue Label Pascal para la
Nascom-2. Mas tarde el fue a trabajar para Borland y rescribió su compilador
que se convirtió en Turbo Pascal para la IBM PC. Este nuevo compilador se
vendió por $49, el cual fue mucho menos que el precio que Hejlsberg originalmente
solicito para el compilador Blue Label Pascal.
El
barato compilador de Borland tubo una larga influencia en la comunidad de
Pascal que comenzó concentrándose principalmente en el IBM PC a finales de los
80. Muchos aficionados a la PC en busca de un estructurado reemplazo para el
BASIC utilizo este producto. Turbo Pascal, siendo disponible solo en una
arquitectura, trasladada directamente al código de máquina del Intel 8088,
haciéndola mucho mas rápida que esquemas interpretados.
Durante
los 90s compiladores que pudieron redesignar a diferentes arquitecturas de
hardware se convirtieron mas común. Esto permitió para Pascal traducción a
código de maquina nativo que fue al mismo tiempo fácil portar a hardware nuevo.
Con
Turbo Pascal versión 5 Borland agregó orientación a objetos a Pascal. Sin
embargo, Borland después decidió característica orientado a objetos mas
elaborada, y volvió a empezar en Delphi usando el proyecto estándar Object
Pascal propuesto por Apple como una base. (Este proyecto de Apple no es un
estándar formal aún) Borland también llamo este Object Pascal en las primeras
versiones de Delphi, pero cambio el nombre a lenguaje de programación Delphi en
sus ultimas versiones. Los primeros cambios comparando a las viejas extensiones
OOP fueron una basada-referencia modelo objeto, constructores y destructores
virtuales, y propiedades. Hay otros compiladores implementando este dialecto:
vease lenguaje de programación Delphi.
Varios
compiladores de Pascal están disponibles para el uso del publico en general:
Mientras
muy popular (aunque mucho mas en los 80s y principios de los 90s que en el
tiempo de su escritura), primeras versiones de Pascal han sido extensamente
criticadas por ser impropio para "serio" uso fuera de enseñanza.
Brian Kernighan, co-creador de el lenguaje de programación C, delineo su mas
notables criticas de Pascal como a principios como en 1981, en su papel Why
Pascal Is Not My Favorite Programming Language.Desde este tiempo Pascal ha
continuado evolucionando y la mayoría de sus puntos no aplica a las
implementaciones actuales.
Muchas
personas ignorantes todavia subscriben a la creencia vieja que Pascal no es
para "seria" programación y no comprende los beneficios que actualmente
ofrece. Este estigma, mas de cualquier deficiencia real, es la obligacion mas
grande de Pascal.
Un
ejemplo comun de una sintaxis de lenguaje es el programa Hola mundo
PROGRAM Holamundo; BEGIN WriteLn('¡Hola mundo!'); END.
Todos
los programas comienzan con la palabra clave "Program", y un bloque
de código es indicado con el "Begin"/"End" . Case es
ignorado en el lenguaje Pascal. Punto y coma separa las declaraciones, y el
periodo termina el programa (o unidad). Para algunos compiladores la línea de
Program es opcional.
Delphi
es un entorno de programación visual basado en una versión moderna del lenguaje
de programación Pascal. Como entorno visual, la programación en Delphi consiste
en diseñar las pantallas de que se compone el programa colocando todos sus
componentes (botones, campos de texto, etc.), asociando después código a ellos.
El lenguaje utilizado por Delphi es una extensión de Pascal denominada Object
Pascal, que básicamente añade al Pascal tradicional soporte para la
programación orientada a objetos (habitualmente llamada POO).
Además
de poder utilizar en un programa los controles estándar de los programas
Windows (botones, etc.), es posible crear controles nuevos, denominados
componentes. En internet existe un gran número de componentes, tanto gratuitos
como comerciales, disponibles para los programadores a los que no les basten
los que vienen ya con el programa.
Delphi
es una herramienta comercial para Windows, cuyo fabricante es la empresa
norteamericana Borland. Existe una versión de Delphi para sistemas UNIX y
LINUX, denominada Kylix (de la cual existe un version libre, pero limitada).
Existe un desarrollo de la comunidad del software libre que intenta producir
una versión multiplataforma y completamente libre de Delphi llamado Lazarus (http://www.lazarus.freepascal.org/).
El
nombre proviene del Oráculo de Delfos.
El lenguaje Objective CAML,
también llamado Ocaml u O'Caml, 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.
Ocaml nace de la evalución del lenguaje
CAML (http://www.pps.jussieu.fr/~cousinea/Caml/caml_history.html),
abreviación de Categorical Abstract Machine Language, al integrarse la
programación con objetos.
El código fuente en Ocaml se compila en
código para una máquina virtual o en código nativo para diferentes
arquitecturas que incluyen IA32, IA64, PowerPC, AMD64, Sparc, Alpha, HP/PA,
MIPS y StrongARM. Este último compilador produce código comparable en
eficiencia al producido por compiladores como el del lenguaje C/C++ (http://shootout.alioth.debian.org/).
Ocaml dispone de un análisis de tipos
estático con inferencia de tipos, valores funcionales de primera clase,
polimorfismo paramétrizado, llamada por patrones, manejo de excepciones,
recolección de basura y otras características avanzadas
(* Manipulación de listas *) (* Listas genéricas *) (* Longitud de una lista *)let rec long = function
|[ ] -> 0 |x::xs -> 1 + long xs;; (* Ordenamiento por inserción *) (* dada una relación de orden *)let rec ordenar = function
|[ ] -> [ ]
|x::xs -> insertar x (ordenar xs)and insertar e = function
|[ ] -> [e]
|x::xs -> if x > e then e::x::xs else x::(insertar e xs);; # let l = ["La"; "vida"; "es"; "un"; "largo"; "y"; "tranquilo"; "rio"];; - : string list = ["La"; "vida"; "es"; "un"; "largo"; "y"; "tranquilo"; "rio"] # long l;;
- : int = 8 # ordenar l;; - : string list =["La"; "es"; "largo"; "rio"; "tranquilo"; "un"; "vida"; "y"]
(* Arboles *) (* Definición de un árbol binario, para cualquier tipo 'a *) type 'a arbol = AVac | Nodo of ('a arbol * 'a * 'a arbol);; let a = Nodo(AVac, 4, Nodo(AVac, 2, AVac));; (* Altura del árbol *)let rec altura = function
|AVac -> 0
|Nodo(i, _, d) -> 1 + max (altura i) (altura d) ;; # altura a;; - : int = 2
Hacia 1950, John McCarthy diseñó el lenguaje LISP (List Processing) que utilizaba las listas como tipo básico y admitía funciones de orden superior. Este lenguaje se ha convertido en uno de los lenguajes más populares en el campo de la inteligencia Artificial. Sin embargo, para que el lenguaje fuese práctico, fue necesario incluir características propias de los lenguajes imperativos como la asignación destructiva y los efectos laterales que lo alejaron del paradigma funcional. Actualmente ha surgido una nueva corriente defensora de las características funcionales del lenguaje encabezada por el dialecto Scheme, que aunque no es puramente funcional, se acerca a la definición original de McCarthy.
En 1964, Peter Landin diseñó la máquina abstracta SECD para mecanizar la evaluación de expresiones, definió un subconjunto no trivial de Algol-60 mediante el cálculo lambda e introdujo la familia de lenguajes ISWIM (If You See What I Mean) con innovaciones sintácticas (operadores infijos y espaciado) y semánticas importantes.
En 1978 J. Backus (uno de los diseñadores de FORTRAN y ALGOL) consiguió que la comunidad informática prestara mayor atención a la programación funcional con su artículo “Can Programming be liberated from the Von Neumann style?” en el que criticaba las bases de la programación imperativa tradicional mostrando las ventajas del modelo funcional.
Además Backus diseñó el lenguaje funcional FP (Functional Programming) con la filosofía de definir nuevas funciones combinando otras funciones.
A
mediados de los 70, Gordon trabajaba en un sistema generador de
demostraciones denominado LCF que incluía el lenguaje de programación ML (Metalenguaje).
Aunque el sistema LCF era interesante, se observó que el lenguaje ML podía
utilizarse como un lenguaje de propósito general eficiente. ML optaba por una
solución de compromiso entre el modelo funcional y el imperativo ya que, aunque
contiene asignaciones destructivas y Entrada/Salida con efectos laterales,
fomenta un estilo de programación claramente funcional. Esa solución permite
que los sistemas ML compitan en eficiencia con los lenguajes imperativos. A
mediados de los ochenta se realizó un esfuerzo de estandarización que culminó
con la definición de SML (Stándar ML).
Este lenguaje es fuertemente tipado con resolución estática de tipos,
definición de funciones polimórficas y tipos abstractos. Actualmente, los
sistemas en SML compiten en eficiencia con los sistemas en otros lenguajes
imperativos y han aparecido proyectos como Fox Project 1994 [HL94] que
pretenden desarrollar un nuevo lenguaje ML2000 con subtipos y módulos de orden
superior.
Al mismo tiempo que se desarrollaban FP y ML, David
Turner (primero en la Universidad de St. Andrews y posteriormente en la
Universidad de Kent) trabajaba en un nuevo estilo de lenguajes funcionales con
evaluación perezosa y definición de funciones mediante encaje de patrones. El
desarrollo de los lenguajes SASL (St. Andrews Static Language), KRC (Kent
Recursive Calculator) y Miranda tenía como objetivo facilitar la
tarea del programador incorporando facilidades sintácticas como las guardas, el
encaje de patrones, las listas por comprehensión y las secciones.
A comienzos de los ochenta surgieron una gran cantidad
de lenguajes funcionales debido a los avances en las técnicas de implementación.
Entre éstos, se podrían destacar Hope, LML, Orwell, Erlang, FEL, Alfl, etc.
Esta gran cantidad de lenguajes perjudicaba el desarrollo del paradigma
funcional. En septiembre de 1987, se celebró la conferencia FPCA en Portland,
Oregon, en la que se discutieron los problemas que creaba esta proliferación.
Se decidió formar un comité internacional que diseñase un nuevo lenguaje
puramente funcional de propósito general denominado Haskell [Hud92].
Con el lenguaje Haskell se pretendía unificar las
características más importantes de los lenguajes funcionales. 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 librerías de propósito general.
Posteriormente, surge la versión 1.4 con ligeras modificaciones.
En 1998 se ha decidido proporcionar una versión estable del
lenguaje, que se denominará Haskell98 a la vez que se continúa la
investigación de nuevas características.
La principal información sobre el lenguaje Haskell puede
consultarse en la dirección: http://www.haskell.org
Después
de Fortran es el segundo lenguaje de programación de alto nivel. LISP fue
creado por John McCarthy y sus colaboradores en el MIT.
El
elemento fundamental en LISP es la lista, en el sentido más amplio del término,
pues tanto los datos como los programas son listas. De ahí viene su nombre,
pues LISP es un acrónimo de "LIStProcessing".
Los
lenguajes de este tipo se llaman "aplicativos" o "funcionales",
porque se basan en la aplicación de funciones a sus datos.
En LISP se distinguen dos tipos fundamentales de elementos:
En
LISP, una función se expresa como una lista.
Algunas
de las funciones predefinidas de LISP tienen símbolos familiares (+ para la
suma, * para el producto), pero otras son más exóticas, especialmente dos que
sirven precisamente para manipular listas, descomponiéndolas en sus
componentes.
Sus nombres ("car" y "cdr") son un poco extraños, reliquias
de tiempos pasados y de la estructura de los ordenadores de segunda generación,
"car" devuelve la cabeza de una lista y "cdr" su cola o
resto.
LISP
sigue una filosofía de tratamiento no-destructivo de los parámetros, de modo
que la mayoría de las funciones devuelven un lista resultado de efectuar alguna
transformación sobre la que recibieron, pero sin alterar esta última.
Uno
de los motivos por los que LISP es especialmente adecuado para la IA es el
hecho de que el código y los datos tengan el mismo tratamiento (como listas);
esto hace especialmente sencillo escribir programas capaces de escribir otros
programas según las circunstancias.
Un
lenguaje de programación derivado del Lisp es el Logo. Sin entrar en detalles,
podría decirse que Logo es Lisp sin paréntesis y con operadores aritméticos
infijos.
(defun fact (n)
(if (<= n 1) 1 (* n (fact (- n 1))))) (defun fibo (n)
(if (<= n 2) 1 (+ (fibo (- n 1)) (fibo (- n 2)))))
La Programación Lógica es un Paradigma de Programación basado en la Lógica. Los programas construidos un lenguaje lógico están construidos únicamente por expresiones lógicas, es decir, que son ciertas o falsas, en oposición a un expresión interrogativa (una pregunta) o expresiones imperativas (una orden). Un ejemplo de lenguaje lógico es Prolog (Programación lógica).
Prolog, proveniente del inglés Programming in Logic, es un lenguaje lógico bastante popular en el medio de investigación en Inteligencia Artificial. Prolog es un lenguaje muy diferente, tanto de los imperativos como Fortran, Pascal, C etc, como de los funcionales como Lisp. En todos los mencionados, las instrucciones se ejecutan normalmente en orden secuencial, es decir, una a continuación de otra, en el mismo orden en que están escritas, que sólo varía cuando se alcanza una instrucción de control (un bucle, una instrucción condicional o una transferencia).
En Prolog, las cosas son distintas: el orden de ejecución de las instrucciones no tiene nada que ver con el orden en que fueron escritas. Tampoco hay instrucciones de control propiamente dichas. Para trabajar con este lenguaje, un programador debe acostumbrarse a pensar de una manera muy diferente a la que se utiliza en los lenguajes clásicos.
Las instrucciones de Prolog se llaman "reglas o
cláusulas de Horn" y esencialmente pueden representarse así: "Hacer
esto si se cumplen tales o cuales condiciones". Una instrucción se
ejecutará automáticamente en cualquier momento en que se cumplan las
condiciones especificadas. Además de las reglas, también se definen
"factors" en la cual se aplicarán las reglas. Es decir, en Prolog, un
programa consiste de una descripción lógica de una teoría y la computación es
la deducción de la teoría para una dada consulta.
Ejemplo:
%%
%% declaraciones
%%
padrede('juan', 'maria'). % juan es padre de maria
padrede('pablo', 'juan'). % pablo es padre de juan
padrede('pablo', 'marcela').
padrede('carlos', 'debora').
% A es hijo de B si B es padre de A
hijode(A,B) :- padrede(B,A).
% A es abuelo de B si A es padre de C y C es padre B
abuelode(A,B) :- padrede(A,C), padrede(C, B).
% A y B son hermanos si el padre de A es tambien el padre de B y si A y B no son lo mismo
hermanode(A,B) :- padrede(C,A) , padrede(C,B), A <> B.
% A y B son familiares si A es padre de B o A es hijo de B o A es hermano de B
familiarde(A,B) :- padrede(A,B) ; hijode(A,B) ; hermanode(A,B).
%%
%% consultas
%%
% juan es hermano de marcela?
?- hermanode('juan', 'marcela').
si
% carlos es hermano de juan?
?- hermanode('carlos', 'juan').
no
% pablo es abuelo de maria?
?- abuelode('pablo', 'maria').
si
% maria es abuelo de pablo?
?- abuelode('maria', 'pablo').
no
Perl
(Practical Extraction and Report
Language) es un lenguaje de programación desarrollado por
Larry Wall (lwall at netlabs.com) a partir otras herramientas de UNIX como son:
ed,grep,awk,c-shell, para la administración de tareas propias de sistemas UNIX.
No
establece ninguna filosofía de programación concreta. No se puede decir que sea
orientado a objetos, modular o estructurado aunque soporta directamente todos
estos paradigmas y su punto fuerte son las labores de procesamiento de textos y
archivos.
No
es ni un compilador ni un intérprete, esta en un punto intermedio, cuando
mandamos a ejecutar un programa en Perl, se compila el código fuente a un
código intermedio en memoria que se optimiza como si se fuera a elaborar un
programa ejecutable pero es ejecutado por un motor, como si se tratase de un
interprete.
Lenguaje
de programación basado en scripts portable a casi cualquier plataforma. Es muy
utilizado para escribir CGIs.
Lenguaje
optimizado para el escaneo de texto arbitrario de ficheros. Es también un buen
lenguaje para tareas de administración de sistemas. Es un lenguaje con
intención de ser práctico en lugar de bonito. Satisface las tres virtudes del
programador: flojera, impaciencia y petulancia.
Según
el manual, Perl también significa Pathologically Eclectic Rubbish Lister.
Resumen
técnico de PERL.
PERL
es un lenguaje de script de tipo BCPL (como TCL o PHP), muy semejante al AWK (de
hecho está basado en él), de tipo estructurado con trazas de orientación a
objetos (no completamente soportado de forma directa), que permite el
desarrollo rápido de aplicaciones y herramientas especialmente orientadas al
tratamiento de textos y archivos, aunque actualmente también se utiliza incluso
para entornos graficos, en combinación con sistemas como Perl/TK o GTK.
Básicamente,
es un lenguaje que se ha intentado que sea lo más natural posible, lo que
conlleva que en ocasiones nos encontremos estructuras poco habituales en un
lenguaje de este tipo:
print "hola" if $saludo == 1;
Destaca
también el uso de variables especiales, muy habituales en los lenguajes de tipo
script en los sistemas de tipo Unix. Estas variables permiten realizar una
serie de operaciones sobre los datos y los archivos que aportan a PERL una
flexibilidad y potencia enormes. Además de variables que podemos encontrar en
otros lenguajes como @ARGV (indica los parámetros con los que se ha llamado al
programa) o %ENV
(indica las variables de entorno de la aplicación), podemos utilizar también
variables como $_
(que representa el último dato que llegó por la entrada estandar), o $/, que nos indica si PERL debe enviar el
texto a la salida estandar inmediatamente (o al flujo de salida que le hayamos
indicado previamente). PERL tiene implementadas las expresiones regulares,
(regular expressions), lo que le da una potencia muy grande en el procesamiento
de textos.
PHP
(acrónimo de "PHP: Hypertext Preprocessor") es un lenguaje de
programación de scripts, concebido en el tercer trimestre de 1994 por Rasmus
Lerdorf. Se utiliza principalmente para la programación de CGIs para páginas
web, destaca por su capacidad de ser embebido en el código HTML. Además, existe
un compilador comercial (el Zend Optimizer).
Las
primeras versiones no distribuidas al público fueron usadas en un sus páginas
web para mantener un control sobre quien consultaba su currículum. La primera
versión disponible para el público a principios de 1995 fue conocida como
"Herramientas para paginas web personales" (Personal Home Page
Tools). Consistían en un analizador sintáctico muy simple que solo entendía
unas cuantas macros y una serie de utilidades comunes en las páginas web de
entonces, un libro de visitas, un contador y otras pequeñas cosas.
El
analizador sintáctico fue reescrito a mediados de 1995 y fue nombrado PHP/FI
version 2. FI viene de otro programa que Rasmus había escrito y que procesaba
los datos de formularios. Así que combinó las "Herramientas para páginas
web personales", el "intérprete de formularios", añadió soporte
para mSQL y PHP/FI vio la luz. PHP/FI creció a gran velocidad y la gente empezó
a contribuir en el código.
PHP
3 fue creado por Andi Gutmans y Zeev Zuraski en 1997 reescribiéndolo completamente,
después de que encontraran que PHP/FI 2 tenía pocas posibilidades para
desarrollar su propia aplicación comercial.
Una
de las mejores características de PHP 3 era su gran extensibilidad. Además de
proveer a los usuarios finales de una sólida infraestructura para muchísimas
bases de datos, protocolos y APIs. Las características de extensibilidad de PHP
3 atrajeron a docenas de desarrolladores a unirse y enviar nuevos módulos de
extensión. Sin duda, ésta fue la clave del enorme éxito de PHP 3 frente a otras
tecnologías de generación de páginas para la web.
Todo
el nuevo lenguaje fue liberado bajo un nuevo nombre, que borraba la implicación
de uso personal limitado que tenía el nombre PHP/FI. Se llamó 'PHP' a secas,
con el significado de ser un acrónimo recursivo "PHP: Hypertext
Preprocessor". A finales de 1998, PHP creció hasta una base de instalación
de decenas de millares de usuarios (estimados) y cientos de miles de sitios web
informando de su instalación. En su apogeo, PHP 3 estaba instalado en aproximadamente
un 10% de los servidores web en Internet.
Andi
Gutmans y Zeev Suraski comenzaron a trabajar en la versión 4 reescribiendo el
núcleo de PHP. Los objetivos de diseño fueron mejorar la ejecución de
aplicaciones complejas, y mejorar la modularidad del código base de PHP. El
nuevo motor, apodado 'Motor Zend' (comprimido de sus apellidos, Zeev y Andi),
alcanzó estos objetivos de diseño satisfactoriamente, y se introdujo por
primera vez a mediados de 1999. PHP 4, basado en este motor, y acoplado con un
gran rango de nuevas características adicionales, fue oficialmente liberado en
Mayo de 2000.
En
junio de 2003 se liberó la primera versión beta de PHP 5, con más mejoras sobre
el motor Zend y otras importantes características como el soporte de datos XML
y adaptación al protocolo IP versión 6.
Los
principales usos del PHP son los siguientes:
Sigue
un ejemplo de una aplicación web sencilla, en PHP:
<html>
<head> <title>Ejemplo</title> </head> <body> <?php if (isset($_POST['muestra'])) { echo 'Hola, '.htmlentities($_POST['nombre']).', tu comida favorita es:'. htmlentities($_POST['comida']);
} else {
?> <form method="POST">¿Cuál es tu nombre?
<input type="text" name="nombre"/>
¿Cuál es tu comida favorita?
<select name="comida">
<option>Spaghetti</option> <option>Asado</option> <option>Pizza</option> </select> <input type="submit" name="muestra" value="Seguir"> </form> <?php}
?> </body></html>
Podemos
Observar que: