Ada es un lenguaje de programación de alto nivel , estructurado , de tipado estático , imperativo y orientado a objetos , inspirado en Pascal y otros lenguajes. Cuenta con soporte integrado para diseño por contrato (DbC), tipado extremadamente fuerte , concurrencia explícita, tareas, paso de mensajes síncrono, objetos protegidos y no determinismo . Ada mejora la seguridad y la mantenibilidad del código al utilizar el compilador para detectar errores, priorizando los errores en tiempo de ejecución . Ada es un estándar técnico internacional , definido conjuntamente por la Organización Internacional de Normalización (ISO) y la Comisión Electrotécnica Internacional (IEC). (Mayo de 2023), la norma, ISO/IEC 8652:2023, se denomina informalmente Ada 2022. [ 11 ] [ 12 ]
Ada fue diseñado originalmente por un equipo liderado por el científico informático francés Jean Ichbiah de Honeywell bajo contrato con el Departamento de Defensa de los Estados Unidos (DoD) entre 1977 y 1983 para reemplazar a más de 450 lenguajes de programación utilizados entonces por el DoD. [ 13 ] Ada recibió su nombre en honor a Ada Lovelace (1815-1852), a quien se le atribuye ser la primera programadora de computadoras. [ 14 ]
Características
Ada fue diseñado originalmente para sistemas embebidos y en tiempo real . La revisión Ada 95, diseñada por S. Tucker Taft de Intermetrics entre 1992 y 1995, mejoró el soporte para sistemas, programación numérica, financiera y orientada a objetos (POO). [ 11 ]
Las características de Ada incluyen tipado fuerte , mecanismos de programación modular ( paquetes ), verificación en tiempo de ejecución , procesamiento paralelo ( tareas , paso de mensajes síncrono , objetos protegidos y sentencias select no deterministas ), manejo de excepciones y genéricos . Ada 95 agregó soporte para programación orientada a objetos , incluyendo despacho dinámico .
La sintaxis de Ada minimiza las opciones para realizar operaciones básicas y prefiere las palabras clave en inglés (como or elsey and then) a los símbolos (como ||y &&). Ada utiliza los operadores aritméticos básicos +, -, *, y /, pero evita el uso de otros símbolos. Los bloques de código están delimitados por palabras como 'declare', 'begin' y 'end', donde 'end' (en la mayoría de los casos) va seguido de la palabra clave del bloque que cierra (por ejemplo, if... end if, loop... end loop). En el caso de los bloques condicionales, esto evita un else colgante que podría combinarse con la expresión 'if' anidada incorrecta en otros lenguajes como C o Java. [ 11 ]
Ada está diseñado para el desarrollo de sistemas de software de gran tamaño. Los paquetes Ada se pueden compilar por separado. Las especificaciones de los paquetes Ada (la interfaz del paquete) también se pueden compilar por separado, sin la implementación, para verificar su coherencia. Esto permite detectar problemas en una etapa temprana de la fase de diseño, antes de que comience la implementación.
Se admiten numerosas comprobaciones en tiempo de compilación para evitar errores que, en otros lenguajes, no serían detectables hasta el tiempo de ejecución o requerirían la adición de comprobaciones explícitas al código fuente. Por ejemplo, la sintaxis exige el cierre explícito de bloques para prevenir errores debidos a tokens de fin incompatibles. La adhesión al tipado fuerte permite detectar muchos errores comunes de software (parámetros incorrectos, violaciones de rango, referencias no válidas, tipos incompatibles, etc.) tanto en tiempo de compilación como en tiempo de ejecución. Dado que la concurrencia forma parte de la especificación del lenguaje, el compilador puede, en algunos casos, detectar posibles interbloqueos . [ 15 ] Los compiladores también suelen comprobar identificadores mal escritos , la visibilidad de paquetes, declaraciones redundantes, etc., y pueden proporcionar advertencias y sugerencias útiles sobre cómo corregir el error. [ 11 ]
Ada también admite comprobaciones en tiempo de ejecución para protegerse contra el acceso a memoria no asignada, errores de desbordamiento de búfer , violaciones de rango, errores de desplazamiento de uno , errores de acceso a matrices y otros errores detectables. Estas comprobaciones pueden deshabilitarse para optimizar la eficiencia en tiempo de ejecución, pero a menudo se pueden compilar de manera eficiente. También incluye herramientas para facilitar la verificación de programas . Por estas razones, Ada se utiliza a veces en sistemas críticos, donde cualquier anomalía podría tener consecuencias muy graves, como muerte accidental, lesiones o pérdidas financieras importantes. Algunos ejemplos de sistemas donde se utiliza Ada son la aviónica , el control del tráfico aéreo , los ferrocarriles , la banca, la tecnología militar y espacial . [ 16 ] [ 17 ]
La gestión dinámica de memoria de Ada es de alto nivel y segura en cuanto a tipos. Ada no tiene punteros genéricos ni sin tipo , ni declara implícitamente ningún tipo de puntero. En cambio, toda la asignación y liberación dinámica de memoria debe realizarse mediante tipos de acceso declarados explícitamente . Cada tipo de acceso tiene un grupo de almacenamiento asociado que gestiona los detalles de bajo nivel de la gestión de memoria; el programador puede usar el grupo de almacenamiento predeterminado o definir otros nuevos (esto es particularmente relevante para el acceso a memoria no uniforme ). Incluso es posible declarar varios tipos de acceso diferentes que designen el mismo tipo pero utilicen grupos de almacenamiento distintos. Además, el lenguaje proporciona comprobaciones de accesibilidad , tanto en tiempo de compilación como en tiempo de ejecución, que garantizan que un valor de acceso no pueda sobrevivir al tipo del objeto al que apunta. [ 18 ]
Aunque la semántica del lenguaje permite la recolección automática de basura de objetos inaccesibles, la mayoría de las implementaciones no la admiten por defecto, ya que provocaría un comportamiento impredecible en sistemas en tiempo real. Ada admite una forma limitada de administración de memoria basada en regiones , y en Ada, destruir un grupo de almacenamiento también destruye todos los objetos que contiene.
Un guion doble ( --), similar a un guion largo , indica texto de comentario. Los comentarios terminan al final de la línea; intencionalmente no hay forma de que un comentario abarque varias líneas, para evitar que los comentarios sin cerrar anulen accidentalmente secciones enteras del código fuente. Por lo tanto, deshabilitar un bloque completo de código requiere anteponer a cada línea (o columna) individualmente con --. Si bien esto indica claramente el código deshabilitado al crear una columna de '--' repetidos en la página, también hace que la deshabilitación/habilitación experimental de grandes bloques sea un proceso más prolongado en editores sin soporte para comentarios de bloque.
El punto y coma ( ;) es un terminador de instrucción , y la instrucción nula o sin operación es . No se permite null;una sola instrucción sin una instrucción para terminar.;
A diferencia de la mayoría de las normas ISO , la definición del lenguaje Ada (conocida como Manual de Referencia de Ada o ARM , o a veces Manual de Referencia del Lenguaje o LRM ) es de libre acceso . Por lo tanto, es una referencia común para los programadores de Ada, no solo para quienes implementan compiladores de Ada. Además del manual de referencia, existe un extenso documento de justificación que explica el diseño del lenguaje y el uso de sus diversas construcciones. Este documento también es ampliamente utilizado por los programadores. Cuando se revisó el lenguaje, se redactó un nuevo documento de justificación.
Una herramienta de software libre destacada que utilizan muchos programadores de Ada para ayudarles a escribir código fuente de Ada es GNAT Programming Studio, y GNAT forma parte de la GNU Compiler Collection .
Alire es una herramienta de gestión de paquetes y cadenas de herramientas para Ada. [ 19 ]
Historia
En la década de 1970, el Departamento de Defensa de los Estados Unidos (DoD) se preocupó por la cantidad de lenguajes de programación diferentes que se utilizaban en sus proyectos de sistemas informáticos integrados, muchos de los cuales eran obsoletos o dependientes del hardware, y ninguno de los cuales admitía la programación modular segura. En 1975, se formó un grupo de trabajo , el High Order Language Working Group (HOLWG), con la intención de reducir esta cantidad mediante la búsqueda o creación de un lenguaje de programación generalmente adecuado para los requisitos del departamento y del Ministerio de Defensa del Reino Unido . Después de muchas iteraciones que comenzaron con una propuesta inicial [ 20 ], el lenguaje de programación final se denominó Ada. El número total de lenguajes de programación de alto nivel utilizados para dichos proyectos se redujo de más de 450 en 1983 a 37 en 1996.
HOLWG elaboró los requisitos del lenguaje Steelman , una serie de documentos que establecían los requisitos que, a su juicio, debía cumplir un lenguaje de programación. Muchos lenguajes existentes fueron revisados formalmente, pero el equipo concluyó en 1977 que ningún lenguaje existente cumplía con las especificaciones. Los requisitos fueron creados por el Departamento de Defensa de los Estados Unidos en el programa Lenguaje Común de Alto Orden del Departamento de Defensa en 1978. Los predecesores de este documento se denominaron, en orden, "Strawman", "Woodenman", "Tinman" e "Ironman". [ 21 ] Los requisitos se centraron en las necesidades de las aplicaciones informáticas integradas y enfatizaron la fiabilidad, la mantenibilidad y la eficiencia. En particular, incluyeron mecanismos 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 de manera suficiente, [ 22 ] por lo que se convocó un concurso para crear un lenguaje que se acercara más a su cumplimiento. El diseño ganador de este concurso se convirtió en el lenguaje de programación Ada. El lenguaje resultante siguió de cerca los requisitos de Steelman, aunque no exactamente.

