Ada (lenguaje de programación)

Lenguaje de programación de alto nivel publicado por primera vez en 1980
Ada
Logotipo verde en el horizonte con letras y eslogan de Ada
ParadigmaMultiparadigma : estructurado , imperativo , orientado a objetos , orientado a aspectos , [1] concurrente , matriz , distribuido , genérico , procedimental , meta
FamiliaPascal
Diseñado por
  • MIL-STD-1815, Ada 83: Jean Ichbiah
  • Año 95: Tucker Taft
  • Año 2005: Tucker Taft
  • Año 2012: Tucker Taft
Apareció por primera vezFebrero de 1980 ; hace 44 años ( 1980-02 )
Versión estable
Ada 2022 / Mayo 2023
Disciplina de mecanografíaestático , fuerte , seguro , nominal
Sistema operativoMultiplataforma o multiplataforma
Extensiones de nombre de archivo.adb, .ads
Sitio webwww.adaic.org
Implementaciones principales
AdaCore GNAT , [2] compilador optimizado Ada 95
de Green Hills Software ,
PTC ApexAda y ObjectAda, [3]
cambiador Ada-C/C++ de MapuSoft, [4] anteriormente conocido como "AdaMagic con C Intermediate", [5] puntuación
DDC-I
Dialectos
SPARK , perfil de Ravenscar
Influenciado por
ALGOL 68 , Pascal , Simula 67 , [6] C++ (Ada 95), Smalltalk (Ada 95), Modula-2 (Ada 95) Java (Ada 2005), Eiffel (Ada 2012)
Influenciado
C++ , Chapel , [7] Drago, [8] D , Eiffel , Griffin, [9] Java , Nim , ParaSail , PL/SQL , PL/pgSQL , Python , Ruby , Seed7 , SPARforte, [10] Sparkel , SQL/PSM , VHDL
  • Programación ADA en Wikilibros

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. Tiene soporte de lenguaje integrado para diseño por contrato (DbC), tipado extremadamente fuerte , concurrencia explícita, tareas, paso de mensajes sincrónico, objetos protegidos y no determinismo . Ada mejora la seguridad y la capacidad de mantenimiento del código al usar el compilador para encontrar errores en favor de los errores de 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). A partir de mayo de 2023 , el estándar, llamado Ada 2022 informalmente, es ISO/IEC 8652:2023. [11] [actualizar]

Ada fue diseñado originalmente por un equipo dirigido por el científico informático francés Jean Ichbiah de Honeywell bajo contrato con el Departamento de Defensa de los Estados Unidos (DoD) de 1977 a 1983 para reemplazar a más de 450 lenguajes de programación utilizados por el DoD en ese momento. [12] Ada recibió su nombre en honor a Ada Lovelace (1815-1852), a quien se le atribuye el mérito de ser la primera programadora de computadoras. [13]

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 (OOP).

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 sincrónicos , objetos protegidos y sentencias select no deterministas ), manejo de excepciones y genéricos . Ada 95 agregó soporte para programación orientada a objetos , incluido el envío dinámico .

La sintaxis de Ada minimiza las opciones de formas de realizar operaciones básicas y prefiere palabras clave en inglés (como "or else" y "and then") a símbolos (como "||" y "&&"). Ada utiliza los operadores aritméticos básicos "+", "-", "*" y "/", pero evita utilizar otros símbolos. Los bloques de código están delimitados por palabras como "declare", "begin" y "end", donde el "end" (en la mayoría de los casos) es seguido por el identificador del bloque que cierra (por ejemplo, if ... end if , loop ... end loop ). En el caso de bloques condicionales, esto evita un else pendiente que podría emparejarse con la expresión if anidada incorrecta en otros lenguajes como C o Java.

Ada está diseñado para desarrollar sistemas de software muy grandes. Los paquetes de Ada se pueden compilar por separado. Las especificaciones de los paquetes de Ada (la interfaz del paquete) también se pueden compilar por separado sin la implementación para comprobar la coherencia. Esto permite detectar problemas en una fase temprana del diseño, antes de que comience la implementación.

