stringtranslate.com

Ada (lenguaje de programación)

Ada es un lenguaje de programación de alto nivel estructurado , de tipo estático , imperativo y orientado a objetos , inspirado en Pascal y otros lenguajes. Tiene soporte de lenguaje incorporado para diseño por contrato (DbC), escritura extremadamente segura , simultaneidad explícita, tareas, paso de mensajes sincrónicos, objetos protegidos y no determinismo . Ada mejora la seguridad y la capacidad de mantenimiento del código mediante el uso del compilador para encontrar errores a 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). En mayo de 2023 , el estándar, denominado informalmente Ada 2022, es ISO/IEC 8652:2023. [11]

Ada fue diseñado originalmente por un equipo dirigido por el 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 más de 450 lenguajes de programación utilizados por el Departamento de Defensa en ese momento. [12] Ada lleva el nombre de Ada Lovelace (1815-1852), a quien se le atribuye el mérito de ser la primera programadora informática. [13]

Características

Ada fue diseñada originalmente para sistemas integrados 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: escritura segura , mecanismos de programación modulares (paquetes), verificación en tiempo de ejecución , procesamiento paralelo ( tareas , paso de mensajes sincrónicos , objetos protegidos y declaraciones de selección no deterministas ), manejo de excepciones y genéricos . Ada 95 agregó soporte para programación orientada a objetos , incluido el despacho dinámico .

La sintaxis de Ada minimiza las opciones de formas de realizar operaciones básicas y prefiere palabras clave en inglés (como "o si no" y "y luego") a 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 "declarar", "comenzar" y "finalizar", donde el "fin" (en la mayoría de los casos) va seguido del identificador del bloque que cierra (por ejemplo, si... terminar si , bucle... finalizar bucle ). En el caso de los bloques condicionales, esto evita un else colgante que podría emparejarse con la expresión if anidada incorrecta en otros lenguajes como C o Java.