Se emitieron solicitudes de propuestas para un nuevo lenguaje de programación y se contrataron cuatro empresas para desarrollar sus propuestas bajo los nombres de Rojo ( Intermetrics, liderado por Benjamin Brosgol), Verde ( Honeywell , liderado por Jean Ichbiah ), Azul ( SofTech , liderado por John Goodenough) [ 23 ] y Amarillo ( SRI International , liderado por Jay Spitzen). En abril de 1978, tras el escrutinio público, las propuestas Rojo y Verde pasaron a la siguiente fase. En mayo de 1979, la propuesta Verde, diseñada por Jean Ichbiah en Honeywell, fue elegida y recibió el nombre de Ada, en honor a Augusta Ada King, Condesa de Lovelace, conocida comúnmente como Ada Lovelace . Esta propuesta estuvo influenciada por el lenguaje LIS que Ichbiah y su grupo habían desarrollado en la década de 1970. El manual de referencia preliminar de Ada se publicó en ACM SIGPLAN Notices en junio de 1979. El manual de referencia estándar militar fue aprobado el 10 de diciembre de 1980 (fecha del cumpleaños de Ada Lovelace) y recibió el número MIL-STD-1815 en honor al año de nacimiento de Ada Lovelace. En 1981, Tony Hoare aprovechó su discurso de aceptación del Premio Turing para criticar a Ada por ser excesivamente complejo y, por lo tanto, poco fiable, [ 24 ] pero posteriormente pareció retractarse en el prólogo que escribió para un libro de texto de Ada. [ 25 ]

