Menú
Está libre
registro
hogar  /  SOBRE/ Cumpleaños del infierno de los lenguajes de programación. Quiero saberlo todo

Cumpleaños del infierno de los lenguajes de programación. Quiero saberlo todo

Sergey Bobrovsky

La historia de este lenguaje no comienza en 1975, cuando el Departamento de Defensa de EE. UU. (MoD) decidió comenzar a desarrollar un lenguaje de programación unificado para las fuerzas armadas estadounidenses y, más tarde, para toda la OTAN. Su historia comienza con el nombre, pues Ada es el nombre de Augusta Ada Lovelace, a quien se considera la primera programadora, la hija del poeta inglés Byron y una tal Anabella Milbank, de quien su marido se separó para siempre un mes después del nacimiento de ella. hija, que nació el 10 de diciembre de 1815. En general, la historia de la cibernética está envuelta en un oscuro misterio, y solo por hechos fragmentarios se puede juzgar que los fundadores de esta ciencia en los últimos doscientos años fueron varios místicos y ocultistas, comenzando por August de Morgan, uno de los maestros de Ada, y terminando con los asociados de Norbert Wiener que estudiaron los métodos de formación de la opinión pública y la manipulación.

Después de que Charles Babbage construyó su máquina de computación mecánica, Ada le escribió el primer programa para calcular los coeficientes de Bernoulli. En el futuro, desarrolló una teoría real de la programación, introdujo el concepto de ciclo y algunos términos clave más que los estudiantes de las facultades cibernéticas estudian casi literalmente hoy. Hoy en día, Ada es conocida por todos como la primera programadora, y nada más, pero me pregunto por qué una niña tiene habilidades tan únicas. Ella misma respondió a esta pregunta con franqueza: “Juro por el Diablo que dentro de 10 años chuparé una cierta cantidad de sangre vital de los misterios del Universo, y de una manera que las mentes y los labios ordinarios de los mortales no podrían hacer. la fuerza aún no se usa en mi pequeño ser flexible ... ". Sin embargo, no hubo patrocinadores para el proyecto informático: todavía no había misiles nucleares, y Ada, después de haber perdido toda su fortuna en las carreras y meterse en una historia sucia, murió a la edad de 37 años, como su famoso padre.

Por lo tanto, si los estadounidenses deberían haber ensalzado tanto a Ada, usando su nombre como el nombre de un proyecto tan ambicioso, es una cuestión muy controvertida.

Pero volvamos a la historia del lenguaje en sí. Cinco años después del inicio del proyecto, cientos de expertos seleccionaron entre 17 variantes el único idioma que cumple con los requisitos del MO, desarrollado por un pequeño grupo bajo el liderazgo del talentoso científico Jean Ishbia. La versión final de la norma internacional ISO 8652: 1987 se publicó en 1987. Según informes oficiales, todos los mejores especialistas del mundo en el campo de la programación participaron en la creación y mejora de este lenguaje, lo que, sin embargo, genera dudas. Esto, por ejemplo, se ve confirmado por la ausencia del concepto de objeto en la versión original de Ada y la falta de participación, por razones obvias, en este proyecto de programadores soviéticos.

Se han invertido decenas de miles de millones de dólares en el desarrollo de la infraestructura de Ada en todo el mundo. Esto provocó la aparición de afirmaciones ambiciosas como "El siglo XX pasará bajo el signo de Ada", sin embargo, como es habitual, la vida lo ha puesto todo en su lugar.

Desafortunadamente para el Departamento de Defensa de EE. UU. (Y, en consecuencia, afortunadamente para los "oponentes potenciales" de EE. UU.), El desarrollo de un estándar claro para este lenguaje y la creación de compiladores efectivos se completaron justo en ese momento (principios de los 80), cuando el software la industria ya se vislumbraba en el horizonte, un nuevo lenguaje C ++ con ideología de objetos. Ahora es difícil decir lo que sintió el comité de desarrollo de Ada, al ver la creciente popularidad de C ++ y el viejo y olvidado paradigma de pensamiento basado en objetos. Pero los fondos asignados ya se habían gastado, se había creado el estándar y no había vuelta atrás.

La estructura de Ada es muy similar a Pascal, o más precisamente, a Modula. La sintaxis de la mayoría de los operadores y descripciones es casi idéntica a la de Modula, aunque apareció casi al mismo tiempo que Ada, y es difícil decir quién influyó en quién o si lo hizo. En Ada, en particular, se agregaron bastantes extensiones diferentes, por lo que este lenguaje no se puede llamar compacto, en comparación con el mismo Pascal. En cuanto al número de posibilidades, es más probable que se parezca a PL / 1. Pero dado que el énfasis principal de los creadores de Ada fue satisfacer los deseos de los "primeros departamentos" estadounidenses, los medios de privacidad de los datos (visibilidad) y la capacidad de crear bloques separados utilizando solo especificaciones (descripciones de interfaz de módulos) de otros desarrolladores. eran los más perfectos para su época. Por ejemplo, el programador que realmente escribió el código para calcular la trayectoria de un misil de crucero no tenía idea de dónde y para qué fines se usaría su módulo, aunque tenía acceso a las especificaciones requeridas de otros empleados y podía depurar su sección de código sin cualquier problema. Debido a la estricta delimitación de acceso a niveles diferentes especificaciones, a veces es incluso imposible determinar para qué y por qué medios se llamará este procedimiento. Sin embargo, este afán de desarrollo de software independiente ha llevado a un sistema muy complejo de relaciones entre las especificaciones de los módulos y la aparición de algunos "huecos" que pueden ocasionar efectos secundarios, cuya presencia, sin embargo, el Departamento de Defensa de EE. UU. Encontró. incluso útil.

Los elementos de la tipificación de datos se reforzaron significativamente, así como los tipos en sí mismos se formalizaron más. Todas las funciones de E / S se han eliminado de la sintaxis estándar y el manejo de excepciones se ha convertido en una parte integral del lenguaje. Además, el poder de las construcciones de control se llevó al límite, lo que convirtió a Adu en el más avanzado de los otros lenguajes similares a Pascal.

Borland pronto lanzó su Turbo Pascal, en el que se construyó el concepto de un módulo, y acercó su versión de Pascal a Ada en términos de capacidades, pero en el futuro, intentará crear lenguajes de programación sin objetos de tercera generación. destinados al desarrollo de proyectos ultra grandes, afortunadamente, no se hicieron. De modo que Ada puso fin a una larga lista de lenguajes procedimentales sencillos, empezando por Fortran y Algol. De hecho, todo lo que se podía pensar en el marco de la ideología de la programación estructurada estaba encarnado en el Infierno. Luego floreció la programación de objetos y Ada se desvaneció en un segundo plano.

Sin embargo, este lenguaje todavía ocupa un nicho en el que aún no tiene igual. Además de compilar módulos por separado y garantizar el secreto jerárquico de las especificaciones, este lenguaje ha implementado una propiedad como el soporte para la programación paralela. Tomado a un nivel más o menos alto en Algol-68, luego desarrollado en el Módulo-2, se materializó en las muy poderosas herramientas de Ada, las llamadas tareas que se pueden realizar independientemente unas de otras en computadoras paralelas. Esto llevó al nacimiento de toda una ideología de programación basada en tareas que podían realizarse "pseudo-paralelas", en una computadora con un procesador. En este caso, el problema que se estaba resolviendo se dividió en un conjunto de procedimientos operativos simultáneos que interactúan de forma independiente entre sí. Era un poco como una forma de resolver un problema en Prolog: un cierto mundo virtual se describe simplemente, y luego, por así decirlo, se "pone en marcha" y la solución se encuentra por sí misma.

Es aún más sorprendente que el Departamento de Defensa de los Estados Unidos, por una razón u otra, abandonó la ideología del objeto, que estaba perfectamente encarnada en

60 en Simul-67, y probablemente lo lamentó más de una vez. Es cierto que en el lenguaje Ada se introdujo una especie de reemplazo patético para una serie de oportunidades proporcionadas por la programación orientada a objetos: las llamadas plantillas, es decir, procedimientos con parámetros de tipos indefinidos. Pero de todos modos, las principales ventajas de Ada, que le permiten hoy resistir la avalancha de lenguajes más desarrollados, fueron, además de una poderosa financiación, un soporte integrado para la ejecución paralela de tareas y unos potentes medios para coordinar su interacción. Cabe señalar que la orientación principal de Ada no es en absoluto los sistemas de automatización de contabilidad en el Departamento de Defensa de los EE. UU., Sino puramente misiones de combate, por ejemplo, como la navegación en tiempo real basada en microprocesadores de un misil autoguiado, donde se requiere simultáneamente procesar información proveniente continuamente de una variedad de sensores. ... Anteriormente, estas tareas se escribían en lenguaje ensamblador, lo que provocaba muchos errores y dificultades de mantenimiento. Para tales tareas, Ada, por supuesto, se adapta perfectamente bien.

Sin embargo, Ada sigue posicionándose como una buena herramienta para desarrollar grandes sistemas de software... Es cierto que ahora las voces en apoyo de este lenguaje suenan más tranquilas, algo así: "Ada, al menos no peor que C." El Departamento de Defensa de EE. UU., Teniendo en cuenta su principal error: la falta de objetos, de acuerdo con los requisitos modernos para la tecnología de desarrollo de software, ha desarrollado un nuevo estándar de lenguaje ISO / IEC 8652: 1985 (E). Describe la versión del lenguaje Ada95 (o Ada9X). Lo más interesante es que esta versión es el primer sistema de programación orientado a objetos del mundo, en el que se introdujo el estándar internacional, aparentemente por pedido (con C ++, esto aún no es posible). Además, el lenguaje ha mejorado el sistema para coordinar la visibilidad de los datos en las especificaciones de los módulos y ha agregado herramientas para mejorar la eficiencia de las tareas paralelas.

