Lenguaje de programación AdaAda es un lenguaje de programación estructurado y fuertemente tipado de forma estática que fue diseñado por Jean Ichbiah de CII Honeywell Bull por encargo del Departamento de Defensa de los EE.UU. Es un lenguaje multipropósito, orientado a objetos y concurrente, pudiendo llegar desde la facilidad de Pascal hasta la flexibilidad de C++.
Fue diseñado con la seguridad en mente y con una filosofía orientada a la reducción de errores comunes y difíciles de descubrir. Para ello se basa en un tipado muy fuerte y en chequeos en tiempo de ejecución (desactivables en beneficio del rendimiento). La sincronización de tareas se realiza mediante la primitiva rendezvous.
Ada se usa principalmente en entornos en los que se necesita una gran seguridad y confiabilidad como la defensa, la aeronáutica (Boeing o Airbus), la gestión del tráfico aéreo (como Indra en España) y la industria aeroespacial entre otros.
Historia
El lenguaje fue diseñado bajo encargo del Departamento de Defensa de los Estados Unidos (DoD). Durante los años 1970, este departamento tenía proyectos en una infinidad de lenguajes y estaba gastando mucho dinero en software. Para solucionarlo se buscó un lenguaje único que cumpliese unas ciertas normas recogidas en el documento Steelman. Después de un estudio de los lenguajes existentes en la época se decidió que ninguno las cumplía totalmente, por lo que se hizo un concurso público al que se presentaron cuatro equipos, cuyas propuestas se nombraron con un color: Rojo (Intermetrics), Verde (CII Honeywell Bull), Azul (SofTEch) y Amarillo (SRI International). Finalmente en mayo de 1979 se seleccionó la propuesta Verde diseñada por Jean Ichbiah de CII Honeywell Bull, y se le dio el nombre de Ada. Esta propuesta era un sucesor de un lenguaje anterior de este equipo llamado LIS y desarrollado durante los años 1970.
El nombre se eligió en conmemoración de lady Ada Augusta Byron (1816-1852)Condesa de Lovelace,hija del poeta Lord George Byron, a quien se considera la primera programadora de la Historia, por su coolaboración y relación con Charles Babbage, creador de la máquina analítica.
El lenguaje se convirtió en un estándar de ANSI en 1983 (ANSI/MIL-STD 1815) y un estándar ISO en 1987 (ISO-8652:1987).
El Departamento de Defensa de los EE. UU. y los ministerios equivalentes de varios países de la OTAN exigían el uso de este lenguaje en los proyectos que contrataban (el Ada mandate). La obligatoriedad en el caso de Estados Unidos terminó en 1997, cuando el DoD comenzó a usar productos COTS (commercial off the shelf).
Estándar ISO
Hasta la fecha la ISO ha publicado dos ediciones del estándar de Ada: la original Ada 83 y la última Ada 95 (ISO/IEC 8652:1995). A diferencia de otros estándares de ISO, el de Ada es libremente reproducible [http://www.adahome.com/rm95/].
Ada 83 incluía conceptos novedosos como el manejo de excepciones y la programación genérica. Por sus capacidades de encapsulación y polimorfismo paramétrico (genéricos), se podía considerar ya en esa época un lenguaje basado en objetos.
La revisión Ada 95 fue diseñada por Tucker Taft de Intermetrics entre 1992 y 1995. Esta edición entre otras cosas añadió la capacidad de herencia y el despachado dinámico (dynamic dispatching) para completar sus características de lenguaje orientado a objetos. De hecho fue el primer lenguaje orientado a objetos estandarizado por ISO.
Actualmente se está trabajando en Ada 200Y, la siguiente revisión del lenguaje que seguramente se publicará a finales de 2005 o principios de 2006. Todavía no está decidido si finalmente se denominará Ada 2005 o Ada 2006.
Compiladores
Un compilador de Ada muy usado es GNAT, originalmente desarrollado por la Universidad de Nueva York bajo patrocinio del DoD. Está basado en la tecnología de GCC y es software libre. Actualmente está mantenido por AdaCore (antes llamada Ada Core Technologies), empresa que ofrece soporte y servicios sobre el compilador.
Existen otros compiladores comerciales.
Ejemplo de código Ada
El típico ejemplo de Hola mundo en Ada es:
with Ada.Text_IO; use Ada.Text_IO;
procedure Hola_Mundo is
begin
Put_Line ("Hola Mundo");
end;
Aquí debajo hay un ejemplo más elaborado (función de Ackermann) de código fuente escrito en Ada, para mostrar algunos de sus rasgos sintácticos.
with Ada.Command_Line; use Ada.Command_Line;
with Ada.Text_IO; use Ada.Text_IO;
procedure Ackermann is
function Ack (X, 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, Resultado : 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;
Resultado := Ack (X, Y);
Put_Line ("Ack (" & Integer'Image (X) & "," & Integer'Image (Y)
& ") = " & Integer'Image (Resultado));
end Ackermann;
Entre las características que encontramos en este ejemplo se puede destacar:
- 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).
- Identificadores y palabras claves son equivalentes sea cual sea el uso de mayúsculas y minúsculas, es decir es un lenguaje case-insensitive.
- En este caso, todo el programa es un único procedimiento, que puede contener subprogramas (procedimientos o funciones) (en este caso: la función Ack).
- Cada sentencia se cierra con 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.
- El operador de asignación es :=, el de igualdad =. A los programadores de C y similares les puede confundir este rasgo inspirado en Pascal.
- La sintaxis de atributos predefinidos es Objeto'Atributo (o Tipo'Atributo) (nota: esto sólo aplica a atributos predefinidos por el lenguaje, 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). Muchos lenguajes de programación no hacen esta distinción. Las funciones de Ada favorecen la seguridad al reducir los posibles efectos colaterales, pues no pueden tener parámetros in out.
Véase también
- Lenguaje de programación SPARK
- Perfil de Ravenscar
Enlaces externos
- En español:
- [http://iio.ens.uabc.mx/~jmilanez/escolar/sistemas_operativos/expo-1.html Curso básico de Ada 83 en uabc.mx]
- [http://www.gedlc.ulpgc.es/docencia/NGA/index.html Curso básico de Ada 95 en ulpgc.es]
- [http://www.adaspain.org Asociación Ada-Spain]
- [http://dmoz.org/World/Espa%c3%b1ol/Computadoras/Programaci%c3%b3n/Lenguajes/Ada/ Directorio de páginas sobre Ada]
- [http://www.canalada.org/ canalada.org - Foro sobre Ada]
- En inglés:
- [http://www.adaworld.com Ada World]
- [http://www.adapower.com Ada Power]
- [http://www.ada-europe.com Asociación Ada-Europe]
- [http://dmoz.org/Computers/Programming/Languages/Ada/ Directorio de páginas sobre Ada]
- [http://www.iuma.ulpgc.es/users/jmiranda/ Página personal de Javier Miranda sobre Ada]
Ada
ja:Ada
Lenguaje de programaciónUn lenguaje de programación es una técnica estándar de comunicación que permite expresar las instrucciones que han de ser ejecutadas en una computadora. Consiste en un conjunto de reglas sintácticas y semánticas que definen un programa informático.
Aunque, muchas veces se usa lenguaje de programación y lenguaje informático como fuesen sinónimos, no tiene porque ser así, ya los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como por ejemplo el HTML.
Un lenguaje de programación permite a un programador especificar de manera precisa: sobre qué datos una computadora debe operar, cómo deben ser estos almacenados y 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.
Un programa escrito en un lenguaje de programación necesita pasar por un proceso de compilación, es decir, ser traducido al lenguaje de máquina, o ser interpretado para que pueda ser ejecutado por el ordenador.
Véase también
- Programación
- Paradigmas de programación
Enlaces externos
- [http://www.levenez.com/lang/ Árbol cronológico de los lenguajes de programación] (en inglés)
- [http://delta.cs.cinvestav.mx/~gmorales/ta/ta.html Principios de Autómatas Finitos]
- [http://people.ku.edu/~nkinners/LangList/Extras/langlist.htm Lista de lenguajes de programación] (hay unos 2500 pero están en inglés)
Categoría:Lenguajes de programación
ja:プログラミング言語
Fuertemente tipadoUn lenguaje de programación es fuertemente tipado si el compilador comprueba que no se violan los tipos de datos. No hay una única definición de este término. Un lenguaje que no es fuertemente tipado se dice que no está tipado.
La mayoría de los lenguajes imperativos son fuertemente tipados mientras que los lenguajes declarativos no suelen estar tipados.
= Explicación detallada =
Los lenguajes de programación suelen contar con un sublenguaje de tipos para declarar variables. Este sublenguaje instruye al compilador respecto al tipo de valores que puede adoptar cada variable. Por ejemplo:
int X;
en el Lenguaje de programación C significa "la variable X adopta valores numéricos enteros".
Estos tipos tambíen se declaran para todos los argumentos de procedimientos o subrutinas. Por ejemplo:
float subrutina(float Parametro)
Este procedimiento acepta un número en coma flotante (número real) y le suma 1,5.
En los lenguajes fuertemente tipados, el compilador no permite que se use una variable como parámetro de un procedimiento si sus tipos no coinciden exactamente. En el ejemplo anterior, no sería posible invocar la subrutina con la variable "X":
subrutina(X)
ya que el compilador generaría un error. El motivo es que este tipo de expresiones suelen ser debidas a errores o despistes del programador.
Typecasting
Cuando un lenguaje es fuertemente tipado, el programador debe explícitamente convertir un tipo de datos en otro. Esto se conoce como typecasting y también debe estar soportado por el compilador. Por ejemplo:
subrutina((float)X)
Indica al copilador que no estamos cometiendo un error y realmente deseamos convertir la variable "X" (entera) en una variable de coma flotante para invocar a "subrutina".
Cada lenguaje de programación puede ser más o menos tipado según en que casos exige el typecasting. Por ejemplo, la conversión automática entre entero y coma flotante podría ser admitida, pero no al contrario. Si no es factible la conversión entre un tipo u otro, el compilador también emitirá un error de compilación.
= Lenguajes no tipados =
En los lenguajes no tipados no suele ser necesaria la declaración de variables, o bien, dicha declaración no incluye el tipo. Por ejemplo:
var X;
indica al compilador que "X" es una variable pero no se indica de qué tipo.
Esto significa que no es necesario hacer conversiones de tipo. Se supone que el compilador será capaz de hacerlo en todos los casos. Pero esto no es realista. Por ejemplo, no es posible convertir una cadena de caracteres en un número. En estos casos, el programa fallará en tiempo de ejecución, pero se compilará correctamente.
= Ejemplos de lenguajes fuertemente tipados =
- Modula-2.
- Pascal.
- Lenguaje C.
= Ejemplos de lenguajes no tipados =
- Prolog.
- Lisp.
- PHP.
Categoría:Programación
Programación concurrenteLa programación paralela o programación concurrente es una técnica de programación basada en la ejecución simultánea, bien sea en un mismo ordenador (con uno o varios procesadores) o en un cluster de ordenadores, en cuyo caso se denomina computación distribuida.
Los sistemas multiprocesador o multicomputador consiguen un aumento del rendimiento si se utilizan estas técnicas. En los sistemas monoprocesador el beneficio en rendimiento no es tan evidente, ya que la CPU es compartida por múltiples procesos en el tiempo, lo que se denomina multiplexación.
La esencia de la programación concurrente es la división de una tarea en múltiples sub-tareas que puedan ser realizadas relativamente independientemente unas de otras para combinarlas después.
Los padres de la computación paralela fueron Edsger Dijkstra y C. A. R. Hoare.
El mayor problema de la computación paralela radica en la complejidad de sincronizar unas tareas con otras, ya sea mediante secciones críticas, semáforos o paso de mensajes, para garantizar la exclusión mutua en las zonas del código en las que sea necesario.
Temas relacionados
- Procesos
- Hilos
- Sección crítica
- Exclusión mutua
- Semáforos
- Paso de mensajes
- [http://www.myalgorithm.com/source-153.html Algoritmo de Peterson] - En C++
Categoría:Programación paralela
Lenguaje de programación PascalPascal es un lenguaje de programación de alto nivel y propósito general, desarrollado por Niklaus Wirth, profesor del Instituto tecnológico de Zurich, Suiza. Lo creó pensando en un lenguaje didáctico para el aprendizaje de técnicas de programación, "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 lenguaje tiene utilidad limitada a los medios académicos, como Brian W. Kernighan. Con el tiempo se ha convertido además en un estándar de los lenguajes de programación más usados.
La primera versión preliminar apareció en 1968 y el primer compilador aparece a finales de 1970.
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.
En la ciencia de la computación, el lenguaje de programación estructurado Pascal es uno de los hitos en los lenguajes de programación y esta todavía vigente hoy en día.
Nació a partir del lenguaje de programación Algol al cual añade tipos de datos y simplifica su sintaxis. El nombre de Pascal fue escogido en honor al matemático Blaise Pascal. Wirth también desarrollo Modula-2 y Oberon, lenguajes similares a Pascal, los cuales soportan programación orientada a objetos. Pascal también ha influido en otros lenguajes como Ada y Eiffel.
Características únicas
A diferencia de lenguajes de programación descendientes de C, Pascal utiliza el símbolo := para la asignación en vez de =. Si bien el segundo es más conciso, la práctica ha demostrado que muchos usuarios utilizan el símbolo de igualdad para comparar valores en lugar del comparador de C que es el símbolo . Esta sintaxis conduce a muchos errores [bugs] difíciles de rastrear en código C. Dado que Pascal no permite dentro de expresiones y utiliza sintaxis distinta para asignaciones y comparaciones, no sufre estos errores.
Otra diferencia importante es que en Pascal, el tipo de una variable se fija en su definición; la asignación a variables de valores de tipo incompatible no están autorizadas (En C, en cambio, el compilador hace el mejor esfuerzo para dar una interpretación a casi todo tipo de asignaciones). Esto previene errores comunes donde variables son usadas incorrectamente porque el tipo es desconocido. Esto también evita la necesidad de notación húngara, prefijos que se añaden a los nombre de las variables y que indican su tipo
Implementaciones
Las primeras versiones del compilador de Pascal, entre ellas la más distribuida fue UCSD Pascal, traducían el lenguaje en código para una máquina virtual llamada máquina-P. La gran ventaja de este enfoque es que para tener un compilador de Pascal en una nueva arquitectura de máquina solo hacía falta reimplementar la máquina-P. Como consecuencia de esto, solo una pequeña parte del interprete tenía que ser reescrita hacia muchas arquitecturas.
En los años 1980, Anders Hejlsberg escribió el compilador Blue Label Pascal para la Nascom-2. Más tarde fue a trabajar para Borland y reescribió su compilador que se convirtió en Turbo Pascal para la IBM PC. Este nuevo compilador se vendió por $49, un precio orientado a la distribución masiva.
El económico compilador de Borland tuvo una larga influencia en la comunidad de Pascal que comenzó a utilizar principalmente en el IBM PC. Muchos aficionados a la PC en busca de un lenguaje estructurado reemplazaron el BASIC por este producto. Dado que Turbo Pascal, solo estaba disponible para una arquitectura, traducía directamente hacia al código de máquina del Intel 8088, logrando construir programas que corrían mucho mas rápidamente que los producidos en los esquemas interpretados.
Durante los años 1990, estuvo disponible la tecnología para construir compiladores que pudieran producir código para diferentes arquitecturas de hardware. Esto permitió que los compiladores de Pascal tradujeran directamente a código de la arquitectura donde correría.
Con Turbo Pascal versión 5, Borland, agregó programación orientada a objetos a Pascal.
Sin embargo, Borland después decidió mejorar esa extensión del lenguaje introduciendo su producto Delphi, diseñado a partir de estándar Object Pascal propuesto por Apple como base. Borland también lo llamó Object Pascal en las primeras versiones, pero cambio el nombre a lenguaje de programación Delphi en sus últimas versiones.
Compiladores disponibles públicamente
Varios compiladores de Pascal están disponibles para el uso del público en general:
- Compilador GNU Pascal (GPC), escrito en C, basado en GNU Compiler Collection (GCC). Se distribuye bajo licencia GPL.
- Free Pascal está escrito en Pascal (el compilador está creado usando FreePascal), es un compilador estable y potente. También distribuido libremente bajo la licencia GPL. Este sistema puede mezclar código Turbo Pascal con código Delphi, y soporta muchas plataformas y sistemas operativos.
- Turbo Pascal fue el compilador Pascal dominante para PCs durante los años 1980 y hasta principios de los años 1990, muy popular debido a sus magníficas extensiones y tiempos de compilación sumamente cortos. Actualmente, versiones viejas de Turbo Pascal (hasta la 5.5) están disponibles para descargarlo gratuito desde el sitio de Borland (es necesario registrarse)
- Delphi es un producto tipo RAD (Rapid Application Development) de Borland. Utiliza el lenguaje de programación Delphi, descendiente de Pascal, para crear aplicaciones para la plataforma Windows. Las últimas versiones soportan compilación en la plataforma .NET.
- Kylix es la más nueva versión de Borland reiterando la rama de Pascal de sus productos. Es descendiente de Delphi, con soporte para el sistema operativo Linux y una librería de objetos mejorada. El compilador y el IDE están disponibles para uso no comercial. Actualmente este proyecto esta descontinuado.
Crítica anticuada
A pesar de ser muy extendido el uso de este lenguaje de programación, sobre todo en los años 1980 y principios de los 90, las primeras versiones de Pascal fueron muy criticadas por no producir código de características industriales. Brian Kernighan, co-creador del lenguaje de programación C, en 1981, en el documento «Why Pascal Is Not My Favorite Programming Language [http://www.lysator.liu.se/c/bwk-on-pascal.html]» (Porqué Pascal no es mi lenguaje de programación preferido) hace una crítica sobre el lenguaje Pascal. Desde entonces, las implementaciones de Pascal han continuado evolucionando y la mayoría de las críticas del documento no son aplicables en la actualidad.
Hola mundo
El típico programa Hola mundo
PROGRAM Holamundo(output);
BEGIN
WriteLn('¡Hola mundo!')
readkey;
END.
Todos los programas comienzan con la palabra clave "Program", y un bloque de código es indicado con el "Begin"/"End". No hace diferenciación entre instrucciones o variables escritas en mayúsculas o minúsculas como hace el C. El punto y coma separa las declaraciones, y el punto sirve para indicar el final del programa o unidad. Para algunos compiladores la línea de Program es opcional.
Ejemplo de programa |