Ada atrajo mucha atención de la comunidad de programadores en general durante sus inicios. Sus promotores y otros predijeron que podría convertirse en un lenguaje dominante para la programación de propósito general y no solo para trabajos relacionados con la defensa. [ 26 ] Ichbiah declaró públicamente que en diez años solo quedarían dos lenguajes de programación: Ada y Lisp . [ 27 ] Los primeros compiladores de Ada tuvieron dificultades para implementar el lenguaje, grande y complejo, y tanto el rendimiento en tiempo de compilación como en tiempo de ejecución tendían a ser lentos y las herramientas primitivas. [ 26 ] Los proveedores de compiladores dedicaron la mayor parte de sus esfuerzos a superar la enorme suite de validación de la Capacidad de Validación del Compilador de Ada (ACVC) , requerida por el gobierno, que incluía pruebas de conformidad del lenguaje y que formaba parte de otra característica novedosa del desarrollo del lenguaje Ada. [ 27 ]
La primera implementación validada de Ada fue el traductor NYU Ada/Ed, [ 28 ] certificado el 11 de abril de 1983. NYU Ada/Ed está implementado en el lenguaje de conjunto de alto nivel SETL . [ 29 ] Varias empresas comerciales comenzaron a ofrecer compiladores de Ada y herramientas de desarrollo asociadas, incluyendo Alsys , TeleSoft , DDC-I , Advanced Computer Techniques , Tartan Laboratories , Irvine Compiler , TLD Systems y Verdix . [ 30 ] Los fabricantes de computadoras que tenían un negocio significativo en las industrias de defensa, aeroespacial o relacionadas, también ofrecieron compiladores y herramientas de Ada en sus plataformas; estos incluían Concurrent Computer Corporation , Cray Research, Inc. , Digital Equipment Corporation , Harris Computer Systems y Siemens Nixdorf Informationssysteme AG . [ 30 ]
En 1991, el Departamento de Defensa de EE. UU. comenzó a exigir el uso de Ada (el mandato de Ada ) para todo el software, [ 31 ] aunque a menudo se concedían excepciones a esta regla. [ 26 ] El mandato de Ada del Departamento de Defensa se eliminó efectivamente en 1997, cuando el DoD comenzó a adoptar tecnología comercial estándar (COTS). [ 26 ] Existían requisitos similares en otros países de la OTAN : Ada era obligatorio para los sistemas de la OTAN que involucraban mando y control y otras funciones, y Ada era el lenguaje obligatorio o preferido para aplicaciones relacionadas con la defensa en países como Suecia, Alemania y Canadá. [ 32 ]
A finales de la década de 1980 y principios de la de 1990, los compiladores de Ada habían mejorado su rendimiento, pero aún existían obstáculos para explotar plenamente las capacidades de Ada, incluido un modelo de tareas diferente al que la mayoría de los programadores en tiempo real estaban acostumbrados. [ 27 ]
Debido a las características de soporte de seguridad crítica de Ada , ahora se utiliza 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 5 , satélites y otros sistemas espaciales, transporte ferroviario y banca. [ 17 ] Por ejemplo, el Sistema de Control de Vuelo Primario , el software del sistema fly-by-wire en el Boeing 777 , fue escrito en Ada, al igual que los sistemas fly-by-wire para el aerodinámicamente inestable Eurofighter Typhoon , [ 33 ] Saab Gripen , [ 34 ] Lockheed Martin F-22 Raptor y el sistema de control de vuelo de reemplazo DFCS para el Grumman F-14 Tomcat . El Sistema Automatizado de Tráfico Aéreo Canadiense fue escrito en 1 millón de líneas de Ada ( conteo SLOC ). Presentaba procesamiento distribuido avanzado , una base de datos Ada distribuida y diseño orientado a objetos. Ada también se utiliza en otros sistemas de control de tráfico aéreo, por ejemplo, el sistema de control de tráfico aéreo de próxima generación del Reino Unido, iFACTS (Interim Future Area Control Tools Support), está diseñado e implementado con SPARK Ada. [ 35 ] También se utiliza en el sistema de señalización en cabina TVM francés del sistema ferroviario de alta velocidad TGV y en los trenes suburbanos del metro de París, Londres, Hong Kong y Nueva York. [ 17 ] [ 36 ]
La revisión Ada 95 del lenguaje fue más allá de los requisitos de Steelman, apuntando a sistemas de propósito general además de los embebidos, y agregando características que soportan la programación orientada a objetos . [ 37 ]
Normalización
La versión preliminar de Ada se puede encontrar en ACM Sigplan Notices Vol 14, No 6, junio de 1979 [ 38 ].
Ada se publicó por primera vez en 1980 como un estándar ANSI ANSI/ MIL-STD 1815. Como esta primera versión contenía muchos errores e inconsistencias, [ a ] la edición revisada se publicó en 1983 como ANSI/MIL-STD 1815A. Sin más cambios, se convirtió en un estándar ISO en 1987. [ 40 ] Esta versión del lenguaje se conoce comúnmente como Ada 83 , por la fecha de su adopción por ANSI, pero a veces también se la denomina Ada 87 , por la fecha de su adopción por ISO. [ 41 ] También existe una traducción al francés; DIN la tradujo al alemán como DIN 66268 en 1988.
Ada 95 , el estándar conjunto ISO/IEC/ANSI ISO/IEC 8652:1995 [ 42 ] [ 43 ] , se publicó en febrero de 1995, convirtiéndose en el primer lenguaje de programación orientado a objetos estándar ISO. Para facilitar la revisión del estándar y su futura aceptación, la Fuerza Aérea de los Estados Unidos financió el desarrollo del compilador GNAT . Actualmente, el compilador GNAT forma parte de la Colección de Compiladores GNU .
Se ha continuado trabajando en la mejora y actualización del contenido técnico del lenguaje Ada. En octubre de 2001 se publicó una corrección técnica de Ada 95, [ 44 ] [ 45 ] y el 9 de marzo de 2007 se publicó una enmienda importante, ISO/IEC 8652:1995/Amd 1:2007 [ 46 ] [ 47 ] , conocida comúnmente como Ada 2005 porque el trabajo en el nuevo estándar se terminó ese año.
En la conferencia Ada-Europe 2012 en Estocolmo, la Ada Resource Association (ARA) y Ada-Europe 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 a la Comisión Electrotécnica Internacional (IEC) para su aprobación. ISO/IEC 8652:2012 [ 48 ] (ver Ada 2012 RM ) se publicó en diciembre de 2012, conocido como Ada 2012. Se publicó una corrección técnica, ISO/IEC 8652:2012/COR 1:2016, [ 49 ] (ver RM 2012 con TC 1 ).
La tecnología SPARK, basada en Ada, ha sido posible gracias a las características que permite el lenguaje Ada, incluyendo la separación entre especificación e implementación mediante paquetes, su compatibilidad con tipos escalares definidos por el usuario y su soporte para el uso de tipos compuestos sin recurrir a punteros. La revisión de Ada 2012 fue especialmente importante para SPARK, ya que su compatibilidad con contratos como parte del lenguaje permitió rediseñar SPARK desde cero para cumplir su objetivo de codesarrollar programas junto con sus pruebas de corrección. [ 50 ]
El 2 de mayo de 2023, la comunidad Ada presenció la aprobación formal de la publicación de la edición Ada 2022 del estándar del lenguaje de programación. [ 12 ]
A pesar de las denominaciones Ada 83, 95, etc., legalmente solo existe un estándar Ada, el último estándar ISO/IEC: con la aprobación de una nueva versión, la anterior queda sin efecto. Los demás nombres son informales y hacen referencia a una edición específica.
Otras normas relacionadas incluyen ISO/IEC 8651-3 :1988 Sistemas de procesamiento de información—Gráficos por computadora—Enlaces de lenguaje del sistema de núcleo gráfico (GKS)—Parte 3: Ada .
Construcciones del lenguaje
Ada es un lenguaje de programación similar a ALGOL que incluye estructuras de control con palabras reservadas como if , then , else , while , for , etc. Sin embargo, Ada también cuenta con numerosas herramientas de estructuración de datos y otras abstracciones que no estaban incluidas en el ALGOL 60 original , como definiciones de tipos , registros , punteros y enumeraciones . Dichas construcciones fueron, en parte, heredadas o inspiradas por Pascal .
"¡Hola, mundo!" en Ada
Un ejemplo común de la sintaxis de un lenguaje es el programa "¡Hola, mundo!" : (hello.adb)
con Ada.Text_IO ; usar Ada.Text_IO ;procedimiento Hola escomenzarPut_Line ( "Hola, mundo!" );fin ;Este programa se puede compilar utilizando el compilador de código abierto GNAT , disponible gratuitamente , ejecutando
gnatmake hola.adb Tipos de datos
El sistema de tipos de Ada no se basa en un conjunto de tipos primitivos predefinidos , sino que permite a los usuarios declarar sus propios tipos. Esta declaración, a su vez, no se basa en la representación interna del tipo, sino en la descripción del objetivo que se debe alcanzar. Esto permite al compilador determinar un tamaño de memoria adecuado para el tipo y comprobar si existen violaciones de la definición del tipo en tiempo de compilación y de ejecución (por ejemplo, violaciones de rango, desbordamientos de búfer, consistencia de tipos, etc.). Ada admite tipos numéricos definidos por un rango, tipos de módulo, tipos agregados (registros y matrices) y tipos de enumeración. Los tipos de acceso definen una referencia a una instancia de un tipo específico; no se permiten punteros sin tipo. Los tipos especiales que proporciona el lenguaje son los tipos de tarea y los tipos protegidos.
Por ejemplo, una fecha podría representarse como:
El tipo Day_type tiene un rango de 1 a 31 ;El tipo Month_type tiene un rango de 1 a 12 ;El tipo Year_type está en el rango 1800 .. 2100 ;El tipo Horas es módulo 24 ;El tipo de día de la semana es ( lunes , martes , miércoles , jueves , viernes , sábado , domingo );tipo Fecha esregistroDía : tipo_de_día ;Mes : tipo_de_mes ;Año : tipo_de_año ;fin del registro ;Day_type, Month_type, Year_type, Hours son tipos incompatibles, lo que significa que, por ejemplo, la siguiente expresión es ilegal:
Hoy : tipo_día := 4 ;Mes_Actual : Tipo_de_mes := 10 ;... Hoy + Mes_Actual ... -- ilegalEl operador de suma predefinido solo puede sumar valores del mismo tipo, por lo que la expresión no es válida.
Los tipos se pueden refinar declarando subtipos :
El subtipo Working_Hours es Hours, rango 0 .. 12 ; -- como máximo 12 horas para trabajar al día.subtipo Working_Day es Weekday rango lunes .. viernes ; -- Días para trabajarCarga_de_Trabajo : matriz constante ( Día_de_Trabajo ) de Horas_de_Trabajo -- declaración de tipo implícita:= ( viernes => 6 , lunes => 4 , otros => 10 ); -- tabla de búsqueda para horas de trabajo con inicializaciónLos tipos pueden tener modificadores como limitado, abstracto, privado , etc. Los tipos privados no muestran su estructura interna; los objetos de tipos limitados no se pueden copiar. [ 51 ] Ada 95 agrega características adicionales para la extensión orientada a objetos de los tipos.
Estructuras de control
Ada es un lenguaje de programación estructurado , lo que significa que el flujo de control está estructurado en sentencias estándar. Se admiten todas las construcciones estándar y la salida anticipada de nivel profundo, por lo que rara vez es necesario utilizar los comandos " go to ", que también son compatibles.
-- mientras a no sea igual a b, repetir.bucle mientras a /= bAda.Text_IO.Put_Line ( " Esperando " ) ;fin del bucle ;si a > b entoncesAda.Text_IO.Put_Line ( " Condición cumplida " ) ;demásAda.Text_IO.Put_Line ( " Condición no cumplida " ) ;fin si ;para i en 1 .. 10 bucleAda.Text_IO.Put ( " Iteración : " ) ;Ada.Text_IO.Put ( i ) ;Ada.Text_IO.Put_Line ;fin del bucle ;buclea := a + 1 ;salir cuando a = 10 ;fin del bucle ;caso i escuando 0 => Ada . Text_IO . Put ( "cero" );cuando 1 => Ada . Text_IO . Put ( "uno" );cuando 2 => Ada . Text_IO . Put ( "dos" );-- Las declaraciones de casos deben abarcar todos los casos posibles:cuando otros => Ada . Text_IO . Put ( "ninguno de los anteriores" );fin del caso ;para unDíaDeLaSemana en DíaDeLaSemana ' Bucle de rango -- bucle sobre una enumeraciónPut_Line ( Weekday ' Image ( aWeekday ) ); -- representación en cadena de salida de una enumeraciónSi aWeekday está en Working_Day, entonces -- comprobación de un subtipo de una enumeraciónPut_Line ( " para trabajar para " &Working_Hours ' Image ( Work_Load ( aWeekday )) ); -- acceso a una tabla de búsquedafin si ;fin del bucle ;Paquetes, procedimientos y funciones
Entre las partes de un programa Ada se encuentran los paquetes, los procedimientos y las funciones.
Las funciones se diferencian de los procedimientos en que deben devolver un valor. Las llamadas a funciones no pueden utilizarse "como una instrucción", y su resultado debe asignarse a una variable. Sin embargo, desde Ada 2012, las funciones no tienen por qué ser puras y pueden modificar sus parámetros debidamente declarados o el estado global. [ 52 ]
Ejemplo: Especificación del paquete (example.ads)
El paquete Example esEl tipo Número está en el rango 1 .. 11 ;procedimiento Imprimir_y_Incrementar ( j : entrada salida Número );fin Ejemplo ;Cuerpo del paquete (ejemplo.adb)
con Ada.Text_IO ;Cuerpo del paquete Ejemplo esi : Número := Número ' Primero ;procedimiento Imprimir_y_Incrementar ( j : entrada salida Número ) esfunción Siguiente ( k : en Número ) devuelve Número escomenzardevolver k + 1 ;fin Siguiente ;comenzarAda . Text_IO . Put_Line ( "El total es: " & Number ' Image ( j ) );j := Siguiente ( j );fin Imprimir_y_Incrementar ;-- La inicialización del paquete se ejecuta cuando se elabora el paquete.comenzarmientras i < Número ' Último bucleImprimir_y_incrementar ( i );fin del bucle ;fin Ejemplo ;Este programa se puede compilar, por ejemplo, utilizando el compilador de código abierto GNAT , disponible gratuitamente, ejecutando
gnatmake -z example.adb Los paquetes, procedimientos y funciones pueden anidarse a cualquier nivel de profundidad, y cada uno de ellos también puede ser el bloque lógico más externo.
Cada paquete, procedimiento o función puede tener sus propias declaraciones de constantes, tipos, variables y otros procedimientos, funciones y paquetes, que pueden declararse en cualquier orden.
Pragmas
Una pragma es una directiva del compilador que transmite información al compilador para permitir la manipulación específica de la salida compilada. [ 53 ] Algunas pragmas están integradas en el lenguaje, [ 54 ] mientras que otras son específicas de la implementación.
Ejemplos de uso común de las directivas del compilador serían deshabilitar ciertas características, como la comprobación de tipos en tiempo de ejecución o la comprobación de límites de subíndices de matrices, o indicar al compilador que inserte código objeto en lugar de una llamada a función (como hace C/C++ con las funciones en línea ).
Medicamentos genéricos
Véase también
- Compiladores de Ada
- ALGOL 68 – Lenguaje de programación
- APSE – Especificación del entorno de programación. Páginas que muestran breves descripciones de los destinos de redireccionamiento.
- Lista de software y herramientas de Ada
- Pascal – Lenguaje de programación
- Perfil de Ravenscar : una característica del lenguaje de programación Ada.
- Smalltalk : lenguaje de programación orientado a objetos
- SPARK – Lenguaje de programación
- VHDL – Lenguaje de descripción de hardware
- Programación en Ada en Wikibooks
Notas
- ↑ "Ada2012 Rationale" (PDF) . adacore.com . Archivado (PDF) del original el 18 de abril de 2016 . Recuperado el 5 de mayo de 2018 .
- ↑ "Soluciones de software comerciales para Ada, C y C++" . AdaCore . Consultado el 4 de abril de 2023 .
- ↑ "PTC ObjectAda" . PTC.com . Consultado el 27 de enero de 2014 .
- ↑ «Cambiador MapuSoft Ada-C/C++» . 16 de abril de 2019.
- ↑ "Lista de procesadores certificados por Ada 95: detalles" . ada-auth.org . Consultado el 4 de abril de 2023 .
- ^ Justificación de Ada, 1986, págs.23, 70, 110-114, 137, 165, 236
- ↑ "Especificaciones de la capilla (Agradecimientos)" (PDF) . Cray Inc. 1 de octubre de 2015. Archivado (PDF) del original el 9 de octubre de 2022. Consultado el 14 de enero de 2016 .
- ↑ "Drago" . Archivado del original el 14 de septiembre de 2020. Consultado el 6 de agosto de 2018 .
- ↑ "El Proyecto Griffin" . cs.nyu.edu . Consultado el 4 de abril de 2023 .
- ↑ «Lenguaje de programación SparForte» . www.sparforte.com . Consultado el 4 de abril de 2023 .
- 1 2 3 4 https://nvlpubs.nist.gov/nistpubs/Legacy/FIPS/fipspub119.pdf Lenguaje de programación Ada
- ^ Pinho , Luis Miguel (junio de 2023). "Desde el escritorio del editor" . Letras de Ada . XLIII (1). Asociación de Maquinaria de Computación: 3. doi : 10.1145/3631483 (inactivo el 1 de julio de 2025).
{{cite journal}}: CS1 maint: DOI inactivo desde julio de 2025 ( enlace ) - ↑ "El lenguaje de programación Ada" . Universidad de Michigan . Archivado del original el 22 de mayo de 2016. Consultado el 27 de mayo de 2016 .
- ↑ Fuegi, J; Francis, J (2003). "Lovelace y Babbage y la creación de las 'notas' de 1843"". IEEE Annals of the History of Computing . 25 (4): 16– 26. doi : 10.1109/MAHC.2003.1253887 . S2CID 40077111 .
- ↑ "Concurrencia". Guía de calidad y estilo de Ada 95. Centro de información de Ada . Consultado el 5 de noviembre de 2021 .
- ↑ Taft, S. Tucker; Olsen, Florence (30 de junio de 1999). "Ada ayuda a generar código con menos errores" . Government Computer News. págs. 2–3 . Archivado del original el 31 de agosto de 2015. Consultado el 14 de septiembre de 2010 .
- 1 2 3 Feldman, Michael. "¿Quién usa Ada? Proyectos del mundo real impulsados por el lenguaje de programación Ada Noviembre de 2014" . Grupo de trabajo de educación de SIGAda.
- ↑ No hay gestión segura de memoria dinámica en ADA , en: Escritura de módulos del kernel de Linux en Rust seguro – Geoffrey Thomas y Alex Gaynor, The Linux Foundation, 2 de octubre de 2019
- ↑ «Alire - Página de inicio» . Adacore . Consultado el 9 de diciembre de 2024 .
- ↑ "DoD – Requisitos de prueba – Abril de 1975" . iment.com . Consultado el 4 de abril de 2023 .
- ↑ Departamento de Defensa (junio de 1978), Requisitos para lenguajes de programación informática de alto nivel: "Steelman"
- ↑ SoftTech Inc. (1976), "Evaluación de ALGOL 68, Jovial J3B, Pascal, Simula 67 y TACPOL frente a TINMAN: Requisitos para un lenguaje de programación común de alto orden." - Véase también: ALGOL 68 , JOVIAL J3B, Pascal , Simula 67 y TACPOL (Centro de Información Técnica de Defensa - DTIC ADA037637, Informe número 1021-14)
- ↑ "John Goodenough | Perfil del personal de SEI" . Sei.cmu.edu . Consultado el 27 de enero de 2014 .
- ↑ CAR, Hoare (1981). "The Emperor's Old Clothes" (PDF) . Communications of the ACM . 24 (2). Association for Computing Machinery : 75–83 . doi : 10.1145/358549.358561 . S2CID 97895. Archivado del original (PDF) el 4 de marzo de 2016.
- ↑ Watt, DA; Wichmann, BA; Findlay, W. (1987). Ada: Lenguaje y metodología . Prentice-Hall.
- 1 2 3 4 Sward, Ricky E. (noviembre de 2010). "El auge, la caída y la persistencia de Ada". SIGAda '10: Actas de la conferencia internacional anual ACM SIGAda sobre SIGAda . págs. 71–74 . doi : 10.1145/1879063.1879081 . ISBN 978-1-4503-0027-8.
- 1 2 3 Rosen, JP. (agosto de 2009). "La(s) paradoja(s) de Ada". Ada Letters . 24 (2). ACM SIGAda: 28– 35. doi : 10.1145/1620593.1620597 . S2CID 608405 .
- ↑ SofTech Inc. (11 de abril de 1983). "Informe resumido de validación del compilador Ada: NYU Ada/ED, versión 19.7 V-001" . Waltham, MA. Archivado del original el 12 de marzo de 2012. Consultado el 16 de diciembre de 2010 .
- ↑ Dewar, Robert BK; Fisher, Gerald A. Jr.; Schonberg, Edmond; Froelich, Robert; Bryant, Stephen; Goss, Clinton F.; Burke, Michael (noviembre de 1980). "El traductor e intérprete de Ada de la NYU". Actas del simposio ACM-SIGPLAN sobre el lenguaje de programación Ada – SIGPLAN '80 . Vol. 15. págs. 194–201 . doi : 10.1145/948632.948659 . ISBN 0-89791-030-3. S2CID 10586359 .
- 1 2 "Lista de compiladores validados de Ada". Centro de información de Ada. 1 de julio de 1992. págs. 1–36 .
- ↑ Ada Information Clearinghouse (1994). "El mandato del Congreso sobre la Ley Ada" . Archivado del original el 4 de marzo de 2016. Consultado el 7 de junio de 2015 .
- ↑ Babiak, Nicholas J. (1989). Ada, el nuevo lenguaje informático del sistema de armas del Departamento de Defensa: ¿Panacea o calamidad? (PDF) . Air University (Fuerza Aérea de los Estados Unidos) . págs. 39–40 . Archivado (PDF) del original el 15 de diciembre de 2019.
- ↑ "Pensamiento ágil" . FlightGlobal . 16 de junio de 1999. Archivado del original el 15 de abril de 2021. Consultado el 13 de febrero de 2024 .
- ↑ Frisberg, Bo. "Uso de Ada en el sistema de control de vuelo del Gripen" (PDF) . Grupo de Interés Especial en Ada . Archivado (PDF) del original el 15 de enero de 2024. Recuperado el 13 de febrero de 2024 .
- ↑ AdaCore. "GNAT Pro elegido para el sistema ATC de próxima generación del Reino Unido" . Archivado del original el 24 de diciembre de 2010. Consultado el 1 de marzo de 2011 .
- ↑ AdaCore. "Mira quién usa Ada" . Archivado del original el 24 de diciembre de 2010. Consultado el 1 de marzo de 2011 .
- ↑ David A. Wheeler (1997), "Ada, C, C++ y Java contra The Steelman" . Publicado originalmente en Ada Letters, julio/agosto de 1997.
- ↑ Ichbiah, JD (junio de 1979). "ACM Sigplan Notices" . págs. 1–145 . doi : 10.1145/956650.956651 .
- ↑ Resumen de los cambios en el lenguaje Ada
- ↑ "ISO 8652:1987" . ISO . 21 de febrero de 2013. Consultado el 19 de enero de 2024 .
- ↑ "Ada 83 LRM, Portada" . archive.adaic.com . Consultado el 19 de enero de 2024 .
- ↑ "ISO/IEC 8652:1995" . ISO . Consultado el 19 de enero de 2024 .
- ↑ "Manual de referencia del lenguaje Ada 95 (original) – Ada Resource Association" . www.adaic.org . Consultado el 19 de enero de 2024 .
- ↑ ISO/IEC 8652:1995/Corr 1:2001
- ↑ Ada 95 RM con TC 1
- ↑ "ISO/IEC 8652:1995/Amd 1:2007" . ISO . Consultado el 19 de enero de 2024 .
- ↑ "Manual de referencia de Ada, ISO/IEC 8652:2007(E) Ed. 3" . www.adaic.org . Consultado el 19 de enero de 2024 .
- ↑ "ISO/IEC 8652:2012" . ISO . 28-03-2013 . Consultado el 19-01-2024 .
- ↑ "ISO/IEC 8652:2012/Cor 1:2016" . ISO . Consultado el 19 de enero de 2024 .
- ↑ Chapman, Roderick; Dross, Claire; Matthews, Stuart; Moy, Yannick (marzo de 2024). "Desarrollo conjunto de programas y su prueba de corrección". Communications of the ACM . 67 (3): 84– 94. doi : 10.1145/3624728 .
- ↑ "Tarjeta de sintaxis de Ada" (PDF) . Archivado del original (PDF) el 6 de julio de 2011. Consultado el 28 de febrero de 2011 .
- ↑ "Subprogramas" . learn.adacore.com . AdaCore . Consultado el 14 de abril de 2024 .
- ↑ «Ada 83 LRM, Sec 2.8: Pragmas» . Archivo.adaic.com . Consultado el 27 de enero de 2014 .
- ↑ "Ada 83 LRM, Apéndice/Anexo B: Pragmas de lenguaje predefinidos" . Archive.adaic.com. Archivado del original el 6 de febrero de 2012. Consultado el 27 de enero de 2014 .
Referencias
Normas internacionales
- ISO/IEC 8652 : Tecnología de la información—Lenguajes de programación—Ada
- ISO/IEC 15291 : Tecnología de la información—Lenguajes de programación—Especificación de la interfaz semántica de Ada ( ASIS )
- ISO/IEC 18009 : Tecnología de la información—Lenguajes de programación—Ada: Evaluación de la conformidad de un procesador de lenguaje ( ACATS )
- Norma IEEE 1003.5b-1996 , el enlace Ada POSIX
- Especificación de mapeo del lenguaje Ada , el mapeo del lenguaje de descripción de interfaz (IDL) de CORBA a Ada
Razón fundamental
Estos documentos se han publicado en diversos formatos, incluyendo el impreso.
- Ichbiah, Jean D .; Barnes, John GP; Firth, Robert J.; Woodger, Mike (1986), Fundamentos del diseño del lenguaje de programación Ada , archivado del original el 2 de febrero de 2007.También disponible en apps.dtic.mil y PDF.
- Barnes, John GP (1995), Fundamentos de Ada 95: el lenguaje: las bibliotecas estándar
- Barnes, John (2006) [2005], Justificación de Ada 2005
Libros
- Booch, Grady (1987). Ingeniería de software con Ada . California: The Benjamin/Cummings Publishing Company. ISBN 0-8053-0604-8.
- Skansholm, Jan (1996). Ada 95 Desde el principio . Addison-Wesley. ISBN 0-201-40376-5.
- Gilpin, Geoff (1985). Ada: Una visita guiada y tutorial . Prentice Hall. ISBN 978-0-13-004045-9.
- Beidler, John (1997). Algoritmos y estructuras de datos: un enfoque orientado a objetos que utiliza Ada 95 . Springer-Verlag. ISBN 0-387-94834-1.
- González, Dean W. (1991). Manual del programador de Ada . Benjamin-Cummings Publishing Company. ISBN 0-8053-2529-8.
- Ben-Ari, M. (1998). Ada para ingenieros de software . John Wiley & Sons. ISBN 0-471-97912-0.
- Ben-Ari, M. (2009). Ada para ingenieros de software: Segunda edición con Ada 2005. Springer. ISBN 978-1-84882-313-6.
- Cohen, Norman (1996). Ada como segunda lengua . McGraw-Hill Science/Engineering/Math. ISBN 0-07-011607-5.
- Burns, Alan ; Wellings, Andy (2001). Sistemas en tiempo real y lenguajes de programación. Ada 95, Java en tiempo real y POSIX en tiempo real . Addison-Wesley. ISBN 0-201-72988-1.
- Burns, Alan ; Wellings, Andy (1995). Concurrency in Ada . Cambridge University Press. ISBN 0-521-62911-X.
- Atkinson, Colin (1991). Reutilización, concurrencia y distribución orientadas a objetos: un enfoque basado en Ada . Addison-Wesley. ISBN 0-201-56527-7.
- Booch, Grady ; Bryan, Doug (1994). Ingeniería de software con Ada . Addison-Wesley. ISBN 0-8053-0608-0.
- Jones, Do-While (1989). Ada en acción: con ejemplos prácticos de programación . John Wiley & Sons. ISBN 0-471-60708-8.
- Stubbs, Daniel; Webre, Neil W. (1993). Estructuras de datos con tipos de datos abstractos y Ada . Brooks Cole. ISBN 0-534-14448-9.
- Ledru, Pascal (diciembre de 1998). Programación distribuida en Ada con objetos protegidos . Dissertation.com. ISBN 1-58112-034-6.
- Culwin, Fintan (1997). Ada, un enfoque de desarrollo . Prentice Hall. ISBN 0-13-264680-3.
- English, John; Culwin, Fintan (enero de 1997). Ada 95: El arte de la programación orientada a objetos . Prentice Hall. ISBN 0-13-230350-7.
- Musser, David R.; Stepanov, Alexander (24 de octubre de 1989). La biblioteca genérica de Ada: paquetes de procesamiento de listas lineales . Springer-Verlag. ISBN 0-387-97133-5.
- Feldman, Michael B. (1997). Construcción de software y estructuras de datos con Ada 95. Addison-Wesley. ISBN 0-201-88795-9.
- Johnston, Simon (1997). Ada 95 para programadores de C y C++ . Addison-Wesley. ISBN 0-201-40363-3.
- Feldman, Michael B.; Koffman, Elliot B. (1992–1993). Ada: Resolución de problemas y diseño de programas . Addison-Wesley. ISBN 0-201-52279-9.795 páginas.
- Feldman, Michael B .; Koffman, Elliot B. (1999). Ada 95. Addison-Wesley. ISBN 0-201-36123-X.
- Dale, Nell B .; Weems, Chip; McCormick, John (agosto de 1996). Programación y resolución de problemas con Ada 95. Jones & Bartlett Publishers. ISBN 0-7637-0293-5.
- Dale, Nell B .; McCormick, John (2007). Estructuras de datos Ada Plus: Un enfoque orientado a objetos, 2.ª edición . Jones & Bartlett Publishers. ISBN 978-0-7637-3794-8.
- Krell, Bruce C. (1992). Desarrollo con Ada: Métodos del ciclo de vida . Bantam Dell Pub Group. ISBN 0-553-09102-6.
- Bishop, Judy (10 de mayo de 1990). Distributed Ada: Developments and Experiences . Cambridge University Press. ISBN 0-521-39251-9.
- Sanden, Bo (1994). Construcción de sistemas de software con ejemplos en Ada . Prentice Hall. ISBN 0-13-030834-X.
- Hillam, Bruce (1994). Introducción a los tipos de datos abstractos con Ada . Prentice Hall. ISBN 0-13-045949-6.
- Rudd, David (1994). Introducción al diseño y desarrollo de software con Ada . Brooks Cole. ISBN 0-314-02829-3.
- Pyle, Ian C. (1991). Desarrollo de sistemas de seguridad: una guía con ADA . Prentice Hall. ISBN 0-13-204298-3.
- Baker, Louis (1989). Inteligencia artificial con Ada . McGraw-Hill. ISBN 0-07-003350-1.
- Burns, Alan; Wellings, Andy (1995). HRT-HOOD: A Structured Design Method for Hard Real-Time Ada Systems. North-Holland. ISBN 0-444-82164-3.
- Savitch, Walter; Peterson, Charles (1992). Ada: An Introduction to the Art and Science of Programming. Benjamin-Cummings Publishing Company. ISBN 0-8053-7070-6.
- Weiss, Mark Allen (1993). Data Structures and Algorithm Analysis in Ada. Benjamin-Cummings Publishing Company. ISBN 0-8053-9055-3.
- Ledgard, Henry (1983). Ada: An Introduction (second ed.). Springer-Verlag. ISBN 0-387-90814-5.
- Bjørner, Dines; Oest, Ole N., eds. (1980). Towards a Formal Description of Ada. London: Springer-Verlag. ISBN 3-540-10283-3.
Further reading
- Barnes, John (2024). Programming in Ada 2022. Cambridge University Press. ISBN 978-1-009-56477-9.
- Barnes, John (2014). Programming in Ada 2012 with a Preview of Ada 2022. Cambridge University Press. ISBN 978-1-009-18134-1.
- Barnes, John (2014). Programming in Ada 2012. Cambridge University Press. ISBN 978-1-107-42481-4.
- Barnes, John (2006). Programming in Ada 2005. Addison-Wesley. ISBN 0-321-34078-7.
- Barnes, John (1991). Programming in Ada plus Language Reference Manual. Addison-Wesley. ISBN 0-201-56539-0.
- Barnes, John (1998). Programming in Ada 95. Addison-Wesley. ISBN 0-201-34293-6.
- Barnes, John (1997). High Integrity Ada: The SPARK Approach. Addison-Wesley. ISBN 0-201-17517-7.
- Barnes, John (2003). High Integrity Software: The SPARK Approach to Safety and Security. Addison-Wesley. ISBN 0-321-13616-0.
External links
- Ada Resource Association
- DOD Ada programming language (ANSI/MIL STD 1815A-1983) specification
- JTC1/SC22/WG9 ISO home of Ada Standards
- Ada Programming Language Materials, 1981–1990. Charles Babbage Institute, University of Minnesota.
- Department of Defense (June 1978), Requirements for High Order Computer Programming Languages: "Steelman"
- David A. Wheeler (1996), Introduction to Steelman On-Line (version 1.2).
- SoftTech Inc. (1976), "Evaluación de ALGOL 68, JOVIAL J3B, Pascal, Simula 67 y TACPOL frente a TINMAN: requisitos para un lenguaje de programación común de alto orden". - Véase también: ALGOL 68 , JOVIAL J3B, Pascal , Simula 67 y TACPOL (Centro de Información Técnica de Defensa - DTIC ADA037637, Informe número 1021-14).
- David A. Wheeler (1997), "Ada, C, C++ y Java contra The Steelman" . Publicado originalmente en Ada Letters, julio/agosto de 1997.
- Ada (lenguaje de programación)
- Lenguajes de programación
- Lenguajes de programación compilados
- Lenguajes de programación .NET
- Lenguajes de programación de aviónica
- Lenguajes de programación de alta integridad
- Lenguajes de programación multiparadigma
- estándares de lenguajes de programación
- Lenguajes de programación creados en 1980
- Lenguajes de programación con un estándar ISO
- Lenguajes de programación de tipado estático
- lenguajes de programación de sistemas
- Software de 1980
- Lenguajes de programación de alto nivel
- Ada Lovelace