Se admite una gran cantidad de comprobaciones en tiempo de compilación para ayudar a evitar errores que no serían detectables hasta el tiempo de ejecución en algunos otros lenguajes o que requerirían que se agregaran comprobaciones explícitas al código fuente. Por ejemplo, la sintaxis requiere el cierre explícito de los bloques para evitar errores debido a tokens finales no coincidentes. La adherencia a la tipificación fuerte permite detectar muchos errores de software comunes (parámetros erróneos, violaciones de rango, referencias no válidas, tipos no coincidentes, etc.) ya sea durante el tiempo de compilación o durante el tiempo de ejecución. Como la concurrencia es parte de la especificación del lenguaje, el compilador puede, en algunos casos, detectar posibles bloqueos. [14] Los compiladores también suelen comprobar identificadores mal escritos , visibilidad de paquetes, declaraciones redundantes, etc. y pueden proporcionar advertencias y sugerencias útiles sobre cómo corregir el error.

Ada también admite comprobaciones en tiempo de ejecución para proteger contra el acceso a memoria no asignada, errores de desbordamiento de búfer , violaciones de rango, errores de uno por uno , errores de acceso a matriz y otros errores detectables. Estas comprobaciones se pueden deshabilitar en beneficio de la eficiencia en tiempo de ejecución, pero a menudo se pueden compilar de manera eficiente. También incluye funciones para ayudar a la verificación del programa . Por estas razones, Ada a veces se utiliza en sistemas críticos, donde cualquier anomalía puede conducir a consecuencias muy graves, por ejemplo, muerte accidental, lesiones o pérdidas financieras graves. Ejemplos de sistemas donde se utiliza Ada incluyen aviónica , control de tráfico aéreo , ferrocarriles , banca, tecnología militar y espacial . [15] [16]

La gestión dinámica de memoria de Ada es de alto nivel y de tipo seguro. Ada no tiene punteros genéricos o sin tipo ; ni declara implícitamente ningún tipo de puntero. En cambio, toda la asignación y desasignación de memoria dinámica debe ocurrir a través de tipos de acceso declarados explícitamente . Cada tipo de acceso tiene un grupo de almacenamiento asociado que maneja los detalles de bajo nivel de la gestión de memoria; el programador puede usar el grupo de almacenamiento predeterminado o definir nuevos (esto es particularmente relevante para el acceso a memoria no uniforme ). Incluso es posible declarar varios tipos de acceso diferentes que designan todos el mismo tipo pero usan diferentes grupos de almacenamiento. 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. [17]

Aunque la semántica del lenguaje permite la recolección automática de basura de objetos inaccesibles, la mayoría de las implementaciones no lo admiten de forma predeterminada, ya que provocaría un comportamiento impredecible en los sistemas en tiempo real. Ada admite una forma limitada de gestión de memoria basada en regiones ; además, el uso creativo de los grupos de almacenamiento puede proporcionar una forma limitada de recolección automática de basura, ya que la destrucción de un grupo de almacenamiento también destruye todos los objetos del grupo.

Un doble guión ("--"), parecido a un guión largo , denota texto de comentario. Los comentarios terminan al final de la línea; no hay manera intencional de hacer que un comentario ocupe varias líneas, para evitar que los comentarios sin cerrar anulen accidentalmente secciones enteras del código fuente. Por lo tanto, para deshabilitar un bloque de código completo es necesario anteponer "--" a cada línea (o columna) individualmente. Si bien esto denota claramente código deshabilitado al crear una columna de "--" repetidos a lo largo de la página, también hace que la desactivación/rehabilitación experimental de bloques grandes sea un proceso más prolongado en editores sin soporte para comentarios en bloques.

El punto y coma (";") es un finalizador de sentencia y la sentencia nula o sin operación es null;. ;No se permite un solo carácter sin una sentencia que finalice.

A diferencia de la mayoría de los estándares ISO , la definición del lenguaje Ada (conocida como Ada Reference Manual o ARM , o a veces Language Reference Manual o LRM ) es de contenido libre . Por lo tanto, es una referencia común para los programadores de Ada, no solo para los programadores que implementan compiladores de Ada. Además del manual de referencia, también hay un extenso documento de justificación que explica el diseño del lenguaje y el uso de varias construcciones del lenguaje. Este documento también es ampliamente utilizado por los programadores. Cuando se revisó el lenguaje, se escribió un nuevo documento de justificación.

Una notable herramienta de software libre que utilizan muchos programadores de Ada para ayudarlos a escribir el código fuente de Ada es GNAT Programming Studio, y GNAT es parte de GNU Compiler Collection .

Historia