El Departamento de Defensa de Estados Unidos está bastante celoso de su querida creación e incluso registró la palabra "Ada" como su marca registrada. Sin embargo, posteriormente, en lugar de la marca, el Ministerio de Defensa decidió utilizar "Ada" como su marca interna certificada. El Departamento de Defensa de los Estados Unidos no está particularmente contento con la aparición de versiones comerciales de este idioma. Por supuesto, nadie tiene derecho a impedirle que escriba su propio compilador, pero para que reciba reconocimiento comercial, debe cumplir con el estándar militar, y las pruebas solo las lleva a cabo el comité AJPO del Departamento de Estado de EE. UU. Defensa, que verifica de manera muy estricta el cumplimiento por parte del compilador de muchos requisitos, incluidos, obviamente, y los puramente políticos.

Sin embargo, se pueden obtener varias versiones de Ada, como suele ser el caso de los lenguajes de programación, de forma gratuita, es decir, de forma gratuita, no de forma pirateada, sino simplemente versiones freeware y, por supuesto, por dinero.

De las versiones gratuitas, lo primero a destacar es el compilador GNAT - GNU Ada95. Está disponible en código fuente del Proyecto GNU (Software Redistribuible Gratis). También puede funcionar en una computadora con un procesador, solo es necesario que el sistema operativo admita multitarea. Podría ser, por ejemplo, alguna versión de UNIX u OS / 2. En cuanto a MS DOS, adivine usted mismo. Sin embargo, si realmente desea ejecutar cien o dos procesos paralelos en su computadora personal bajo MS DOS 6.x, entonces es muy posible probar Ada / Ed, el compilador e intérprete de la versión de 1987 del lenguaje, que, sin embargo, es completamente incompatible con el estándar y carece de una serie de elementos esenciales ...

Si tienes dinero, la situación, por supuesto, se vuelve más fácil. Dentro del salario mensual de un programador ruso promedio, puede comprar, por ejemplo, FirstAda y escribir un sistema de control de refrigerador. Los sistemas más caros para Windows, OS / 2 o UNIX, certificados por el Departamento de Defensa de los EE. UU., Puede intentar comprarlos directamente a las empresas de desarrollo, de las cuales hay alrededor de una docena.

Es interesante que no solo el lenguaje en sí haya sido estandarizado, lo que hizo posible crear programas fácilmente portables, sino también un conjunto de ayudas para el desarrollador: varias bibliotecas de E / S y organizaciones de interfaz gráfica, preprocesadores, verificadores, generadores de código, analizadores de la estructura lógica del código fuente, programas para probar compiladores, etc. Por supuesto, hay paquetes grandes que incluyen todas las herramientas de desarrollo estandarizadas, pero parecen ser muy costosos.

Sería muy interesante saber si la URSS estaba trabajando en lenguajes diseñados para resolver problemas militares similares. ¿O nuestros especialistas escribieron solo en Assembler?

Resumen sobre el tema:

Ada



Plan:

    Introducción
  • 1 Características del idioma
  • 2 "¡Hola, mundo!" en el infierno
  • 3 Historia
  • 4 Infierno en la URSS y Rusia
  • 5 Crítica
  • 6 Distribución, perspectivas
  • 7 Sistemas operativos escritos en Ada
  • 8 compiladores del infierno
  • 9 Idiomas derivados
  • 10 Datos interesantes
  • Notas (editar)
    Literatura

Introducción

Infierno (Ada) es un lenguaje de programación creado en 1979-1980 como resultado de un proyecto emprendido por el Departamento de Defensa de Estados Unidos con el objetivo de desarrollar un lenguaje de programación unificado para sistemas embebidos (es decir, sistemas de control para complejos automatizados que operan en tiempo real). Se trataba, en primer lugar, de sistemas de control a bordo de objetos militares (barcos, aviones, tanques, misiles, proyectiles, etc.). Los desarrolladores no se enfrentaron a la tarea de crear un lenguaje universal, por lo que las decisiones tomadas por los autores de Ada deben ser percibidas en el contexto de las peculiaridades del área temática elegida. El idioma lleva el nombre de Ada Lovelace.


1. Características del idioma

En su versión original, estandarizada en 1983, Ada es un lenguaje de programación modular estructurado que contiene herramientas de programación de alto nivel para procesos paralelos. La sintaxis de Ada se hereda de lenguajes como Algol o Pascal, pero ampliada y también más estricta y lógica. Ada es un lenguaje fuertemente tipado, excluye trabajar con objetos que no tienen tipos y las conversiones automáticas de tipos se reducen al mínimo absoluto. En el estándar de 1995, se agregaron al lenguaje los medios básicos de programación orientada a objetos; en el estándar de 2007, estos medios se complementaron, por lo que el moderno Ada es un lenguaje de programación orientado a objetos.

De las características de la sintaxis, se puede señalar:

  • El lenguaje no distingue entre mayúsculas y minúsculas.
  • Los programas son modulares, el mecanismo para controlar la importación-exportación de descripciones entre módulos incluye dos directivas diferentes: una para conectar otro módulo (con), la otra para importar sus descripciones (uso). También es posible cambiar el nombre del módulo durante la importación (cambiar el nombre); esta opción le permite usar identificadores más convenientes para la designación del paquete.
  • Los paquetes (uno de los tipos de módulos) pueden contener un encabezado y una parte personal; lo que contiene no se exporta y no está disponible para otros módulos.
  • Se soporta el mecanismo de módulos generalizados (personalizables): paquetes, procedimientos y funciones que permiten describir algoritmos de procesamiento de datos generalizados sin especificar un tipo específico.
  • Un sistema desarrollado de tipos, tanto integrado como generado por el programador. Hay muchas formas de crear nuevos tipos, el lenguaje admite dos conceptos diferentes: "subtipo" y "tipo derivado". Las variables de tipo y subtipo son compatibles, las variables de tipo y su tipo derivado no lo son.
  • Instalaciones de manejo de excepciones.
  • Medios desarrollados para referirse a procedimientos y funciones: se admiten parámetros de entrada y salida, transferencia de parámetros reales en un orden arbitrario con la indicación de nombres formales, parámetros con valores predeterminados.
  • Se admite la sustitución de procedimientos, funciones y operadores, creando varias variantes de un procedimiento, función u operador con el mismo nombre, pero con diferentes firmas (tipos y número de parámetros).
  • Las construcciones integradas en el lenguaje para admitir la programación paralela: se admiten los conceptos de "tarea" (un fragmento de programa ejecutado en paralelo), "entrada de tarea" (un medio de sincronización y comunicación de tareas en ejecución paralela);), hay un Operador SELECT para organizar la interacción condicional entre subprocesos (selección de una tarea paralela con la que interactuar, dependiendo de la preparación para una cita y algunas otras condiciones). En principio, las herramientas de programación paralela disponibles en el lenguaje son suficientes para resolver una gran clase de tareas que requieren procesamiento paralelo, sin recurrir a herramientas externas, como bibliotecas adicionales o API del sistema operativo.

Para cumplir con los requisitos de confiabilidad, el lenguaje está construido de tal manera que se detecten tantos errores como sea posible en el momento de la compilación. Además, uno de los requisitos en el desarrollo del lenguaje era la máxima legibilidad de los textos del programa, incluso a expensas de la facilidad de escritura. El resultado de este enfoque fue una sintaxis algo "pesada" y muchas restricciones que están ausentes en los lenguajes industriales más comunes (C y C ++) y que los programadores profesionales a menudo perciben como redundantes, por ejemplo, el mismo tipo fuerte . Esto llevó a la formación de la idea de Ada como un lenguaje complejo, oscuro e inconveniente de usar.


2. "¡Hola, mundo!" en el infierno

Varias variantes diferentes de "¡Hola, mundo!" se puede ver en los Wikilibros. Las diferencias se deben a la necesidad de utilizar la función de biblioteca Put_Line; hay tres formas diferentes de organizar este uso en este lenguaje.

Con Ada.Text_IO; procedimiento Hola es uso Ada.Text_IO; begin Put_Line ("¡Hola, mundo!"); fin Hola;

Aquí, para usar la función Put_Line, el paquete Ada.Text_IO que la contiene se importa usando la construcción use, lo que hace posible llamar a la función por su nombre sin calificación, especificando el nombre del paquete que contiene la función en la llamada.


3. Historia

El desarrollo del idioma se llevó a cabo como parte de una competencia internacional organizada y financiada por el Departamento de Defensa de EE. UU. El objetivo del desarrollo era obtener un lenguaje de programación que pudiera convertirse en un uniforme para el desarrollo de proyectos encargados por el departamento militar, principalmente para el desarrollo de sistemas embebidos para fines militares y para grandes computadoras militares (basado en el procesador iAPX 432 de Intel). El trabajo se inició en 1975, con la formación de un conjunto de requisitos para el lenguaje, que satisfarían plenamente a los desarrolladores de sistemas de este tipo. La lista inicial de requisitos, publicada con el nombre en clave "Straw", se presentó para su revisión a varias organizaciones y empresas, se perfeccionó sistemáticamente en el transcurso de dos años y finalmente se convirtió en un documento final llamado "Steel".

