# Ada (lenguaje de programación)

Ada es un lenguaje de programación orientado a objetos 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 Estados Unidos. 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 fiabilidad, como la defensa, la aeronáutica (Boeing y 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 de swerk. Durante los años 1972-1975, 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 manual de referencia preliminar de Ada se publicó en ACM SIGPLAN Notices en junio de 1979. El manual de referencia de Military Standard se aprobó el 10 de diciembre de 1980 (cumpleaños de Ada Lovelace) y recibió el número MIL-STD-1815 en honor del año de nacimiento de Ada Lovelace. En 1981, C. A. R. Hoare aprovechó su Premio Turing para criticar a Ada por ser demasiado complejo y, por lo tanto, poco fiable. pero posteriormente pareció retractarse en el prólogo que escribió para un libro de texto de Ada.
Ada atrajo mucha atención de la comunidad de programación en su conjunto durante sus primeros días. Sus patrocinadores y otros predijeron que podría convertirse en un lenguaje dominante para la programación de propósito general y no solo para el trabajo relacionado con la defensa. Ichbiah declaró públicamente que dentro de diez años, solo quedarían dos lenguajes de programación: Ada y Lisp. Los primeros compiladores de Ada lucharon por implementar éste lenguaje grande y complejo, y tanto el rendimiento en tiempo de compilación como en tiempo de ejecución tendía a ser lento y las herramientas primitivas. Los proveedores de compiladores dedicaron la mayor parte de sus esfuerzos a aprobar el paquete de validación Capacidad de validación del compilador de Ada (ACVC) requerido por el gobierno, con pruebas de conformidad de lenguaje masivas, que se requería en otra característica novedosa del esfuerzo de lenguaje de Ada. The Jargon File, un diccionario de jerga de piratas informáticos que se originó entre 1975 y 1983, señala en una entrada sobre Ada que «es precisamente lo que uno podría esperar dado ese tipo de respaldo por decreto; diseñado por el comité ... difícil para usar, y en general un desastroso despilfarro de miles de millones de dólares... Ada Lovelace... casi con certeza palidecería ante el uso que se le ha dado a su nombre últimamente; lo más amable que se ha dicho al respecto es que hay probablemente una buena lengua pequeña que grita para salir del interior de su enorme masa elefantiana».
El nombre se eligió en conmemoración de lady Augusta Ada Byron (1815-1852), condesa de Lovelace, hija del poeta Lord George Byron y la matemática, activista y aristócrata Anne Isabella Noel Byron, considerada la primera programadora de la Historia por su colaboració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). Los requisitos del lenguaje de Steelman eran los que un lenguaje de programación de alto nivel para propósitos generales debería cumplir, creado por el Departamento de Defensa de los Estados Unidos en el programa de Lenguaje de Orden Superior Común del Departamento de Defensa en 1978. Los antecesores de este documento fueron llamados, en orden, «Strawman», «Woodenman», «Tinman» y «Ironman».
Los requisitos se centraron en las necesidades de las aplicaciones informáticas integradas y enfatizaron la confiabilidad, la capacidad de mantenimiento y la eficiencia. En particular, incluyeron facilidades de manejo de excepciones, verificación en tiempo de ejecución y computación paralela.
Se concluyó que ningún lenguaje existente cumplía con estos criterios en la medida suficiente, por lo que se convocó un concurso para crear un lenguaje que estuviera más cerca de cumplirlos. El diseño que ganó este concurso se convirtió en el lenguaje de programación Ada.
El lenguaje resultante siguió de cerca los requisitos de Steelman, aunque no exactamente.
La primera implementación validada de Ada fue el traductor NYU Ada/Ed, certificado el 11 de abril de 1983. NYU Ada/Ed se implementa en el lenguaje establecido de alto nivel SETL. Varias empresas comerciales comenzaron a ofrecer compiladores Ada y herramientas de desarrollo asociadas, incluidas Alsys, TeleSoft, DDC-I, Advanced Computer Techniques, Tartan Laboratories, Irvine Compiler, TLD Systems y Verdix. Los fabricantes de ordenadores que tenían un negocio importante en las industrias de defensa, aeroespacial o relacionadas, también ofrecían compiladores y herramientas Ada en sus plataformas; estos incluyeron Concurrent Computer Corporation, Cray Research, Inc., Harry puter Systems, y Siemens Nixdorf Informationssysteme AG.
En 1991, el Departamento de Defensa de EE. UU. comenzó a exigir el uso de Ada (el «mandato de Ada») para todo el software, aunque a menudo se concedieron excepciones a esta regla. El mandato Ada del Departamento de Defensa se eliminó efectivamente en 1997, cuando el Departamento de Defensa comenzó a adoptar la tecnología comercial lista para usar (COTS). Existían requisitos similares en otros países de la OTAN: se requería Ada para los sistemas de la OTAN que involucran comando y control y otras funciones, y Ada era el idioma obligatorio o preferido para aplicaciones relacionadas con la defensa en países como Suecia, Alemania y Canadá.
A finales de la década de 1980 y principios de la de 1990, los compiladores de Ada habían mejorado en rendimiento, pero aún había barreras para explotar completamente las habilidades de Ada, incluido un modelo de tareas que era diferente al que estaban acostumbrados la mayoría de los programadores en tiempo real.
Debido a las características de soporte de seguridad crítica de Ada, ahora se usa no solo para aplicaciones militares, sino también en proyectos comerciales donde un error de software puede tener graves consecuencias, por ejemplo, aviónica y control de tráfico aéreo, cohetes comerciales como el Ariane 4 y el Ariane 5, satélites y otros sistemas espaciales, transporte ferroviario y banca. Por ejemplo, el sistema de gestión de información del avión, el software del sistema fly-by-wire en el Boeing 777, fue escrito en Ada. Desarrollado por Honeywell Air Transport Systems en colaboración con consultores de DDC-I, se convirtió posiblemente en el más conocido de todos los proyectos de Ada, civiles o militares. El sistema de tráfico aéreo automatizado canadiense se escribió en 1 millón de líneas de Ada (recuento de SLOC). Presentaba procesamiento distribuido avanzado, una base de datos Ada distribuida y un diseño orientado a objetos. Ada también se utiliza en otros sistemas de tráfico aéreo, por ejemplo, el soporte de herramientas de control de área futuro provisional de próxima generación del sistema de control de tráfico aéreo del Reino Unido (iFACTS) está diseñado e implementado usando SPARK Ada. También se utiliza en el sistema de señalización de cabina francés de TVM en el sistema ferroviario de alta velocidad TGV y en los trenes suburbanos del metro en París, Londres, Hong Kong y Nueva York.