En la década de 1970, el Departamento de Defensa de los Estados Unidos (DoD) comenzó a preocuparse por la cantidad de lenguajes de programación diferentes que se utilizaban para sus proyectos de sistemas informáticos integrados, muchos de los cuales eran obsoletos o dependían del hardware, y ninguno de los cuales admitía una 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 este número mediante la búsqueda o creación de un lenguaje de programación que fuera adecuado en general para los requisitos del departamento y del Ministerio de Defensa del Reino Unido . Después de muchas iteraciones que comenzaron con una propuesta de hombre de paja original [18], el lenguaje de programación final se denominó Ada. El número total de lenguajes de programación de alto nivel en uso para tales proyectos cayó 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, en su opinión, debía satisfacer un lenguaje de programación. Se revisaron formalmente muchos lenguajes existentes, pero el equipo concluyó en 1977 que ninguno de ellos cumplía con las especificaciones.

Pintura en acuarela de Ada Lovelace

Se emitieron solicitudes de propuestas para un nuevo lenguaje de programación y se contrataron cuatro contratistas para desarrollar sus propuestas bajo los nombres de Red ( Intermetrics liderado por Benjamin Brosgol), Green ( Honeywell , liderado por Jean Ichbiah ), Blue ( SofTech , liderado por John Goodenough) [19] y Yellow ( SRI International , liderado por Jay Spitzen). En abril de 1978, después del escrutinio público, las propuestas Red y Green pasaron a la siguiente fase. En mayo de 1979, la propuesta Green, diseñada por Jean Ichbiah en Honeywell, fue elegida y se le dio el nombre de Ada, en honor a Augusta Ada King, condesa de Lovelace, generalmente conocida como Ada Lovelace . Esta propuesta estaba 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 Military Standard se aprobó el 10 de diciembre de 1980 (día del nacimiento de Ada Lovelace) y se le dio el número MIL-STD-1815 en honor al año de nacimiento de Ada Lovelace. En 1981, Tony Hoare aprovechó su discurso de entrega del premio Turing para criticar a Ada por ser demasiado compleja y, por lo tanto, poco fiable, [20] pero posteriormente pareció retractarse en el prólogo que escribió para un libro de texto de Ada. [21]

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. [22] Ichbiah declaró públicamente que dentro de diez años, solo dos lenguajes de programación permanecerían: Ada y Lisp . [23] Los primeros compiladores de Ada lucharon por 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. [22] Los proveedores de compiladores dedicaron la mayor parte de sus esfuerzos a pasar la suite de validación masiva de Capacidad de Validación del Compilador de Ada (ACVC) requerida por el gobierno, que era necesaria en otra característica novedosa del esfuerzo del lenguaje Ada. [23]

La primera implementación de Ada validada fue el traductor NYU Ada/Ed, [24] certificado el 11 de abril de 1983. NYU Ada/Ed está implementado en el lenguaje de conjuntos de alto nivel SETL . [25] Varias compañías comerciales comenzaron a ofrecer compiladores de Ada y herramientas de desarrollo asociadas, incluidas Alsys , TeleSoft , DDC-I , Advanced Computer Techniques , Tartan Laboratories , Irvine Compiler, TLD Systems y Verdix . [26] Los fabricantes de computadoras que tenían un negocio significativo en las industrias de defensa, aeroespacial o relacionadas, también ofrecían 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 . [26]

En 1991, el Departamento de Defensa de los EE. UU. comenzó a exigir el uso de Ada (el mandato Ada ) para todo el software, [27] aunque a menudo se concedían excepciones a esta regla. [22] El mandato Ada del Departamento de Defensa se eliminó de manera efectiva en 1997, cuando el Departamento de Defensa comenzó a adoptar tecnología comercial lista para usar (COTS). [22] Existían requisitos similares en otros países de la OTAN : Ada era necesario para los sistemas de la OTAN que implicaban comando 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á. [28]

A finales de la década de 1980 y principios de la de 1990, los compiladores de Ada habían mejorado en rendimiento, pero todavía existían barreras para explotar plenamente las capacidades de Ada, incluido un modelo de tareas que era diferente al que estaban acostumbrados la mayoría de los programadores en tiempo real. [23]