Una vez completada la formación de los requisitos, se llevó a cabo un análisis, que mostró que ninguno de los lenguajes de programación disponibles satisface suficientemente los requisitos, por lo que se decidió desarrollar un nuevo lenguaje. En 1977 se anunció un concurso para su creación, se pidió a los desarrolladores que se basaran en uno de los tres idiomas: Pascal, Algol-68 o PL / 1.

De los 15 proyectos presentados a concurso, 4 fueron seleccionados (todos basados ​​en Pascal). Estos proyectos se enviaron para una revisión adicional. En la siguiente etapa, de 4 proyectos, se seleccionaron dos, de los cuales, después de la siguiente revisión, se seleccionó uno. Este idioma se llamó "Ada" - el grupo que lo desarrolló bajo el liderazgo del francés Jean Ishbia le dio un nombre al idioma en honor a Augusta Ada King Lovelace (1815-1852), la hija del poeta J. Byron, quien desarrolló programas para la computadora de Babbage y es considerado el primer programador del mundo.

En 1983, el lenguaje fue estandarizado oficialmente por ANSI. El estándar de lenguaje ANSI / MIL-STD-1815-A-1983 fue aprobado el 17 de febrero de 1983. El Departamento de Defensa de EE. UU. Ha registrado el nombre "Ada" como marca comercial registrada, lo que prohíbe la liberación de traductores para el idioma que no se han sometido a pruebas formales de cumplimiento. El procedimiento consistió en ejecutar un gran número (más de 1000) de programas de prueba (el llamado conjunto ACVC) a través del compilador bajo prueba, para cada uno de los cuales el resultado de la prueba se determinó de manera única: una compilación exitosa o un error muy específico. mensaje. La prueba se llevó a cabo según el principio de "todo o nada": si se procesaba al menos un caso de prueba, se consideraba que el compilador había fallado la prueba y la prueba era válida solo en la plataforma de hardware y software en la que se llevó a cabo. . Así, se suprimió de raíz la posibilidad de la formación de "versiones" o "dialectos" del idioma del infierno.

En 1987, el lenguaje de Ada fue estandarizado oficialmente por ISO. A partir de ese momento, el Departamento de Defensa de Estados Unidos puso el idioma a disposición del público.

En 1990, había alrededor de 200 compiladores en el mundo que correspondían al estándar del lenguaje Ada.

En 1995, se adoptó un nuevo estándar Ada, conocido como Ada95. Los medios se introdujeron en el idioma. programación de objetos... Además, el lenguaje se complementó con medios más avanzados para interactuar con programas escritos en otros idiomas.

En marzo de 2007, se publicaron cambios al estándar Ada. Tocaron principalmente las posibilidades de la programación orientada a objetos: se introdujeron interfaces, se adoptó la sintaxis para llamar a un método que era habitual en la mayoría de los lenguajes híbridos y se hicieron varias adiciones.


4. Infierno en la URSS y Rusia

En la URSS, en la década de 1980, se organizó un Grupo de Trabajo sobre el idioma del infierno bajo el Comité Estatal de Ciencia y Tecnología. El grupo se dedicó al estudio de todos los datos abiertos (así como, según se rumorea, de inteligencia secreta obtenida) sobre el lenguaje de Ada e investigó la posibilidad y viabilidad del desarrollo y uso de Ada en la URSS. Las actividades de este grupo llevaron a finales de la década de 1980 al desarrollo de compiladores Ada para prácticamente todos los ordenadores utilizados en la URSS. Se han publicado varios libros en ruso sobre la lengua del infierno.

En la Universidad Estatal de Moscú, se trabajó para crear sus propios paquetes de prueba para los traductores Ada para el cumplimiento de los estándares. En LSU, para crear el sistema Ada, se utilizó el sistema Pallada, previamente desarrollado para la implementación de Algol-68, que fue transferido a Ada. El sistema contiene un entorno de desarrollo integrado, un compilador, un editor de texto, un depurador, bibliotecas, un sistema de control de versiones y un intérprete de comandos.

Después del colapso de la URSS, el trabajo sobre la expansión de Ada prácticamente se interrumpió. Es cierto que se adoptaron tres programas para el desarrollo de desarrollo de software en Ada (en el Ministerio de Defensa, el Ministerio de Aviación Civil y el Ministerio de Educación y Ciencia), pero su desarrollo se está llevando a cabo de forma lenta y descoordinada. Como resultado, el idioma Ada es poco conocido en Rusia, la mayoría de los programadores rusos modernos lo consideran un "idioma muerto" y no saben nada al respecto. Ada se utiliza en Rusia y la CEI por entusiastas individuales. Sin embargo, el lenguaje se utiliza para el desarrollo de software industrial. Hay varios proyectos conocidos desarrollados en Ada que funcionan en Rusia. Entre ellos:

  • Estación de comunicación documental del Ministerio de Defensa de la Federación de Rusia. La tarea principal es asegurar el intercambio de información documental en las redes de transmisión de datos del Ministerio de Defensa. Federación Rusa... El complejo de hardware y software fue desarrollado conjuntamente por la Organización de Fabricación de Computación y Automatización (hardware) y un grupo de programadores en el sector fuera de pista del Centro de Control de Tráfico Aéreo del Cáucaso Norte de Strela. El software del complejo está escrito en el lenguaje de programación Ada utilizando el compilador GNAT. La informática distribuida es compatible con el componente complementario GLADE.
  • Un conjunto de equipos de comunicación y navegación de vuelo estándar para un avión anfibio ruso Beriev Be-200... El desarrollo fue realizado por el Instituto de Investigación Científica de Equipos de Aviación en Zhukovsky, junto con la firma estadounidense Allied Signal, Florida, EE. UU. Se utilizó el complejo para el desarrollo de sistemas Ada de la empresa DDC-I en la plataforma Intel 80486.

5. Crítica

Desde sus inicios, Ada ha sido criticada por algunas autoridades reconocidas en el desarrollo de lenguajes de programación, principalmente por la complejidad de la sintaxis y el gran volumen. En particular, el lenguaje fue criticado por Charles Hoare y Niklaus Wirth (quienes participaron con su proyecto en este concurso, pero abandonaron después de la primera etapa), así como Edsger Dijkstra.

Dijkstra dudaba de que un lenguaje de tanta complejidad como Ada pudiera ser observable y manejable.

Si Ada va a emitir un estándar, es deseable que esté documentado sin ambigüedades. Al menos dos grupos han intentado hacer esto; como resultado, ambos produjeron alrededor de 600 páginas de texto formal. Esto es mucho más de lo necesario para garantizar que sea imposible establecer siquiera con firmeza que ambos documentos definen el mismo idioma. El error de la obvia inmanejabilidad de estos dos documentos no radica en los dos grupos que los compilaron, ni en el formalismo que adoptaron, sino solo en el lenguaje mismo: sin dar una definición formal de si sus desarrolladores pueden ocultar que están proponiendo un monstruo incontrolable. Que Ada reducirá los problemas de programación y aumentará la confiabilidad de nuestros diseños a límites aceptables es solo uno de esos cuentos de hadas que solo las personas con antecedentes militares pueden creer.

Ciencia ficción y realidad científica en informática (Edsger W. Dijkstra, EWD952)

Hoare expresó su pesar de que "los cascabeles y las baratijas han prevalecido sobre los requisitos fundamentales de confiabilidad y seguridad" y advirtió contra "una armada de misiles volando en la dirección equivocada debido a un error no detectado en el compilador de Ada". Niklaus Wirth habló de forma más moderada, pero también negativa. Dijo: “Demasiadas cosas recaen sobre el programador. No creo que después de estudiar un tercio de Ada, puedas trabajar normalmente. Si no domina todos los detalles del idioma, en el futuro puede tropezar con ellos y esto tendrá consecuencias desagradables ". Jean Ishbia, jefe del equipo de desarrollo de Ada, expresando su "respeto y admiración" por Wirth, no estuvo de acuerdo con él y dijo: "Wirth cree en soluciones simples problemas difíciles. No creo en tales milagros. Los problemas complejos requieren soluciones complejas ".

El procedimiento para comprobar la conformidad del compilador con el estándar del lenguaje mediante pruebas también plantea dudas. De las consideraciones generales se desprende claramente que las pruebas pueden encontrar inconsistencias, pero no pueden garantizar la corrección. Una confirmación práctica de esto es el hecho de que los compiladores certificados, cuando se probaron en un conjunto diferente de pruebas, encontraron una no conformidad con la norma.

Los defensores de Ada argumentan que la única alternativa a un lenguaje grande y complejo en proyectos grandes es el uso de varios lenguajes compactos, lo que inevitablemente crea los problemas de compatibilidad de los que Ada fue diseñada para deshacerse. También notan que la comprensión de la complejidad del desarrollo en Ada es solo parcialmente cierta: escribir un programa simple en Ada lleva más tiempo que otros lenguajes menos formales como C, pero depurar y mantener programas, especialmente los grandes y complejos. , es mucho más fácil. Según Stephen Zeiger de Rational Software Corporation, el desarrollo de software en Ada es generalmente un 60% más barato y el programa desarrollado tiene 9 veces menos defectos que el uso del lenguaje C.


6. Distribución, perspectivas

En la práctica, resultó que Ada, habiendo ocupado su nicho previsto en los desarrollos militares y relacionados de sistemas integrados, no fue más allá de este nicho, ni en Occidente, ni en la URSS, ni en el espacio postsoviético. Hay muchas razones para esto. Los oponentes del idioma enfatizan su complejidad y deficiencias, los partidarios hablan, en primer lugar, sobre las circunstancias objetivas del surgimiento del idioma y los aspectos negativos del proceso de su implementación. Es interesante la opinión de S. I. Rybin, investigador senior del Research Computing Center de la Universidad Estatal de Moscú, consultor de la empresa AdaCore EU, experto en el lenguaje Ada del grupo de trabajo ISO sobre el estándar lingüístico. Él cree que Ada debe sus fracasos a dos razones principales:

  • Durante el diseño del lenguaje, el Pentágono asumió que todo el software nuevo se crearía solo en Ada. Debido a esto, Ada recibió medios extremadamente primitivos para interactuar con programas en otros idiomas. En la práctica, resultó que escribir todo en Ada en general no es realista (aunque solo sea porque era necesario interactuar con desarrollos ya hechos en otros idiomas). Por lo tanto, en industrias donde no existía un requisito estricto de "escribir solo en Ada", se prefirieron otros idiomas, más adaptados a un entorno multilingüe. El estándar de 1995 resolvió el problema de la interoperabilidad con otros lenguajes, pero perdió el tiempo.
  • Paradójicamente, la difusión de Ada se vio obstaculizada por el apoyo financiero y organizativo del Pentágono. Los programas Ada escritos para el ejército se ejecutaban en el hardware informático más potente disponible, por lo que los desarrolladores del compilador se preocuparon primero por pasar las pruebas de ACVC, y solo luego por la eficiencia del compilador y el código que generaba. A principios de la década de 1980, comenzó un auge de las microcomputadoras y los traductores de idiomas comunes (Pascal, C, BASIC) se optimizaron rápidamente para sistemas de bajo consumo. Para Ada, no había ningún incentivo para tal modernización, como resultado, las computadoras personales que se convirtieron en la mayor parte del parque informático del mundo unos años más tarde carecían de un traductor de alta calidad de Ada. Naturalmente, Ada perdió este segmento de mercado. El compilador GNAT, de alta calidad y eficiente, ha aparecido hace relativamente poco tiempo, pero también aquí se ha perdido el tiempo.

En la actualidad, Ada está firmemente establecida en el desarrollo de grandes sistemas integrados de mayor confiabilidad, aquí prácticamente no tiene competidores fuertes. El uso del idioma está aumentando gradualmente, aunque con bastante lentitud. Según algunas previsiones cautelosas [ ], con la reducción del costo del hardware y la expansión de los sistemas embebidos con software complejo, el mercado de programas en Ada puede crecer notablemente y el uso del lenguaje también crecerá.

Además, Ada tiene una aplicación, aunque muy limitada, en el campo de la educación superior. Los cursos especiales sobre Ada se imparten en la Universidad Estatal de Moscú y en la Universidad de Jarkov. Sin embargo, según el mismo S.I. Rybin,

... ahora en el espacio postsoviético en el campo de la industria del software y la educación, se ha desarrollado un círculo vicioso obvio: la industria prácticamente no sabe acerca de Ada, respectivamente, de la industria no hay demanda de educación para capacitar a Ada -Especialistas, y gente nueva vienen de las universidades a la industria, que no saben prácticamente nada sobre el infierno.


7. Sistemas operativos escritos en Ada

7.1. Sistemas embebidos

  • MaRTE
  • RTEMS - SO de código abierto código fuente, desarrollado por DARPA Departamento de Defensa de EE. UU.
  • Ravenskar
  • RTOS-32 - SO propietario

7.2. Sistemas en desarrollo

  • AuroraUX (un proyecto para reescribir el kernel de OpenSolaris y luego DragonFly BSD en el lenguaje Hell)
  • Lovelace (sistema operativo en el núcleo L4)

7.3. Ya no existen sistemas

  • BiiN ™
  • Pulse ™
  • AdaOS

8. Compiladores del infierno

Nombre Empresa Versión Sistema operativo Sitio
AdaMagic SofCheck Ada 95 ? www.sofcheck.com
AdaMULTI Software de Green Hills Ada 83, Ada 95, C, C ++, Fortran Solaris SPARC, GNU / Linux x86, Windows www.ghs.com
DEC Ada Hewlett Packard Ada 83 Openvms h71000.www7.hp.com
MOSQUITO AdaCore Ada 83, Ada 95, Ada 2005, Si Solaris SPARC, Linux x86 / x86-64, Windows, otros libre.adacore.com
ICC Irvine Compiler Corporation Ada 83, Ada 95 DEC VAX / VMS, HP 9000/700, Solaris SPARC, DEC Alpha OSF / 1, PC Linux, SGI IRIX, Windows www.irvine.com
Janus / Ada Software RR Ada 83, Ada 95 SCO, UnixWare, interactivo, MS-DOS, Windows www.rrsoftware.com
MAXAda Concurrente Ada 95 Linux / Xeon, PowerPC www.ccur.com
ObjectAda Aonix Ada 95 Solaris SPARC, HP-UX, IBM AIX, Linux, Windows www.aonix.com
PowerAda Sistemas OC Ada 83, Ada 95 Linux, AIX (Ada 95); IBM System 370/390 (Ada 83) www.ocsystems.com
Ápice racional IBM Rational Ada, C, C ++ Solaris SPARC, Linux www-01.ibm.com
PUNTAJE DDC-I Ada 83, Ada 95, Si, Fortran Solaris SPARC, Windows www.ddci.com
XD Ada SWEP-EDS Ada 83 OpenVMS Alpha / VAX www.swep-eds.com
XGC Ada Software XGC Ada 83, Ada 95, Si Solaris SPARC, PC Linux, Windows (Cygwin) www.xgc.com

Con la excepción de GNAT y XGC (para algunas plataformas), los compiladores anteriores son de pago. Algunas empresas, como Aonix, ofrecen demostraciones gratuitas que están limitadas tanto en el tiempo de uso como en la funcionalidad.

Los IDE de NetBeans y Eclipse tienen complementos para trabajar con Ada.


9. Idiomas derivados

La sintaxis del lenguaje Ada se usa en lenguajes como:

  • PL / SQL

10. Datos interesantes

  • Formalmente, la competencia para el desarrollo del lenguaje, como resultado de lo cual se creó el lenguaje Ada, fue anónima: grupos de desarrolladores presentaron sus proyectos con nombres en clave para que el comité de competencia no pudiera tener en cuenta la personalidad de los desarrolladores cuando elegir al ganador. Pero en la práctica, como escribió uno de los miembros de la comisión, los gustos de los desarrolladores eran tan diferentes que no fue difícil identificar al autor del proyecto.
  • Todos los idiomas que han llegado a las últimas rondas de este concurso se basaron en Pascal. En este sentido, Ada se puede caracterizar tentativamente como Pascal, desarrollado teniendo en cuenta los cinco requisitos básicos dados. Al mismo tiempo, los autores siguieron principalmente el camino de expandir Pascal con nuevos elementos. El resultado es un lenguaje significativamente más complejo.
  • En el idioma ruso, hay chistes asociados con la ambigüedad de la expresión "El idioma del infierno", incluidos los que se basan en un paralelo con el idioma algorítmico ruso, también conocido como el "idioma del paraíso". El folclore de la programación también incluyó la conclusión de un artículo del propagandista soviético Melor Sturua (1984):

El lenguaje del Pentágono es el enemigo del mundo. El lenguaje de "Ada" es la voz de un infierno termonuclear ... En el lenguaje de "Ada" se escucha una maldición a la raza humana.


Notas (editar)

  1. Guía de referencia del lenguaje de Ada 83. Capítulo 1.3. Propósitos y fuentes de desarrollo - www.ada-ru.org/arm83/ch01s03.html
  2. Vadim Stankevich. Lady Hell - www.kv.by/index2006451104.htm
  3. Estándar actualizado en iso.org - www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=45001
  4. Software Bryabrin VM para computadoras personales. Moscú: Nauka, 1988.
  5. 1 2 Entrevista de S. I. Rybin - www.ada-ru.org/wiki/rybin
  6. , Lenguajes de programación orientados a objetos, Lenguajes de programación de la plataforma NET, Ada, Artículos de muestra de código Ada.
    Texto disponible bajo la licencia Creative Commons Attribution-ShareAlike.

Si le pregunta a un especialista en TI nacional: "¿Qué es el infierno?", La mayoría simplemente se encogerá de hombros con sorpresa, y algunos incluso dirán que este es un lenguaje muerto, una vez inventado por el Pentágono, pero que ahora prácticamente no se usa. De hecho, Ada es hoy un lenguaje de programación bastante exitoso que se utiliza activamente en varios campos. Es cierto que la mayoría de los programadores rusos saben poco al respecto.

Probablemente todos los que tuvieron que utilizar la decimocuarta línea del metro parisino se sorprendieron cuando vieron por primera vez un tren en el que no hay cabina de conductor. El movimiento de los trenes en esta línea está completamente controlado por el programa Ada.

A pesar de todo, en algunas áreas de la tecnología, Rusia todavía está "por delante del resto del planeta". Y uno de ellos es el diseño y producción de aviones anfibios. El líder reconocido internacionalmente en esta área es TANTK im. G.M. Beriev. La compañía adquirió recientemente herramientas de desarrollo de software integradas basadas en Ada para su uso en la actualización de su Ultimo Modelo Be-200.

Mientras tanto, la mayoría de los especialistas en TI nacionales, en el mejor de los casos, no saben nada sobre el lenguaje del infierno; en el peor de los casos, tienen una idea completamente errónea del infierno como un lenguaje monstruoso, una vez inventado por el Pentágono para desarrollar sistemas militares. pero ahora completamente olvidado.

Un poco de historia

El nacimiento oficial del lenguaje de programación Ada puede considerarse el 17 de febrero de 1983, la fecha de aprobación del estándar ANSI / MIL-STD-1815-A-1983.

Las medidas técnicas y administrativas tomadas por el Ministerio de Defensa como parte del proyecto para la creación e implementación de Ada evitaron por completo la aparición y difusión de dialectos del idioma. Desde 1983 hasta el presente, todas las implementaciones industriales son compatibles con el estándar Ada actual. Cuando se trata de subconjuntos de Ada, estos subconjuntos no están determinados por la implementación, sino por los estándares de desarrollo para una clase particular de sistemas.

En 1987, la norma ANSI fue aprobada sin un solo cambio como norma ISO (ISO / IEC 8652), y cuando la necesidad de revisar la norma se hizo necesaria a principios de los 90, el trabajo de revisión también se llevó a cabo bajo la dirección y los fondos. del Departamento de Defensa de Estados Unidos. Se lanzó un nuevo proyecto internacional, que finalizó con la aprobación a fines de 1994 y la publicación a principios de 1995 de una nueva versión de la norma ISO / IEC 8652. Es este documento el que sirve como definición del lenguaje de programación Ada. hoy dia.

En la URSS a principios de los 80 se formó Grupo de trabajo sobre el lenguaje de programación de Ada en el Comité Estatal de Ciencia y Tecnología. Toda la información abierta sobre el proyecto fue recopilada y analizada cuidadosamente, y a través de los esfuerzos de los servicios especiales, se obtuvo y Información cerrada... Se organizaron proyectos para implementar Ada para prácticamente todas las arquitecturas informáticas en uso, y algunos de ellos tuvieron mucho éxito. El colapso de la URSS puso fin a esta actividad. Hoy Ada se utiliza en Rusia y la CEI por entusiastas individuales.

Que es Ada

Todos los lenguajes industriales modernos proporcionan esencialmente el mismo conjunto básico de capacidades, que difieren no en lo que le permiten hacer, sino en cómo le permiten hacerlo. Sin embargo, Ada, en al menos dos aspectos, amplía el conjunto de capacidades estándar para los lenguajes modernos. Primero, Ada proporciona herramientas de programación de alto nivel para procesos asincrónicos. En segundo lugar, es el único lenguaje que se puede llamar modular sin reservas.

Este ejemplo es simplemente necesario para refutar el mito bastante extendido de que Ada es un lenguaje extenso, complejo y "pesado", adecuado solo para escribir sistemas supergrandes y supercomplejos. De hecho, Ada se puede utilizar para desarrollar programas pequeños y medianos con el mismo éxito que los clones modernos de C, Pascal, BASIC y Java. Por ejemplo, un ejemplo clásico de "¡Hola, mundo!" se ve así en Ada:

Es fácil ver que el código Ada es similar al código Pascal que se eligió como su prototipo. La primera línea describe la relación de este módulo compilado con otros módulos; se indica que la subrutina Hello_World debe compilarse junto con el módulo Ada.Text_IO, que es un componente de la biblioteca predefinida.

El siguiente programa define dos procesos asincrónicos:

La sección Declaraciones locales del procedimiento Tasking_Example describe la tarea Outputter (la línea 6, las líneas 8 a 17 contienen el cuerpo de esta tarea). Cuando el control en el proceso correspondiente al Tasking_Example llega a la línea 20, se inicia el proceso correspondiente al Outputter antes de ejecutar esta primera instrucción, luego de lo cual los dos procesos viven y se ejecutan de forma asincrónica independientemente entre sí. La ejecución de la sentencia delay (líneas 14 y 20) consiste en suspender el proceso correspondiente durante el número de segundos especificado. Por lo tanto, el proceso Tasking_Example se suspende durante 20 segundos, mientras que el proceso Outputter comienza a imprimir los valores del contador incremental, haciendo una pausa de un segundo después de la salida de cada valor. Después de 20 segundos, el proceso Tasking_Example establece el indicador Finalizado en verdadero, lo que finaliza el ciclo en el proceso Outputter. Especificar la variable Terminado como un objeto de datos atómicos (línea 4) hace que sea imposible leer y cambiar el valor de esta variable al mismo tiempo.

La siguiente es una plantilla para una función que permite la adición por componentes de dos matrices unidimensionales. Esta plantilla se puede configurar para un tipo arbitrario, que es una matriz unidimensional, para cuyos componentes se definen operaciones de asignación y suma ("suma" no tiene por qué ser una suma aritmética).

Las líneas 1-6 contienen la declaración de la función personalizada y las líneas 8-20 contienen su cuerpo. De manera informal, el parámetro de ajuste es un tipo regular unidimensional arbitrario con un rango de índice no especificado (línea 4), sobre el cual solo se sabe que su tipo de componente es arbitrario, sin embargo, se define una operación de asignación para los componentes (línea 2) , el tipo de índice es discreto arbitrario (línea 4) ... Dado que tenemos que sumar dos matrices por componentes, necesitamos saber cuál es la operación de suma para el tipo de componente. Dado que este es un tipo arbitrario, nos vemos obligados a pasar la suma del tipo de componente como una preferencia formal (línea 5).

En el cuerpo de la función, primero verificamos si las longitudes de los operandos son iguales (línea 12); de lo contrario, la adición de componentes no tiene sentido. Hacer coincidir las longitudes de los operandos no garantiza que los rangos de índice coincidan, por lo que en un bucle sobre el rango de índice del primer argumento (línea 15), necesitamos calcular el índice del componente correspondiente del segundo argumento cada vez. Estamos privados de la oportunidad de hacer esto para el tipo Index, ya que solo sabemos que es discreto, por lo que pasamos del valor del tipo discreto a su número ordinal (el atributo? Pos), calculamos el desplazamiento necesario para el número ordinal y vuelva al valor correspondiente del tipo de índice (el atributo? Val).

Tenga en cuenta que los parámetros de la función (personalizada) "+" Izquierda y Derecha se declaran como de tipo Arr, cuyo rango de índice no se especifica. Sin embargo, Izquierda y Derecha son parámetros formales, en su lugar, al llamar (el resultado de la instanciación) de la función "+", se sustituirán matrices concretas con rangos de índices conocidos. En el cuerpo de la función "+", usamos atributos de matriz (? Rango,? Primero,? Longitud) para obtener información sobre su rango de índice del objeto.

¿Por qué Ada?

La elección de un idioma para un proyecto de software anteriormente era una cuestión puramente técnica. Hoy se ha convertido en un asunto de importancia estratégica con implicaciones de gran alcance para el éxito del proyecto. Enumeremos algunas de las razones por las cuales se eligió el lenguaje Ada para la implementación de proyectos de software. varias empresas, u obligatorio para su uso en licitaciones.

  • El deseo de mejorar la confiabilidad del sistema que se está desarrollando, ya que los defectos del software pueden tener graves consecuencias para la salud humana, la economía, la ecología, etc. (Ada tiene funciones de seguridad integradas).
  • Deseo de reducir el costo de desarrollo y mantenimiento del sistema.
  • Disponibilidad de estándares internacionales y disponibilidad de compiladores de idiomas para casi cualquier plataforma.
  • Los beneficios de un enfoque disciplinado para el desarrollo de software, que se vuelven especialmente importantes a medida que aumenta el volumen y la complejidad del software.
Ada y C

Al realizar análisis comparativos de lenguajes populares, se rompieron tantas copias que hoy en día este tema a menudo se refiere a la categoría de "guerras religiosas". Por lo tanto, nos limitaremos a hacer una referencia a un artículo muy conocido, que extrae una serie de elocuentes conclusiones.

  1. El desarrollo de programas en el lenguaje Ada cuesta un 60% menos que los proyectos de software similares implementados en C.
  2. Un programa Ada tiene 9 veces menos defectos que un programa C; un programa en C ++ tiene características aún más bajas que un programa en C.
  3. preferible a C tanto para programadores experimentados como inexpertos, así como para programadores que tienen las calificaciones máxima y mínima en su grupo.
  4. La complejidad de estudiar el idioma del infierno no es mayor que la complejidad de estudiar C.
  5. Los programas Ada son más fiables que los programas C.

Como ilustración de estas conclusiones, daremos un ejemplo del desarrollo de software a bordo para una aeronave C-130J de acuerdo con los requisitos del Nivel A del estándar DO-178B. Al mismo tiempo, se afirmó que la calidad del código era 10 veces mayor que el promedio del software de nivel A. La productividad laboral se cuadruplicó en relación con proyectos de software comparables.

Ada y Java

Microsoft se vio obligado a incluir en los acuerdos de licencia para su sistemas operativos proximo articulo ( www.microsoft.com/msdownload/ieplatform/ie/ license.txt): “Nota de compatibilidad con el lenguaje Java ... La tecnología Java no es tolerante a fallas y no está diseñada ... para su uso en sistemas de control en tiempo real ... donde la falla del lenguaje Java podría provocar la muerte, lesiones o daños graves a la infraestructura o el medio ambiente. Sun Microsystems, Inc. obligó a Microsoft a publicar esta advertencia ".

Señalemos también artículos y, demostrando las ventajas del lenguaje Ada sobre Java.

Mitos "infernales"

Muy a menudo, se asocia con Ada un conjunto de conceptos erróneos persistentes que impiden tanto la difusión del idioma como la elección consciente de Ada como idioma para la implementación del proyecto.

Ada es un idioma muerto, nadie programa en él ahora. De hecho, Ada ocupa con confianza el nicho de los grandes sistemas integrados con mayores requisitos de confiabilidad. En comparación con los productos "en caja" para Windows, estos sistemas no son tan notables, porque existen en una sola copia (cuál es el punto de replicar el programa que controla el movimiento de los trenes subterráneos), o distribuidos como parte del sistema en el que se encuentran están integrados (software integrado).

Ada es un lenguaje diseñado exclusivamente para aplicaciones militares. De hecho, Ada se desarrolló con la ayuda del Departamento de Defensa de EE. UU., Pero no existen razones técnicas, administrativas o de otro tipo que impidan el uso de Ada para el desarrollo de sistemas civiles. El número de proyectos "civiles" basados ​​en este lenguaje hoy en día es comparable al número de proyectos "militares".

Ada es un lenguaje demasiado extenso y complejo para usarlo en un proyecto pequeño. El volumen y la complejidad de todos los lenguajes industriales modernos es casi el mismo y, para estar seguro de ello, basta con comparar simplemente el volumen de sus descripciones. Este mito se remonta a principios de la década de 1980, cuando se comparó a Ada con Pascal, Fortran 77 o BASIC.

Son pocos los programadores que conocen a Ada; aprender un idioma desde cero requiere un esfuerzo y tiempo excesivos. De hecho, la verdadera dificultad es encontrar especialistas que comprendan las características específicas de los sistemas integrados y sean capaces de crear programas de alta calidad para ellos. Por ejemplo, BAE, uno de los usuarios activos del idioma Ada, no requiere que los candidatos conozcan este idioma; en cambio, se buscan personas familiarizadas con los sistemas integrados y los procesos de creación de software de calidad industrial. Después de contratar a esas personas, solo se necesitan dos semanas para enseñarles el idioma del infierno.

Nuestro experiencia personal muestra que los programadores familiarizados con esta o aquella forma de Pascal solo tardan unos días en comenzar a desarrollar programas simples en Ada.

Las tecnologías Ada existentes son ineficaces; tanto los traductores como el código que generan tienen un rendimiento deficiente. Este mito también se remonta a la primera mitad de los años 80, cuando aparecieron las primeras implementaciones de Ada, de hecho, solo demostrando "el teorema de existencia del traductor del infierno correspondiente al estándar". Basta con realizar una serie de experimentos sencillos programando algún problema de modelo en Ada, Pascal y C / C ++, y luego comparando (con parámetros comparables del compilador) la velocidad de compilación, la cantidad de código generado y la velocidad de su ejecución para asegurarse de que cualquier ineficiencia específica inherente al infierno simplemente no existe. También se puede observar que el sistema de programación GNAT, con un volumen de código fuente de más de 40 MB, está implementado en un 90% en Ada, y su construcción a partir de códigos fuente (en su curso se compila tres veces) en una PC moderna toma no más de media hora.

Las implementaciones existentes de Ada son extremadamente caras. Esto es cierto, sin embargo, debe tenerse en cuenta que existe una versión públicamente disponible del sistema de programación GNAT, que se puede tomar libre y legalmente del repositorio de software de la Universidad de Nueva York ( ftp://cs.nyu.edu/pub/gnat) junto con los textos fuente

Queso gratis y como evitar la ratonera

GNAT (GNu Ada Translator) es una implementación multiplataforma del lenguaje Ada que existe en casi todas las plataformas industriales modernas y admite la generación de código para arquitecturas integradas populares. GNAT ( www.gnat.com) implementa completamente el estándar Ada, incluidas aquellas bibliotecas que están clasificadas como opcionales por el estándar. Además del propio traductor HADA, GNAT incluye un toolkit, en el que cabe destacar un avanzado entorno de desarrollo integrado y un depurador gráfico multilingüe, que permite, entre otras cosas, investigar el comportamiento de programas con procesos asincrónicos. El traductor y las herramientas que lo acompañan se pueden utilizar por separado, llamándolos desde la línea de comandos, y dentro del marco del entorno de desarrollo gráfico integrado para los programas Ada. Todos los componentes GNAT, incluido el entorno de desarrollo, tienen la misma interfaz en todas las plataformas. Además de implementar completamente las características descritas por el estándar, GNAT ofrece un amplio conjunto de extensiones que permite el estándar. GNAT es una implementación de Ada en el sistema de programación multilingüe gcc, que consiste en un conjunto de compiladores front-end para diferentes lenguajes de entrada con un generador de código común, lo que simplifica enormemente el desarrollo de programas que contienen componentes implementados en diferentes lenguajes de programación.

GNAT fue desarrollado y distribuido desde el principio bajo la licencia GPL. Por desgracia, hay muchos mitos asociados con la GPL. Por ejemplo, mucha gente piensa que los programas cubiertos por la GPL son desarrollados por grupos no organizados de entusiastas y se distribuyen de forma absolutamente gratuita; como resultado, tanto la confiabilidad como la funcionalidad de dichos programas dejan mucho que desear, no permiten que se utilicen en proyectos serios. Esto está lejos de ser el caso de GNAT. Para estar convencido de esto, basta con mirar la lista de empresas que han celebrado contratos con sus desarrolladores para apoyo técnico: Boeing, British Aerospace, Lockheed, Ericsson, SAAB, aviónica, etc.

Provisión gratuita población es una práctica común para muchos desarrolladores de software. GNAT se diferencia en que la versión pública disponible gratuitamente es absolutamente versión completa tecnología, sin restricciones legales o técnicas sobre su uso. Se han implementado con éxito varios proyectos serios sobre la base de versiones públicas de GNAT. El software del módulo de aterrizaje Beagle 2 de la estación automática europea Mars Express, con destino a este momento a Marte ( www.beagle2.com/index.htm), estación automatizada de comunicación documental del Ministerio de Defensa de la Federación de Rusia ( www.ada-ru.org/prj_doc.html). El único inconveniente de las versiones públicas es que el desarrollador no les brinda soporte técnico.

Conclusión

En resumen, el lenguaje Ada proporciona a los desarrolladores la combinación perfecta de integridad, consistencia, confiabilidad y eficiencia. El lenguaje apoya la creatividad creativa y la innovación, al tiempo que proporciona la disciplina y el nivel industrial de desarrollo de software necesarios para implementar sistemas de software de gran importancia.

Literatura
  1. Benjamin Brosgol, Introducción a Ada 95. www.embedded.com/story/OEG20021211S0034
  2. Stephen Zeigler, Comparación de los costos de desarrollo de C y Ada. www.adaic.com/whyada/ada-vs-c/cada_art.html www.ada-ru.org... En el sitio web se puede encontrar una bibliografía comentada de libros sobre el idioma del infierno, publicados en ruso.

De alto nivel, enfocado a la aplicación en sistemas en tiempo real y diseñado para automatizar las tareas de control de procesos y / o dispositivos, por ejemplo, en computadoras de a bordo (barco, aviación).

El lenguaje Ada fue desarrollado por iniciativa del Departamento de Defensa de los Estados Unidos en la década de 1980 y lleva el nombre de la matemática Ada Augusta Lovelace (1815-1851). Al diseñar el lenguaje, en primer lugar, la atención se centró en la confiabilidad y la eficiencia: el lenguaje se creó específicamente para el desarrollo de grandes sistemas de software en tiempo real para sistemas integrados, a los que se imponen requisitos de alta confiabilidad; en primer lugar, se trata de sistemas militares.
El lenguaje Ada se basa en las ideas de programación estructurada y proporciona el desarrollo de programas complejos de múltiples módulos, un alto grado de independencia y portabilidad de la máquina. Ada contiene las capacidades de lenguajes similares a Pascal, como definiciones de tipos, estructuras de control y subrutinas comunes, y los avances en la teoría de lenguajes de programación desde 1970. El lenguaje admite la modularidad lógica, para la cual los datos, los tipos y las subrutinas pueden ser paquetes. La modularidad física se logra compilando por separado. El lenguaje Ada admite la programación en tiempo real mediante el paralelismo y los mecanismos de manejo de excepciones. La programación del sistema está respaldada por el acceso a los parámetros dependientes del sistema y el control de precisión de la presentación de datos.

En 1974, el Departamento de Defensa de EE. UU. Utilizaba muchos lenguajes de programación diferentes. Esto aumentó el tiempo y el dinero invertidos en el desarrollo de nuevos sistemas y en la reconversión técnica del personal. Los responsables del ministerio llegaron a la conclusión de que es necesario utilizar un único lenguaje de programación. En 1975, se acordó una lista de requisitos para tal lenguaje. Ninguno de los lenguajes de programación que existían en ese momento (como Pascal, ALGOL-68 o PL / 1) cumplía con los requisitos. Por ello, en 1977 se decidió crear un nuevo lenguaje y se convocó un concurso para su desarrollo. De todas las propuestas, se seleccionaron cuatro (cada una de las cuales era una extensión de Pascal), para su posterior revisión y perfeccionamiento. Posteriormente, para mayor aclaración, se seleccionaron dos de ellos, y en la final se eligió un proyecto presentado por Cii-Honeywell Bull. A este idioma se le dio el nombre de Ada (originalmente el idioma se llamaba DOD-1).

En 1983, se adoptó el estándar de lenguaje ANSI / MIL-STD-1815A, y en 1987, el estándar internacional ISO 8652. En 1987, aparecieron los primeros traductores Ada efectivos. La norma ISO fue revisada a principios de 1995 (ANSI / ISO / IEC 8652). El nuevo estándar corrigió muchas de las omisiones y deficiencias del lenguaje original, y lo complementó con muchas propiedades útiles nuevas, como tipos de procedimiento, tipos de punteros basados ​​(es decir, punteros a objetos no dinámicos), bibliotecas jerárquicas, controles de concurrencia adicionales, muchos bibliotecas estándar... Además, en Ada-95 había soporte para programación orientada a objetos.
La siguiente norma recibió el nombre informal Ada-2005, aunque aún no se había adoptado en 2005. La comunidad Ada decidió alejarse de la tradición de nombrar informalmente el estándar para el año de publicación, ya que en 2005 se acordaron todos sus parámetros principales. El lenguaje agrega herencia múltiple, una forma prefijada de acceso a métodos de objetos, tipos de referencia más flexibles, administración de tareas mejorada y una gran cantidad de nuevas bibliotecas estándar. Además, Ada-2005 cumple con la norma ISO / IEC 10646 (2003), que permite utilizar las letras de los alfabetos ruso y griego en los nombres de identificadores (nombres de variables, funciones).
Ada se considera el lenguaje de programación común tanto para el ejército de EE. UU. Como para la OTAN.

Además, Ada se utiliza para construir grandes sistemas a los que se imponen requisitos de alta confiabilidad, tales como: sistemas informáticos para la aviación (incluida la civil); sistemas informáticos de control para ferrocarriles de alta velocidad; sistemas bancarios; automatización industrial y robótica; Equipo medico; sistemas de telecomunicaciones.

Ada se utiliza en instituciones de educación superior en los EE. UU. Y Europa Occidental, como base para el estudio de la programación, y se utiliza a menudo en investigación y desarrollo. El programa Ada gestiona el movimiento de trenes sin conductor en el Metro de París. Varias empresas se especializan en el desarrollo de compiladores, diversas bibliotecas y herramientas, que cubren una amplia gama de plataformas de hardware y sistemas operativos. Además de las herramientas de desarrollo comerciales, existen versiones de compilador disponibles gratuitamente, como ObjectAda de Aonix o GNAT de Ada Core Technologies.

Ada es el lenguaje de programación más estandarizado. El estándar internacional fue adoptado antes de que aparecieran las primeras versiones de trabajo de los traductores, evitando así la incompatibilidad de los diversos dialectos de Ada. Ada supera a SI y C ++ en términos de rigor en la tipificación de datos, la flexibilidad de la compilación separada, la capacidad de crear sistemas en tiempo real altamente confiables, la disponibilidad de un control estricto sobre los parámetros de función y los desbordamientos de índices (80% de los errores que ocurren cuando la creación de programas en C / C ++ está relacionada con esto) y la representación de valores binarios independiente de la máquina (en lugar de operaciones de bits, se realiza la recuperación de campos de registro). Al mismo tiempo, Ada es semántica y sintácticamente transparente, por lo que es más fácil de aprender que Java.

Ada es inferior a C / C ++ en el soporte de nuevos sistemas operativos, así como en la disponibilidad de herramientas de mantenimiento, depuración y configuración. interfaces graficas... Pero el estándar de lenguaje incluye especificaciones generadas automáticamente para interactuar con otros lenguajes de programación y, en la práctica, las bibliotecas matemáticas de Fortran, las funciones del sistema escritas en C, las clases de Java para trabajar con Internet se utilizan junto con Ada. Por lo tanto, existen IDE multilingües que admiten idiomas distintos de Ada, por ejemplo, IBM Rational Ada Developer (C / C ++ / Ada).

Ada implementa tanto la recolección automática de basura (como en Java o C #) como la capacidad de recuperar memoria directamente (como en C, C ++, Pascal). Al igual que con C / C ++, Ada tiene ricas funciones de bajo nivel disponibles. El soporte multitarea integrado es exclusivo del lenguaje de programación Ada y lo distingue de la mayoría de los lenguajes de programación. Este soporte no es proporcionado por extensiones o bibliotecas externas, sino por herramientas estandarizadas que están integradas directamente en el lenguaje de programación.

(Ada 2005), Eiffel (Ada 2012)

C ++, Capilla, "Drago". , Eiffel, Griffin. , Java, Nim, paracaídas detrás de un barco, PL / SQL, PL / PgSQL, Ruby, Seed7, "SPARforte". , Sparkel, SQL / PSM, VHDL

Las características de Ada incluyen: mecanografía fuerte, mecanismos de modularidad (paquetes), validación en tiempo de ejecución, procesamiento paralelo (tareas, mensajería síncrona, 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 envío dinámico.

La sintaxis de Ada minimiza la elección de cómo realizar operaciones básicas y prefiere el inglés. palabras clave(por ejemplo, "o" y "y luego") a símbolos (como "||" y "&&"). Ada usa los operadores aritméticos básicos +, -, * y /, pero evita usar otros caracteres. Los bloques de código están delimitados por palabras como "declare", "start" y "end", donde "end" (en la mayoría de los casos) sigue al identificador del bloque que cierra (por ejemplo, si termina, si ... , bucle ... fin de bucle). En el caso de bloques condicionales, esto evita arrancado todavía, que puede emparejarse con declaraciones if anidadas no válidas en otros lenguajes como C o Java.

Ada está diseñada para el desarrollo de sistemas de software de gran tamaño. Los paquetes Ada se pueden compilar por separado. Las especificaciones del paquete Ada (interfaz del paquete) también se pueden compilar por separado sin verificar el cumplimiento. Esto permite que los problemas se detecten al principio de 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 se detectarán hasta el tiempo de ejecución en otros lenguajes, o que requieran que se agreguen comprobaciones explícitas al código fuente. Por ejemplo, la sintaxis requiere el nombre explícito de los cierres de bloque para evitar errores debido a marcadores finales no coincidentes. La escritura segura puede detectar la presencia de errores de software estándar (parámetros incorrectos, violaciones de rango, referencias no válidas, tipos no coincidentes, etc.) ya sea en tiempo de compilación o de otro modo en tiempo de ejecución. Como la concurrencia es parte de la especificación del lenguaje, el compilador puede, en algunos casos, detectar posibles callejones sin salida. Los compiladores también verifican de forma rutinaria errores ortográficos para identificadores, visibilidad de paquetes, declaraciones redundantes, etc., y pueden proporcionar advertencias y sugerencias útiles sobre cómo corregir el error.

Ada también admite verificaciones en tiempo de ejecución para proteger contra el acceso a memoria no asignada, errores de desbordamiento del búfer, violaciones de rango, errores fuera de banda, errores de acceso a la matriz y otros errores detectables. Estas verificaciones se pueden desactivar en aras de la eficiencia del rendimiento, pero a menudo se pueden recopilar de manera eficiente. También incluye herramientas para ayudar a validar el programa. Por estos motivos, Ada se utiliza mucho en sistemas críticos donde cualquier anomalía puede tener consecuencias muy graves, como la muerte por accidente, lesiones o pérdidas económicas graves. Ejemplos de sistemas que utilizan Ada incluyen aviónica, ATC, ferrocarriles, banca, tecnología militar y espacial.

La gestión de memoria dinámica de Ada es de alto nivel y segura para los tipos. Ada no tiene punteros genéricos o sin tipo; y declarar implícitamente cualquier tipo de puntero. En cambio, toda la asignación y desasignación de memoria dinámica debe ocurrir a través de la declarada explícitamente tipos de acceso... Cada tipo de acceso tiene su correspondiente grupo de almacenamiento que maneja los detalles de bajo nivel de la gestión de la memoria; el programador puede usar el grupo de almacenamiento predeterminado o definir uno nuevo (esto es especialmente cierto para el acceso a memoria no uniforme). Incluso puedes declarar varios diferentes tipos acceso, que denotan el mismo tipo, pero utilizan diferentes grupos de almacenamiento. Además, el idioma proporciona disponibilidad de cheques, tanto en tiempo de compilación como en tiempo de ejecución, lo que garantiza que costo de acceso no puede borrar el tipo de objeto al que apunta.

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 esto conduciría a un comportamiento impredecible en sistemas en tiempo real. Ada mantiene una forma de región limitada basada en la gestión de la memoria; Además, el uso creativo de las agrupaciones de almacenamiento puede proporcionar una forma limitada de recolección automática de basura porque la destrucción de una agrupación de almacenamiento también destruye todos los objetos de la agrupación.

historia

Se sigue trabajando para mejorar y actualizar el contenido técnico del lenguaje de programación Ada. Una corrección técnica para Ada 95 se publicó en octubre de 2001, y una enmienda importante, ISO / IEC 8652: 1995 / Amd 1: 2007, se publicó el 9 de marzo de 2007 En la conferencia Ada-Europe 2012 en Estocolmo, la Asociación de Recursos Ada (ARA) y Ad -Europe anunciaron la finalización del diseño ultima versión el lenguaje de programación Ada y enviar el manual de referencia a la Organización Internacional de Normalización (ISO) para su aprobación. ISO / IEC 8652: 2012 se publicó en diciembre de 2012.

Otras normas relevantes incluyen ISO 8651-3: 1988 Sistemas de procesamiento de información, gráficos por computadora, lenguaje de enlace del núcleo del sistema de gráficos (GKS) - Parte 3: Ada .

Construcciones del lenguaje

"¡Hola Mundo!" en Ada

Un ejemplo típico de un lenguaje de este tipo en sintaxis es el programa Hello world: (hello.adb)

con Ada.Text_IO; use Ada.Text_IO; procedimiento Hola es comenzar Put_Line ("¡Hola, mundo!"); fin Hola;

Este programa se puede compilar utilizando el compilador GNAT de código abierto gratuito ejecutando

gnatmake hola.adb

Tipos de datos

El sistema de tipos de Ada no se basa en un conjunto de tipos primitivos predefinidos, pero permite a los usuarios declarar sus propios tipos. Esta afirmación, a su vez, no se basa en la representación interna del tipo, sino en una descripción del objetivo que se debe alcanzar. Esto permite al compilador determinar el tamaño de memoria apropiado para un tipo dado y verificar violaciones de inferencia de tipo en tiempo de compilación y tiempo de ejecución (es decir, violación de rango, desbordamiento de búfer, consistencia de tipo, etc.). Ada admite tipos numéricos definidos en 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 del tipo especificado; no se permiten punteros sin tipo. Tipos especiales proporcionados en el lenguaje de tipos de problemas y vistas protegidas.

Por ejemplo, una fecha se puede representar como:

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

Los tipos se pueden calificar declarando subtipos:

el subtipo Working_Hours es el intervalo de horas 0 .. 12; - como máximo 12 horas para trabajar al día el subtipo Working_Day es el rango de los días de la semana de lunes a viernes; - Días de trabajo 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. Se puede acceder a los tipos privados y los tipos restringidos solo se pueden modificar o copiar dentro del paquete que los define solo. Ada 95 agrega características adicionales para la extensión de tipo orientada a objetos.

Estructuras de Control

Ada también ofrece objetos protegidos por exclusión mutua. Los objetos protegidos son construcciones similares a monitores, pero utilizan variables protectoras en lugar de condicionales para la señalización (similar a las áreas críticas condicionales). Las instalaciones vigiladas combinan la encapsulación de datos y la exclusión mutua segura de los monitores, así como los guardias de seguridad de las áreas críticas condicionales. La principal ventaja sobre los monitores clásicos es que no se requieren variables condicionales para la señalización, evitando posibles interbloqueos debido a una semántica de bloqueo incorrecta. Al igual que las tareas, el elemento asegurable es un tipo delimitado integrado y también tiene una declaración de parte y cuerpo.

El objeto protegido consta de datos personales encapsulados (a los que solo se puede acceder dentro del objeto protegido), así como procedimientos, funciones y registros que se garantiza que son mutuamente excluyentes (con la única excepción de las funciones que son necesarias para ser un efecto secundario). de forma gratuita, por lo que puede trabajar simultáneamente con otras funciones). La tarea de invocar un objeto asegurable se bloquea si otra tarea se está ejecutando actualmente en el mismo asegurable y se libera cuando esa otra tarea deja el asegurable. Las tareas bloqueadas se ponen en cola en el objeto protegido a la hora de llegada ordenada.

Los datos de objetos protegidos son similares a los procedimientos, pero además tienen proteccion... Si la protección se evalúa como falsa, la tarea de desafío se bloquea y se agrega a la cola de esta entrada; Ahora se puede admitir otra tarea en el objeto asegurable, ya que ninguna de las tareas se está ejecutando actualmente dentro del objeto asegurable. Los guardias son reevaluados cada vez que una tarea sale de la instalación protegida, ya que esta es la única vez que se puede cambiar la calificación de los guardias.

La grabación de llamadas se puede en cola para otros registros con la misma firma. La tarea que está en cola se bloquea y se agrega a la cola de registros de destino; esto significa que el objeto asegurable se libera y permite que se acepte otra tarea.

Por favor seleccione el operador en Ada se puede utilizar para implementar llamadas de entrada sin bloqueo y acepta, selección de registro no determinista (también protegida), tiempo de espera y abortos.

El siguiente ejemplo ilustra algunos de los conceptos de programación concurrente en Ada.

con Ada.Text_IO; use Ada.Text_IO; procedimiento El tráfico es de tipo Airplane_ID es rango 1 .. diez - 10 aviones tipo de tarea Avión (ID: Airplane_ID); - tarea que representa aviones, con ID como parámetro de inicialización el tipo Airplane_Access es el acceso Airplane; - el tipo de referencia al tipo de avión protegido Pista es - la pista compartida (protegida para permitir el acceso simultáneo) entrada Assign_Aircraft (ID: Airplane_ID); - todas las entradas están garantizadas mutuamente excluyentes entrada Cleared_Runway (ID: Airplane_ID); entrada Wait_For_Clear; privado Borrar: Booleano: = Verdadero; - datos privados protegidos - generalmente más que una simple bandera ... final de la pista; el tipo Runway_Access es acceder a todas las pistas; - la tarea del controlador de tránsito aéreo acepta solicitudes de despegue y aterrizaje El tipo de tarea Controller (My_Runway: Runway_Access) es - entradas de tareas para el paso síncrono de mensajes entrada Request_Takeoff (ID: en Airplane_ID; Despegue: fuera de Runway_Access); entrada Request_Approach (ID: en Airplane_ID; Aproximación: fuera de Runway_Access); controlador final; - asignación de instancias Runway1: pista con alias; - instanciar un controlador de pista1: controlador (acceso de pista1 "); - y un controlador para administrarlo ------ las implementaciones de los tipos anteriores ------ Cuerpo protegido La pista es la entrada Assign_Aircraft (ID: Airplane_ID) cuando Clear es - el guardia de entrada - las tareas de llamada se bloquean hasta que se cumpla la condición comenzar Clear: = False; Put_Line (Airplane_ID "Imagen (ID) &" en la pista "); final; entrada Cleared_Runway (ID: Airplane_ID) cuando no Clear es comienza Clear: = True; Put_Line (Airplane_ID" Imagen (ID) y "pista despejada"); fin; entrada Wait_For_Clear cuando Clear es begin null; - no es necesario hacer nada aquí - solo se puede ingresar una tarea si "Borrar" es verdadero fin; final de pista; El controlador del cuerpo de la tarea es begin loop My_Runway. Wait_For_Clear; - esperar hasta que la pista esté disponible (llamada de bloqueo) Seleccione - espere dos tipos de solicitudes (la que se pueda ejecutar primero) cuando Request_Approach "count = 0 => - declaración de guardia: solo se acepta si no hay tareas en cola en Request_Approach aceptar Request_Takeoff (ID: en Airplane_ID; Takeoff: out Runway_Access) hacer - inicio de la parte sincronizada My_Runway. Assign_Aircraft (ID); - pista de reserva (potencialmente bloqueando la llamada si el objeto protegido está ocupado o la protección de entrada es falsa) Despegue: = Mi_Pista; - Asignar un valor de parámetro "out" para indicarle al avión qué pista end Request_Takeoff; - final de la parte sincronizada o acepte Request_Approach (ID: en Airplane_ID; Approach: out Runway_Access) haga My_Runway. Assign_Aircraft (ID); Aproximación: = My_Runway; end Request_Approach; o - terminar si no quedan tareas quién podría llamar Terminar; fin de seleccionar; ciclo final; fin; cuerpo de la tarea El avión es Rwy: Runway_Access; comenzar Controller1. Request_Takeoff (ID, Rwy); - Esta llamada se bloquea hasta que la tarea del controlador acepta y completa el bloque de aceptación Put_Line (Airplane_ID "Imagen (ID) &" despegando ... "); retraso 2.0; Rwy. Cleared_Runway (ID); - la llamada no se bloqueará ya que "Borrar" en Rwy ahora es falso y no debe haber otras tareas dentro del objeto protegido retraso 5,0; - volar un poco ... seleccionar bucle - intentar solicitar un controlador de pista 1. Request_Approach (ID, Rwy); - esta es una llamada de bloqueo - se ejecutará cuando el controlador alcance el bloqueo de aceptación y regrese al finalizar Salida; - si la llamada regresó, estamos listos para el aterrizaje - deje el bloque de selección y proceda ... o demora 3.0; - tiempo de espera - si no hay respuesta en 3 segundos, haga otra cosa (todo en el siguiente bloque) Put_Line (Airplane_ID "Imagen (ID) &" en patrón de espera "); - simplemente imprima un mensaje end select; end loop; delay 4.0; - haga la aproximación de aterrizaje ... Put_Line (Airplane_ID" Imagen (ID) & "aterrizó! "); Rwy. Cleared_Runway (ID); - notificar a la pista de aterrizaje que hemos terminado aquí. fin; New_Airplane: Airplane_Access; comenzar para I en Airplane_ID "Bucle de rango - crea algunas tareas de avión New_Airplane: = nuevo avión (I); - comenzará a ejecutarse directamente después de la creación retraso 4.0; ciclo final; terminar el tráfico;

Pragmas

Un pragma es una directiva del compilador que pasa información al compilador para permitir la manipulación específica de la salida compilada. Algunos pseudocomentarios están integrados en el lenguaje, mientras que otros son implementaciones.

Los ejemplos de uso común de pragmas por parte del compilador deshabilitarían ciertas características, como la verificación de tipo en tiempo de ejecución o la verificación de límites de índice de matriz, o indicarían al compilador que inserte código de objeto en lugar de llamar a una función (en C / C ++ lo hace con funciones en línea).

  • APSE: especificación para un entorno de programación para apoyar el desarrollo de software en Ada
  • Ravenscar Profile es un subconjunto de funciones multitarea de Ada diseñadas para asegurar la informática crítica en tiempo real.
  • SPARK (lenguaje de programación): un lenguaje de programación que consta de un subconjunto muy limitado de Ada, anotado con metainformación que describe el comportamiento deseado del componente y los requisitos individuales en tiempo de ejecución.