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] [actualizar]
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]
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 .
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.
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]
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 .
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 .
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
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.
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 ;
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.
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). ).
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.{{cite journal}}
: Mantenimiento CS1: DOI inactivo a partir de enero de 2024 ( enlace )Estos documentos se han publicado en diversas formas, incluida la impresa.