Debido a las características de soporte críticas para la seguridad de Ada , ahora se usa no solo para aplicaciones militares, sino también en proyectos comerciales donde un error de software puede tener consecuencias graves, 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. [16] 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 , [29] Saab Gripen , [30] Lockheed Martin F-22 Raptor y el sistema de control de vuelo de reemplazo DFCS para el Grumman F-14 Tomcat . El Sistema de Tráfico Aéreo Automatizado Canadiense fue escrito en 1 millón de líneas de Ada ( recuento SLOC ). Presentó procesamiento distribuido avanzado , una base de datos Ada distribuida y diseño orientado a objetos. Ada también se utiliza en otros sistemas de tráfico aéreo, por ejemplo, el sistema de control de tráfico aéreo de próxima generación Interim Future Area Control Tools Support (iFACTS) del Reino Unido está diseñado e implementado utilizando SPARK Ada. [31] También se utiliza en el sistema de señalización en cabina TVM francés en el sistema ferroviario de alta velocidad TGV y en los trenes suburbanos del metro de París, Londres, Hong Kong y la ciudad de Nueva York. [16] [32]

Normalización

Cronología de la lengua Ada
AñoNombre informalNorma ANSINorma ISO/IEC
1980AdaNorma militar 1815
1983Año 83/87Norma militar 1815A8652:1987
1995Año 958652:1995
2007Año 20058652:1995/Enmienda 1:2007
2012Año 20128652:2012
2023Año 20228652:2023

La versión preliminar de Ada se puede encontrar en ACM Sigplan Notices Vol 14, No 6, junio de 1979 [33]

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. [35] Esta versión del lenguaje se conoce comúnmente como Ada 83 , desde la fecha de su adopción por ANSI, pero a veces también se la conoce como Ada 87 , desde la fecha de su adopción por ISO. [36] También hay una traducción al francés; DIN la tradujo al alemán como DIN 66268 en 1988.

En febrero de 1995 se publicó Ada 95 , la norma conjunta ISO/IEC/ANSI ISO/IEC 8652:1995 [37] [38] , lo que la convirtió en el primer lenguaje de programación orientado a objetos según la norma ISO. Para ayudar con la revisión de la norma y su futura aceptación, la Fuerza Aérea de los EE. UU. financió el desarrollo del compilador GNAT . En la actualidad, 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ó un Corrigendum Técnico de Ada 95 [39] [40] y el 9 de marzo de 2007 se publicó una Enmienda importante, ISO/IEC 8652:1995/Amd 1:2007 [41] [42] , conocida comúnmente como Ada 2005 porque el trabajo sobre la nueva norma finalizó 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 la Comisión Electrotécnica Internacional (IEC) para su aprobación. La ISO/IEC 8652:2012 [43] (véase Ada 2012 RM) se publicó en diciembre de 2012, conocida como Ada 2012. Se publicó un corrigendum técnico, ISO/IEC 8652:2012/COR 1:2016, [44] (véase RM 2012 con TC 1).

El 2 de mayo de 2023, la comunidad Ada vio la aprobación formal de la publicación de la edición Ada 2022 del estándar de lenguaje de programación. [11]

A pesar de los nombres Ada 83, 95, etc., legalmente solo existe una norma Ada, la de la última norma ISO/IEC: con la aceptación de una nueva versión de la norma, la anterior pasa a ser derogada. Los demás nombres son simplemente referencias informales a una determinada edición.

Otras normas relacionadas incluyen ISO/IEC 8651 -3:1988 Sistemas de procesamiento de información - Gráficos de 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 tiene muchas funciones 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 ;procedimiento  hola  escomenzar Ada . Text_IO . Put_Line  ( "¡Hola, mundo!" );fin  Hola ;

Este programa se puede compilar utilizando el compilador de código abierto disponible gratuitamente GNAT , ejecutando

 hola.adb de gnatmake

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 hay violaciones de la definición de tipo en tiempo de compilación y de ejecución (es decir, violaciones de rango, desbordamientos de búfer, consistencia de tipo, 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 especificado; 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:

tipo  Day_type  es  rango  1  ..  31 ;tipo  Month_type  es  rango  1  ..  12 ;tipo  Year_type  es  rango  1800  ..  2100 ;tipo  Horas  es  mod  24 ;El tipo  Día de la semana  es  ( Lunes ,  Martes ,  Miércoles ,  Jueves ,  Viernes ,  Sábado ,  Domingo );tipo  Fecha  es registro Día  :  Tipo_de_día ; Mes  :  tipo_de_mes ; Año  :  Tipo_de_año ; fin de registro ;

Importante tener en cuenta: Day_type, Month_type, Year_type, Hours son tipos incompatibles, lo que significa que, por ejemplo, la siguiente expresión es ilegal:

Hoy :  Day_type  :=  4 ;Mes_actual :  Tipo_mes  :=  10 ;...  Hoy  +  Mes_Actual  ...  -- ilegal

El operador más predefinido solo puede sumar valores del mismo tipo, por lo que la expresión es ilegal.

Los tipos se pueden refinar declarando subtipos :

subtipo  Working_Hours  es  un rango de horas  de 0 a 12 ; -- como máximo 12 horas para trabajar al día    subtipo  Working_Day  es  el rango de días laborables  Lunes ... Viernes ; -- Días laborables    Work_Load :  matriz constante  ( Working_Day ) de Working_Hours - declaración de tipo implícita    :=  ( viernes  =>  6 ,  lunes  =>  4 ,  otros  =>  10 );  -- tabla de búsqueda de horas de trabajo con inicialización

Los 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. [45] Ada 95 agrega características adicionales para la extensión orientada a objetos de tipos.

Estructuras de control

Ada es un lenguaje de programación estructurado , lo que significa que el flujo de control está estructurado en instrucciones estándar. Se admiten todas las construcciones estándar y la salida anticipada de nivel profundo, por lo que rara vez se necesita el uso de los comandos " go to ", también admitidos.

-- mientras a no sea igual a b, bucle.mientras  a  /=  b  bucle Ada . Text_IO . Put_Line  ( "Esperando" ); bucle final ;Si  a  >  b  entonces Ada . Text_IO . Put_Line  ( "Condición cumplida" );demás Ada . Text_IO . Put_Line  ( "Condición no cumplida" );fin  si ;para  i  en  1  ..  10  bucle Ada . Text_IO . Put  ( "Iteración: " ); Ada .Text_IO .Put ( i ) ;  Ada .Texto_IO .Poner_Línea ; bucle final ;bucle a  :=  a  +  1 ; salir  cuando  a  =  10 ; bucle final ;caso  i  es cuando  0  =>  Ada . Text_IO . Put  ( "cero" ); cuando  1  =>  Ada . Text_IO . Put  ( "uno" ); cuando  2  =>  Ada . Text_IO . Put  ( "dos" ); -- Las declaraciones de caso deben cubrir todos los casos posibles: cuando  otros  =>  Ada . Text_IO . Put  ( "ninguna de las anteriores" ); caso final ;para  un día laborable  en  Día laborable ' Bucle de rango  -- bucle sobre una enumeración  Put_Line  (  Weekday ' Image ( aWeekday )  );  -- representación de cadena de salida de una enumeración si  aWeekday  en  Working_Day  entonces  -- verificación de un subtipo de una enumeración Put_Line  (  "para trabajar"  y Working_Hours ' Image  ( Work_Load ( aWeekday ))  );  -- acceso a una tabla de búsqueda fin  si ; bucle final ;

Paquetes, procedimientos y funciones

Entre las partes de un programa Ada se encuentran paquetes, procedimientos y funciones.

Las funciones se diferencian de los procedimientos en que deben devolver un valor. Las llamadas a funciones no se pueden utilizar "como una declaración" y su resultado debe asignarse a una variable. Sin embargo, desde Ada 2012, no se requiere que las funciones sean puras y pueden mutar sus parámetros declarados adecuadamente o el estado global. [46]

Ejemplo: Especificación del paquete (example.ads)

El paquete  de ejemplo  es tipo  Número  es  rango  1  ..  11 ; procedimiento  Imprimir_e_Incrementar  ( j : inoutNumero  ) ; fin  Ejemplo ;

Cuerpo del paquete (ejemplo.adb)

con  Ada.Text_IO ; cuerpo  del paquete El ejemplo  es i  :  Número  :=  Número ' Primero ; procedimiento  Imprimir_e_Incrementar  ( j : in  out  Número )  es función  Siguiente  ( k : en  Número )  devuelve  Número  es comenzar devuelve  k  +  1 ; Fin  Siguiente ; comenzar Ada . Text_IO . Put_Line  (  "El total es: "  &  Número ' Imagen ( j )  ); j  :=  Siguiente  ( j ); fin  Imprimir_e_Incrementar ;-- inicialización del paquete ejecutada cuando se elabora el paquetecomenzar mientras  i  <  Número ' Último  bucle Imprimir_e_Incrementar  ( i );  bucle final ;fin  Ejemplo ;

Este programa se puede compilar, por ejemplo, utilizando el compilador de código abierto disponible gratuitamente GNAT , ejecutando

gnatmake  -z  ejemplo.adb

Los paquetes, procedimientos y funciones pueden anidarse hasta cualquier profundidad, y cada uno 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

Un pragma es una directiva del compilador que transmite información al compilador para permitir una manipulación específica de la salida compilada. [47] Ciertos pragmas están integrados en el lenguaje, [48] mientras que otros son específicos de la implementación.

Algunos ejemplos de uso común de pragmas del compilador serían deshabilitar ciertas características, como la verificación de tipos en tiempo de ejecución o la verificación de límites de subíndices de matrices, o indicarle al compilador que inserte código objeto en lugar de una llamada de función (como lo hace C/C++ con las funciones en línea ).

Genéricos

Ada ha tenido genéricos desde que se diseñó por primera vez en 1977-1980. La biblioteca estándar utiliza genéricos para proporcionar muchos servicios. Ada 2005 agrega una biblioteca de contenedores genéricos integral a la biblioteca estándar, que se inspiró en la biblioteca de plantillas estándar de C++ .

Una unidad genérica es un paquete o un subprograma que toma uno o más parámetros formales genéricos . [49]

Un parámetro formal genérico es un valor, una variable, una constante, un tipo, un subprograma o incluso una instancia de otra unidad genérica designada. Para los tipos formales genéricos, la sintaxis distingue entre tipos discretos, de punto flotante, de punto fijo, de acceso (puntero), etc. Algunos parámetros formales pueden tener valores predeterminados.

Para crear una instancia de una unidad genérica, el programador pasa parámetros reales para cada formal. La instancia genérica se comporta entonces como cualquier otra unidad. Es posible crear instancias de unidades genéricas en tiempo de ejecución , por ejemplo, dentro de un bucle.

Véase también

  • Compiladores ADA
  • APSE : una especificación para un entorno de programación que respalde el desarrollo de software en Ada
  • Perfil Ravenscar : un subconjunto de las funciones de asignación de tareas de Ada diseñadas para la computación en tiempo real crítica para la seguridad
  • SPARK : un lenguaje de programación que consta de un subconjunto altamente restringido de Ada, anotado con metainformación que describe el comportamiento deseado de los componentes y los requisitos de tiempo de ejecución individuales.
  • VHDL , lenguaje de descripción de hardware basado en ADA

Notas

  1. ^ ver Resumen de los cambios en el lenguaje de Ada [34]
  1. ^ "Fundamento de Ada2012" (PDF) . adacore.com . Archivado (PDF) del original el 18 de abril de 2016 . Consultado el 5 de mayo de 2018 .
  2. ^ "Soluciones de software comercial para Ada, C y C++". AdaCore . Consultado el 4 de abril de 2023 .
  3. ^ "PTC ObjectAda". PTC.com . Consultado el 27 de enero de 2014 .
  4. ^ "Cambiador MapuSoft Ada-C/C++". 16 de abril de 2019.
  5. ^ "Lista de procesadores certificados Ada 95: detalles". ada-auth.org . Consultado el 4 de abril de 2023 .
  6. ^ Ada Rationale, 1986, págs.23, 70, 110-114, 137, 165, 236
  7. ^ "Especificaciones de la capilla (Agradecimientos)" (PDF) . Cray Inc. 2015-10-01. Archivado (PDF) desde el original el 2022-10-09 . Consultado el 2016-01-14 .
  8. ^ "Drago". Archivado desde el original el 14 de septiembre de 2020. Consultado el 6 de agosto de 2018 .
  9. ^ "El Proyecto Griffin". cs.nyu.edu . Consultado el 4 de abril de 2023 .
  10. ^ "Lenguaje de programación SparForte". www.sparforte.com . Consultado el 4 de abril de 2023 .
  11. ^ ab 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 (inactiva el 1 de noviembre de 2024).{{cite journal}}: CS1 maint: DOI inactivo a partir de noviembre de 2024 ( enlace )
  12. ^ "El lenguaje de programación Ada". Universidad de Michigan . Archivado desde el original el 22 de mayo de 2016. Consultado el 27 de mayo de 2016 .
  13. ^ Fuegi, J; Francis, J (2003). "Lovelace & Babbage y la creación de las 'notas' de 1843"". IEEE Anales de la Historia de la Computación . 25 (4): 16–26. doi :10.1109/MAHC.2003.1253887. S2CID  40077111.
  14. ^ "Concurrencia – Capítulo 6 – Guía de CALIDAD Y ESTILO de Ada 95". adaic.org . Consultado el 5 de noviembre de 2021 .
  15. ^ Taft, S. Tucker; Olsen, Florence (30 de junio de 1999). "Ada ayuda a producir código con menos errores". Government Computer News. págs. 2-3. Archivado desde el original el 31 de agosto de 2015. Consultado el 14 de septiembre de 2010 .
  16. ^ abc Feldman, Michael. "¿Quién usa Ada? Proyectos del mundo real impulsados ​​por el lenguaje de programación Ada, noviembre de 2014". Grupo de trabajo educativo SIGAda.
  17. ^ No hay gestión de memoria dinámica segura en ADA, en: Cómo escribir módulos del kernel de Linux en Rust seguro – Geoffrey Thomas y Alex Gaynor, The Linux Foundation, 2 de octubre de 2019
  18. ^ "DoD – Strawman Requirements – April 1975" (DoD – Requisitos del esbirro – Abril de 1975). iment.com . Consultado el 4 de abril de 2023 .
  19. ^ "John Goodenough | Perfil del personal de SEI". Sei.cmu.edu . Consultado el 27 de enero de 2014 .
  20. ^ CAR, Hoare (1981). "Las viejas ropas del Emperador" (PDF) . Comunicaciones de la ACM . 24 (2). Association for Computing Machinery : 75–83. doi : 10.1145/358549.358561 . S2CID  97895. Archivado (PDF) desde el original el 4 de marzo de 2016.
  21. ^ Watt, DA; Wichmann, BA; Findlay, W. (1987). Ada: Lenguaje y metodología . Prentice-Hall.
  22. ^ abcd Sward, Ricky E. (noviembre de 2010). "El ascenso, la caída y la persistencia de Ada". SIGAda '10: Actas de la conferencia internacional anual de ACM SIGAda sobre SIGAda. págs. 71–74. doi :10.1145/1879063.1879081. ISBN 978-1-4503-0027-8.
  23. ^ abc Rosen, JP. (agosto de 2009). "Las paradojas de Ada". Cartas de Ada . 24 (2). ACM SIGAda: 28–35. doi :10.1145/1620593.1620597. S2CID  608405.
  24. ^ 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 desde el original el 12 de marzo de 2012. Consultado el 16 de diciembre de 2010 .
  25. ^ 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 Universidad de Nueva York". 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. Número de identificación del sujeto  10586359.
  26. ^ ab "Lista de compiladores validados por Ada". Ada Information Clearinghouse. 1 de julio de 1992. págs. 1–36.
  27. ^ Ada Information Clearinghouse (11 de abril de 1983). "El mandato Ada del Congreso". Archivado desde el original el 4 de marzo de 2016. Consultado el 7 de junio de 2015 .
  28. ^ Babiak, Nicholas J. (1989). Ada, el nuevo lenguaje informático del sistema de armas del Departamento de Defensa: panacea o calamidad (PDF) . Universidad del Aire (Fuerza Aérea de los Estados Unidos) . pp. 39–40. Archivado (PDF) desde el original el 15 de diciembre de 2019.
  29. ^ "Pensamiento ágil". FlightGlobal . 16 de junio de 1999. Archivado desde el original el 15 de abril de 2021 . Consultado el 13 de febrero de 2024 .
  30. ^ Frisberg, Bo. "Uso de Ada en el sistema de control de vuelo Gripen" (PDF) . El Grupo de Interés Especial sobre Ada . Archivado (PDF) del original el 15 de enero de 2024. Consultado el 13 de febrero de 2024 .
  31. ^ AdaCore. "GNAT Pro elegido para el sistema ATC de próxima generación del Reino Unido". Archivado desde el original el 24 de diciembre de 2010. Consultado el 1 de marzo de 2011 .
  32. ^ AdaCore. "Mira quién usa Ada". Archivado desde el original el 24 de diciembre de 2010. Consultado el 1 de marzo de 2011 .
  33. ^ Ichbiah, JD (junio de 1979). "Avisos de ACM Sigplan". págs. 1–145. doi :10.1145/956650.956651.
  34. ^ Resumen de los cambios en el lenguaje de Ada
  35. ^ "ISO 8652:1987". ISO . 2013-02-21 . Consultado el 2024-01-19 .
  36. ^ "Ada 83 LRM, portada". archive.adaic.com . Consultado el 19 de enero de 2024 .
  37. ^ "ISO/IEC 8652:1995". ISO . Consultado el 19 de enero de 2024 .
  38. ^ "Manual de referencia del lenguaje Ada 95 (original) – Ada Resource Association" (Asociación de recursos Ada). www.adaic.org . Consultado el 19 de enero de 2024 .
  39. ^ ISO/IEC 8652:1995/Corr. 1:2001
  40. ^ Ada 95 RM con TC 1
  41. ^ "ISO/IEC 8652:1995/Amd 1:2007". ISO . Consultado el 19 de enero de 2024 .
  42. ^ "Manual de referencia de Ada, ISO/IEC 8652:2007(E) Ed. 3". www.adaic.org . Consultado el 19 de enero de 2024 .
  43. ^ "ISO/IEC 8652:2012". ISO . 2013-03-28 . Consultado el 2024-01-19 .
  44. ^ "ISO/IEC 8652:2012/Cor 1:2016". ISO . Consultado el 19 de enero de 2024 .
  45. ^ "Ada Syntax Card" (PDF) . Archivado desde el original (PDF) el 6 de julio de 2011. Consultado el 28 de febrero de 2011 .
  46. ^ "Subprogramas". learn.adacore.com . AdaCore . Consultado el 14 de abril de 2024 .
  47. ^ "Ada 83 LRM, sección 2.8: Pragmas". Archivo.adaic.com . Consultado el 27 de enero de 2014 .
  48. ^ "Ada 83 LRM, Apéndice/Anexo B: Pragmas de lenguaje predefinidos". Archive.adaic.com. Archivado desde el original el 2012-02-06 . Consultado el 2014-01-27 .
  49. ^ "Unidades genéricas". www.adaic.org . Consultado el 25 de abril de 2024 .

Referencias

Normas internacionales

Razón fundamental

Estos documentos se han publicado en diversas formas, incluida la impresa.

  • Ichbiah, Jean D .; Barnes, John GP; Firth, Robert J.; Woodger, Mike (1986), Fundamento del diseño del lenguaje de programación Ada, archivado desde el original el 2 de febrero de 2007También disponible apps.dtic.mil, pdf
  • Barnes, John GP (1995), Fundamento 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 un 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.
  • Gonzalez, Dean W. (1991). Manual del programador 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.
  • 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). Concurrencia en 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.
  • Inglés, 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 de ciclo de vida . Bantam Dell Pub Group. ISBN 0-553-09102-6.
  • Bishop, Judy (10 de mayo de 1990). Distribuido por 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 mediante 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 utilizando 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: Un método de diseño estructurado para sistemas ADA de tiempo real estricto . Holanda Septentrional. ISBN 0-444-82164-3.
  • Savitch, Walter; Peterson, Charles (1992). Ada: Introducción al arte y la ciencia de la programación . Benjamin-Cummings Publishing Company. ISBN 0-8053-7070-6.
  • Weiss, Mark Allen (1993). Estructuras de datos y análisis de algoritmos en Ada . Benjamin-Cummings Publishing Company. ISBN 0-8053-9055-3.
  • Ledgard, Henry (1983). Ada: An Introduction (segunda edición). Springer-Verlag. ISBN 0-387-90814-5.
  • Bjorner, Dines; Oest, Ole N., eds. (1980). Hacia una descripción formal de Ada . Londres: Springer-Verlag. ISBN 3-540-10283-3.

Lectura adicional

  • Asociación de recursos de Ada
  • Especificación del lenguaje de programación Ada del Departamento de Defensa (ANSI/MIL STD 1815A-1983)
  • JTC1/SC22/WG9 ISO sede de los estándares ADA
  • Materiales del lenguaje de programación Ada, 1981-1990. Instituto Charles Babbage , Universidad de Minnesota.
Obtenido de "https://es.wikipedia.org/w/index.php?title=Ada_(lenguaje_de_programación)&oldid=1255945964"