Ada está diseñada para desarrollar sistemas de software de gran tamaño. Los paquetes de Ada se pueden compilar por separado. Las especificaciones del paquete Ada (la interfaz del paquete) también se pueden compilar por separado sin la implementación para verificar la coherencia. Esto hace posible detectar problemas temprano durante la fase de 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 agreguen comprobaciones explícitas al código fuente. Por ejemplo, la sintaxis requiere un cierre de bloques con un nombre explícito para evitar errores debido a tokens finales que no coinciden. El cumplimiento de una escritura estricta permite detectar muchos errores de software comunes (parámetros incorrectos, 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, en algunos casos el compilador puede detectar posibles puntos muertos. [14] Los compiladores también suelen comprobar si hay 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 del búfer , violaciones de rango, errores uno por uno , errores de acceso a la matriz y otros errores detectables. Estas comprobaciones se pueden desactivar en aras de la eficiencia del tiempo de ejecución, pero a menudo se pueden compilar de manera eficiente. También incluye instalaciones para ayudar a la verificación del programa . Por estos motivos, Ada se utiliza a veces en sistemas críticos, donde cualquier anomalía podría tener consecuencias muy graves, por ejemplo, muerte accidental, lesiones o pérdidas financieras graves. Ejemplos de sistemas en los que se utiliza Ada incluyen aviónica , control de tráfico aéreo , ferrocarriles , banca, tecnología militar y espacial . [15] [16]

La gestión de memoria dinámica 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 mediante 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 administració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 diferentes. 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 de 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 la 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 guión doble ("--"), parecido a un guión largo , indica el texto del comentario. Los comentarios terminan al final de la línea; Intencionalmente no hay manera de hacer que un comentario abarque varias líneas, para evitar que los comentarios no cerrados anulen accidentalmente secciones enteras del código fuente. Por lo tanto, deshabilitar un bloque completo de código requiere el prefijo de cada línea (o columna) individualmente con "--". Si bien esto denota claramente código deshabilitado al crear una columna de "--" repetido en la página, también hace que la desactivación/reactivación experimental de bloques grandes sea un proceso más prolongado en editores sin soporte para comentarios de bloques.

El punto y coma (";") es un terminador de declaración y la declaración nula o sin operación es null;. No se permite un single ;sin declaración de rescisión.

A diferencia de la mayoría de los estándares 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 contenido gratuito . 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 justificativo que explica el diseño del lenguaje y el uso de diversas construcciones del lenguaje. Este documento también es muy utilizado por los programadores. Cuando se revisó el lenguaje, se redactó un nuevo documento de justificación.

Una herramienta de software gratuita notable que utilizan muchos programadores de Ada para ayudarles a escribir el código fuente de Ada es GNAT Programming Studio, y GNAT, que forma parte de la colección de compiladores GNU .

Historia

En la década de 1970, el Departamento de Defensa de EE. UU. (DoD) empezó 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 soportaba 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 encontrando o creando 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 comenzando con una propuesta original de muñeco de paja [18], el lenguaje de programación final se llamó Ada. El número total de lenguajes de programación de alto nivel utilizados 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 establecen los requisitos que consideraban que debía satisfacer un lenguaje de programación. Se revisaron formalmente muchos idiomas existentes, pero el equipo concluyó en 1977 que ningún idioma existente cumplía con las especificaciones.

Pintura 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 liderada por Benjamin Brosgol), Green ( Honeywell , liderada por Jean Ichbiah ), Blue ( SofTech , liderada por John Goodenough). ) [19] y Amarillo ( SRI International , dirigido por Jay Spitzen). En abril de 1978, tras el escrutinio público, las propuestas Roja y Verde pasaron a la siguiente fase. En mayo de 1979, se eligió la propuesta Green, diseñada por Jean Ichbiah en Honeywell, y se le dio el nombre de Ada, en honor a Augusta Ada King, condesa de Lovelace, generalmente conocida 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 Military Standard se aprobó el 10 de diciembre de 1980 (cumpleaños 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 en el Premio Turing para criticar a Ada por ser demasiado compleja y, por 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 inicios. Sus partidarios y otros predijeron que podría convertirse en un lenguaje dominante para la programación de propósito general y no sólo para trabajos relacionados con la defensa. [22] Ichbiah declaró públicamente que dentro de diez años, sólo quedarían dos lenguajes de programación: 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 aprobar el conjunto de validación masivo de la capacidad de validación del compilador Ada (ACVC), requerido por el gobierno, que se requería en otra característica novedosa del esfuerzo del lenguaje Ada. [23] 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 un comité... difícil de entender". uso, y en general un despilfarro desastroso y multimillonario... Ada Lovelace... casi con seguridad 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 probablemente hay una buena lengua pequeña que grita para salir del interior de su vasta y elefantina masa." [24]

La primera implementación validada de Ada fue el traductor NYU Ada/Ed, [25] certificado el 11 de abril de 1983. NYU Ada/Ed se implementa en el lenguaje establecido de alto nivel SETL . [26] Varias empresas 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 . [27] Los fabricantes de computadoras que tenían un negocio importante 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 . [27]

En 1991, el Departamento de Defensa de Estados Unidos comenzó a exigir el uso de Ada (el mandato de Ada ) para todo el software, [28] aunque a menudo se concedían excepciones a esta regla. [22] El mandato Ada del Departamento de Defensa fue efectivamente eliminado 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 involucraban 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á. [29]

A finales de los 80 y principios de los 90, los compiladores de Ada habían mejorado en rendimiento, pero todavía había 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 del Boeing 777 , se escribió en Ada, al igual que los sistemas fly-by-wire del aerodinámicamente inestable Eurofighter Typhoon , [30] Saab Gripen , [31] Lockheed Martin F-22 Raptor y el sistema de control de vuelo de reemplazo DFCS para el Grumman F-14 Tomcat . El sistema canadiense de tráfico aéreo automatizado se escribió en 1 millón de líneas de Ada ( recuento 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 tráfico aéreo, por ejemplo, el sistema de control de tráfico aéreo Interim Future Area Control Tools Support (iFACTS) de próxima generación del Reino Unido está diseñado e implementado utilizando SPARK Ada. [32] También se utiliza en el sistema francés de señalización en cabina TVM en el sistema ferroviario de alta velocidad TGV y en los trenes suburbanos del metro de París, Londres, Hong Kong y Nueva York. [16] [33]

Estandarización

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

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 [a] , la edición revisada se publicó en 1983 como ANSI/MIL-STD 1815A. Sin más cambios, se convirtió en estándar ISO en 1987. [36] 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 parte de ISO. [37] 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 [38] [39] se publicó en febrero de 1995, lo que lo convierte en el primer lenguaje de programación orientado a objetos estándar ISO. Para ayudar con la revisión del estándar y su futura aceptación, la Fuerza Aérea de EE. UU . financió el desarrollo del compilador GNAT . Actualmente, el compilador GNAT es 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, [40] [41] y el 9 de marzo de 2007 se publicó una enmienda importante, ISO/IEC 8652:1995/Amd 1:2007 [42] [43] , comúnmente conocida como Ada 2005 porque el trabajo en el nuevo estándar 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 el envío 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 [44] (ver 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 [45] (ver RM 2012 con TC 1).

El 2 de mayo de 2023, la comunidad de 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 sólo 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 queda derogado. Los otros nombres son sólo informales y 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 computadora—Vinculaciones 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 presenta 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 se incluyeron en el ALGOL 60 original , como definiciones de tipos , registros , punteros y enumeraciones . Tales construcciones fueron en parte heredadas o inspiradas por Pascal .

"¡Hola Mundo!" en ada

Un ejemplo común de la sintaxis de un idioma es el programa Hola mundo : (hello.adb)

con  Ada.Text_IO ;procedimiento  hola  escomenzar Ada . Texto_IO . Put_Line  ( "¡Hola mundo!" );fin  Hola ;

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

mosquitomake  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 verificar violaciones de la definición de tipo en tiempo de compilación y ejecución (es decir, 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 proporcionados por el lenguaje son tipos de tareas y tipos protegidos.

Por ejemplo, una fecha podría representarse como:

tipo  Day_type  es  el rango  1  ..  31 ;tipo  Month_type  es  el rango  1  ..  12 ;tipo  Year_type  es  el rango  1800  ..  2100 ;el tipo  Horas  es  mod  24 ;el tipo  de día laborable  es  ( lunes ,  martes ,  miércoles ,  jueves ,  viernes ,  sábado ,  domingo );tipo  La fecha  es registro Día  :  Tipo_día ; Mes  :  tipo_mes ; Año  :  Tipo_año ; registro final ;

Importante tener en cuenta: Tipo_día, Tipo_mes, Tipo_año y Horas son tipos incompatibles, lo que significa que, por ejemplo, la siguiente expresión es ilegal:

Hoy :  Tipo_día  :=  4 ;Mes_actual :  Tipo_mes  :=  10 ;...  Hoy  +  Mes_actual  ...  -- ilegal

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

Los tipos se pueden refinar declarando subtipos :

el subtipo  Horas_de_trabajo  es  el rango de horas  0 .. 12 ; -- como máximo 12 horas de trabajo al día    el subtipo  Día_laboral  es  el rango de días laborables  lunes .. viernes ; -- Días para trabajar    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. [46] Ada 95 añade características adicionales para la extensión de tipos orientada a objetos.

Estructuras de Control

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

-- mientras que a no es igual a b, bucle.mientras que  a  /=  b  bucle Ada . Texto_IO . Put_Line  ( "Esperando" ); bucle final ;si  a  >  b  entonces Ada . Texto_IO . Put_Line  ( "Condición cumplida" );demás Ada . Texto_IO . Put_Line  ( "Condición no cumplida" );terminara  si ;para  i  en  1  ..  10  bucles Ada . Texto_IO . Poner  ( "Iteración: " ); Ada . Texto_IO . Poner  ( yo ); Ada . Texto_IO . Poner_Linea ; bucle final ;bucle un  :=  un  +  1 ; salir  cuando  a  =  10 ; bucle final ;caso  yo  soy cuando  0  =>  Ada . Texto_IO . Poner  ( "cero" ); cuando  1  =>  Ada . Texto_IO . Pon  uno " ); cuando  2  =>  Ada . Texto_IO . Poner  ( "dos" ); -- las declaraciones de casos deben cubrir todos los casos posibles: cuando  otros  =>  Ada . Texto_IO . Poner  ( "ninguno de los anteriores" ); caso final ;for  aWeekday  in  Weekday ' Bucle de rango  : recorre una enumeración  Put_Line  (  Imagen del día de la semana ( un día de la semana ) ); -- representación de cadena de salida de una enumeración   si  es un día de la semana  en  el día de trabajo ,  entonces  : verificación de un subtipo de una enumeración Put_Line  (  "para trabajar"  & Imagen de horas_de_trabajo ( carga_de_trabajo ( un día de la semana )) ); -- acceso a una tabla de búsqueda    terminara  si ; bucle final ;

Paquetes, procedimientos y funciones.

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

Ejemplo: especificación del paquete (ejemplo.ads)

 El ejemplo  del paquete es el tipo  Número  es  el rango  1  ..  11 ; procedimiento  Print_and_Increment  ( j : número de entrada  y salida  );final  Ejemplo ;

Cuerpo del paquete (ejemplo.adb)

con  Ada.Text_IO ; cuerpo  del paquete El ejemplo  es i  :  Número  :=  Número ' Primero ; El procedimiento  Print_and_Increment  ( j : in  out  Number )  es función  Siguiente  ( k : en  Número )  return  El número  es comenzar devolver  k  +  1 ; finalizar  Siguiente ; comenzar Ada . Texto_IO . Put_Line  (  "El total es:"  &  Número ' Imagen ( j )  ); j  :=  Siguiente  ( j ); finalizar  Imprimir_y_Incrementar ;-- inicialización del paquete ejecutada cuando se elabora el paquetecomenzar while  i  <  Número ' Último  bucle Imprimir_e_incrementar  ( i );  bucle final ;final  Ejemplo ;

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

gnatmake  -z  ejemplo.adb

Los paquetes, procedimientos y funciones pueden anidarse en 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.

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

Genéricos

Ada ha tenido genéricos desde que fue diseñado 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érica completa 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 .

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.

Ver también

Notas

  1. ^ ver Resumen de cambios en el idioma de Ada [35]
  1. ^ "Justificación de Ada2012" (PDF) . adacore.com . Archivado (PDF) desde el 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. ^ "Objeto PTCAda". 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 9 de octubre de 2022 . Consultado el 14 de enero de 2016 .
  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 . Asociación para Maquinaria de Computación. XLIII (1): 3. doi :10.1145/3631483 (inactivo el 31 de enero de 2024).{{cite journal}}: Mantenimiento CS1: DOI inactivo a partir de enero 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. ^ Fuegui, J; Francisco, J (2003). "Lovelace & 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.
  14. ^ "Concurrencia - Capítulo 6 - Guía de CALIDAD Y ESTILO Ada 95". adaic.org . Consultado el 5 de noviembre de 2021 .
  15. ^ Taft, S. Tucker; Olsen, Florencia (30 de junio de 1999). "Ada ayuda a generar código con menos errores". Noticias informáticas del gobierno. 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 utiliza Ada? Proyectos del mundo real impulsados ​​por el lenguaje de programación Ada, noviembre de 2014". Grupo de Trabajo de Educación SIGada.
  17. ^ no hay gestión de memoria dinámica segura en ADA, en: Escritura de módulos del kernel de Linux en Safe Rust - Geoffrey Thomas y Alex Gaynor, The Linux Foundation, 2 de octubre de 2019
  18. ^ "DoD - Requisitos de Strawman - 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. ^ COCHE, Hoare (1981). «El traje viejo del emperador» (PDF) . Comunicaciones de la ACM . Asociación para Maquinaria de Computación . 24 (2): 75–83. doi : 10.1145/358549.358561 . S2CID  97895. Archivado (PDF) desde el original el 4 de marzo de 2016.
  21. ^ Vatio, DA; Wichmann, Licenciado en Letras; Findlay, W. (1987). Ada: Lenguaje y Metodología . Prentice Hall.
  22. ^ abcd Sward, Ricky E. (noviembre de 2010). "El ascenso, caída y 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.
  23. ^ abc Rosen, JP. (Agosto de 2009). "Las paradojas de Ada". Letras de Ada . ACM SIGada. 24 (2): 28–35. doi :10.1145/1620593.1620597. S2CID  608405.
  24. ^ "ESTE ES EL ARCHIVO JARGO, VERSIÓN 2.6.2" (TXT) . 14 de febrero de 1991 . Consultado el 31 de enero de 2023 .
  25. ^ 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 .
  26. ^ Dewar, Robert BK; Fisher, Gerald A. Jr.; Schönberg, 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. S2CID  10586359.
  27. ^ ab "Lista de compiladores validados por Ada". Centro de intercambio de información de Ada. 1 de julio de 1992. págs. 1–36.
  28. ^ Centro de intercambio de información de Ada (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 .
  29. ^ Babiak, Nicolás 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 Estados Unidos) . págs. 39–40. Archivado (PDF) desde el original el 15 de diciembre de 2019.
  30. ^ "Pensamiento ágil". Vuelo Global . 16 de junio de 1999. Archivado desde el original el 15 de abril de 2021 . Consultado el 13 de febrero de 2024 .
  31. ^ Frisberg, Bo. "Uso de Ada en el sistema de control de vuelo Gripen" (PDF) . El grupo de interés especial sobre Ada . Archivado (PDF) desde el original el 15 de enero de 2024 . Consultado el 13 de febrero de 2024 .
  32. ^ 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 .
  33. ^ AdaCore. "Mira quién está usando Ada". Archivado desde el original el 24 de diciembre de 2010 . Consultado el 1 de marzo de 2011 .
  34. ^ Ichbiah, JD (junio de 1979). "Avisos de ACM Sigplan". págs. 1–145. doi :10.1145/956650.956651.
  35. ^ Resumen de los cambios de idioma de Ada
  36. ^ "ISO 8652:1987". YO ASI . 2013-02-21 . Consultado el 19 de enero de 2024 .
  37. ^ "Ada 83 LRM, portada". archivo.adaic.com . Consultado el 19 de enero de 2024 .
  38. ^ "ISO/CEI 8652:1995". YO ASI . Consultado el 19 de enero de 2024 .
  39. ^ "Manual de referencia del lenguaje Ada 95 (original) - Ada Resource Association". www.adaic.org . Consultado el 19 de enero de 2024 .
  40. ^ ISO/IEC 8652:1995/Corr 1:2001
  41. ^ Ada 95 RM con TC 1
  42. ^ "ISO/IEC 8652:1995/Enm. 1:2007". YO ASI . Consultado el 19 de enero de 2024 .
  43. ^ "Manual de referencia de Ada, ISO/IEC 8652:2007(E) Ed. 3". www.adaic.org . Consultado el 19 de enero de 2024 .
  44. ^ "ISO/IEC 8652:2012". YO ASI . 28 de marzo de 2013 . Consultado el 19 de enero de 2024 .
  45. ^ "ISO/IEC 8652:2012/Cor 1:2016". YO ASI . Consultado el 19 de enero de 2024 .
  46. ^ "Tarjeta de sintaxis Ada" (PDF) . Archivado desde el original (PDF) el 6 de julio de 2011 . Consultado el 28 de febrero de 2011 .
  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". Archivo.adaic.com. Archivado desde el original el 6 de febrero de 2012 . Consultado el 27 de enero de 2014 .

Referencias

Estándares internacionales

Razón fundamental

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

Libros

Otras lecturas

enlaces externos

enlaces externos