## Estandarización

El Ada preliminar se puede encontrar en ACM Sigplan Notices Vol 14, No 6, junio de 1979.
Ada se publicó por primera vez en 1980 como estándar ANSI ANSI/MIL-STD 1815. Como esta primera versión contenía muchos errores e inconsistencias (véase Resumen de los cambios de lenguaje de Ada), la edición revisada se publicó en 1983 como ANSI/MIL-STD 1815A. Sin más cambios, se convirtió en norma ISO en 1987, ISO 8652:1987. Esta versión del lenguaje se conoce comúnmente como Ada 83, desde la fecha de su adopción por parte de ANSI, pero a veces también se la denomina Ada 87, desde la fecha de su adopción por ISO. Este es el Manual de referencia de Ada 83. También hay una traducción al francés; DIN lo tradujo al alemán como DIN 66268 en 1988.
Ada 95, el estándar conjunto ISO/IEC/ANSI ISO/IEC 8652:1995 (véase Ada 95 RM) fue publicado en febrero de 1995, convirtiéndolo en el primer lenguaje de programación orientado a objetos estándar ISO. Para ayudar con la revisión estándar y la futura aceptación, la Fuerza Aérea de los Estados Unidos financió el desarrollo del compilador GNAT. Actualmente, el compilador GNAT es parte de la GNU Compiler Collection.
Se ha continuado trabajando en la mejora y actualización de los contenidos técnicos del lenguaje Ada. En octubre de 2001 se publicó un corrección técnica de Ada 95, ISO/IEC 8652:1995/Corr 1:2001 (véase Ada 95 RM con TC 1), y una enmienda importante, ISO/IEC 8652:1995/Amd 1:2007 (véase Ada 2005 RM) fue publicado el 9 de marzo de 2007, comúnmente conocido como Ada 2005 porque el trabajo en el nuevo estándar finalizó ese año.
En la conferencia Ada-Europa 2012 en Estocolmo, Ada Resource Association (ARA) y Ada-Europa anunciaron la finalización del diseño de la última versión del lenguaje Ada y la presentación del manual de referencia al ISO/IEC JTC 1/SC 22/WG 9 de la Organización Internacional de Normalización (ISO) y la Comisión Electrotécnica Internacional (IEC) para su aprobación. ISO/IEC 8652:2012 (véase Ada 2012 RM) fue publicado en diciembre de 2012, conocido como Ada 2012. Se publicó un corrigendum técnico ISO/IEC 8652:2012/COR 1:2016 (véase RM 2012 con TC 1).
A pesar de los nombres Ada 83, 95, etc., legalmente solo existe un estándar Ada, el del último estándar ISO/IEC: con la aceptación de una nueva versión del estándar, el anterior se retira. Los otros nombres son solo informales que hacen referencia a una determinada edición.
Otros estándares relacionados incluyen ISO/IEC 8651-3:1988 Sistemas de procesamiento de información—Gráficos por ordenador—Enlaces de lenguaje del Sistema de Kernel Gráfico (GKS)—Parte 3: Ada.

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

## Características

* 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).
* Es indiferente el uso de mayúsculas y minúsculas en los identificadores y palabras claves; es decir, es un lenguaje case-insensitive.
* En Ada, todo el programa es un único procedimiento, que puede contener subprogramas (procedimientos o funciones).
* 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 afecta 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.

## Ejemplos en Ada
### Hola, mundo

Un ejemplo común sobre la sintaxis de los lenguajes de programación es el «Hola mundo». En Ada, se realizaría así:

### Tipos de datos

* Integer: un número entero.
* Float: un número decimal.
* Character: una letra o símbolo del teclado (también puede ser un número o varios, pero no se pueden hacer operaciones entre ellos).
* String: consiste en una cadena de caracteres.
* Array: un array o vector es una variable que agrupa varios elementos de cualquiera de los tipos previamente descritos.
Ejemplo de uso de array:
Para acceder a cada uno de los huecos se accedería de la siguiente manera: