¿Qué hace que Ada sea el idioma de elección para los sistemas críticos para la seguridad de la ISS?

Sabemos de buena fuente que Ada se usa ampliamente para "software crítico para la seguridad" al menos en el lado estadounidense de la Estación Espacial Internacional.

De todos los idiomas posibles para elegir, ¿cuáles son los aspectos de Ada que lo convierten en la elección de la NASA para una aplicación tan crítica? ¿Cuál podría ser la ponderación entre las razones heredadas y la idoneidad intrínseca?

Ada era el idioma del Departamento de Defensa. Habiéndolo desarrollado, es una pena no usarlo. Tiene fuertes elementos en tiempo real sin dejar de ser de alto nivel. Puedo ser parcial, es mi idioma favorito. (aunque eso puede deberse a que no he escrito nada en él durante más de dos décadas)
@JCRM: Entonces podría escribir una respuesta que detalla algunos aspectos de Ada que lo hacen adecuado para sistemas de misión crítica en lugar de, por ejemplo, C o Java, ¿no? :-) Como desarrollador de software, estoy muy interesado en escuchar a alguien que tenga experiencia con el lenguaje (en lugar de leer el artículo de Wikipedia…).
No sé lo suficiente sobre los requisitos del sistema de la ISS, y solo tengo viejos recuerdos de Ada, por lo que mi contribución se limita a (con suerte) comentarios útiles. Sospecho firmemente que fue el "debes escribir en Ada" del Departamento de Defensa lo que lo consiguió en la ISS; cambiar de idioma no es algo que uno haga sin una MUY buena razón en los sistemas críticos de seguridad.
Me pregunto por qué ada también, ¿java no es más rápido?
@repluser: Ada es varios años más rápida que Java, en el sentido de que cuando se desarrolló la ISS, Ada existía y Java no. Las alternativas en ese momento probablemente habrían sido Modula-3 o Mesa, o tal vez Eiffel (pero Eiffel no era un estándar internacional en ese entonces).
@repluser: ... e incluso cuando Java existía, no estaba tan estrictamente definido como ahora. Determinar la especificación exacta de un lenguaje de programación es difícil . Y cuanto más grande es un idioma, más útil es, pero también más difícil de especificar exactamente. La biblioteca de subprocesos de Java es especialmente complicada.
@JörgWMittag No solo eso, sino que Java todavía estaba en su infancia: ni siquiera tenía una especificación en tiempo real hasta 2001 con RTSJ 1.0, y aún no es adecuado para aplicaciones críticas para la seguridad, una especificación para la cual (JSR-302) se ha estado dando vueltas desde 2006 y actualmente se encuentra en su cuarto borrador.
¿Por qué te sorprende Ada?
Interesante. Aunque la historia dice que se desarrolló a finales de los 70, juraría que escuché mencionar a Ada por primera vez mientras trabajaba con los laboratorios RCA Camden en hardware para Skylab, alrededor de 1974. Luego, trabajando con IBM en Rochester MN a finales de los 70, Tomé "prestados" algunos de los conceptos de estructuración de programas de Ada (particularmente el manejo de excepciones) para usarlos en System/38 de IBM. Supuse que el idioma había seguido su curso en la década de 1980.

Respuestas (6)

Este enlace de Wikilibros enumera sus puntos fuertes, algunos de los cuales son:

  • Un sistema de tipo extremadamente fuerte, estático y seguro, que permite al programador construir poderosas abstracciones que reflejan el mundo real, y permite al compilador detectar muchas fallas lógicas antes de que se conviertan en errores.
  • Modularidad, mediante la cual el compilador administra directamente la construcción de sistemas de software muy grandes desde las fuentes.
  • Ocultación de información; el lenguaje separa las interfaces de la implementación y proporciona un control detallado sobre la visibilidad.
  • Legibilidad, que ayuda a los programadores a revisar y verificar el código. Ada favorece al lector del programa sobre el escritor, porque un programa se escribe una vez pero se lee muchas veces. Por ejemplo, la sintaxis prohíbe todas las construcciones ambiguas, por lo que no hay sorpresas, de acuerdo con la Ley del Mínimo Asombro del Tao de la Programación. (Algunos programadores de Ada son reacios a hablar sobre el código fuente, que a menudo es críptico; prefieren el texto del programa que se parece a la prosa en inglés).
  • Portabilidad: la definición del lenguaje permite que los compiladores difieran solo en algunas formas controladas y, de lo contrario, define la semántica de los programas con mucha precisión; como resultado, el texto de origen de Ada es muy portátil entre compiladores y entre plataformas de hardware de destino. La mayoría de las veces, el programa se puede volver a compilar sin ningún cambio.
  • Estandarización: los estándares han sido un objetivo y una característica destacada desde el diseño del lenguaje a fines de la década de 1970. El primer estándar se publicó en 1980, solo 3 años después de que comenzara el diseño. Todos los compiladores de Ada admiten exactamente el mismo lenguaje; el único dialecto, SPARK, es simplemente un subconjunto anotado y se puede compilar con un compilador Ada.

El punto de la legibilidad es importante, ya que la vida útil de un producto de software no termina cuando termina de codificarlo/probarlo. El mayor gasto (en tiempo y dinero) está en el mantenimiento de ese producto. Entonces, para un proyecto largo como la ISS, parece apropiado usar un lenguaje creado para ayudar en esa tarea, minimizando los errores y la ambigüedad general.

Esta respuesta la compara con C y C++:

Ada tiene una serie de características de seguridad integradas en el lenguaje. (Compare con C, donde el estándar tiene doce páginas que resumen los comportamientos indefinidos integrados en el lenguaje. Compare con C++, donde los comportamientos indefinidos son tan numerosos que ni siquiera los enumeran). Esas características de seguridad de Ada pueden tener un efecto significativo. costo de rendimiento y, debido a esto, Ada también brinda la capacidad de desactivar selectivamente esas funciones de seguridad.

Tenga en cuenta que es posible alcanzar el mismo nivel de seguridad con C o C++, si usa un subconjunto de los lenguajes C o C++ y se compromete con una guía de estilo, pero en Ada viene con el lenguaje.

EDITAR (Gracias JCRM): El primer enlace también habla sobre el soporte para la programación de bajo nivel:

Ada tiene potentes funciones especializadas que admiten la programación de bajo nivel para sistemas integrados, críticos para la seguridad y en tiempo real. Tales características incluyen, entre otras, inserciones de código de máquina, aritmética de direcciones, acceso de bajo nivel a la memoria, control sobre la representación bit a bit de datos, manipulación de bits y un modelo de computación concurrente estáticamente demostrable y bien definido llamado Ravenscar Profile.

Donde trabajo, en realidad usamos la aritmética de direcciones y las funciones de memoria de bajo nivel para cargar diferentes datos de configuración sin tener que compilar el producto cada vez, lo que ahorra mucho tiempo.

Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat .
No estoy de acuerdo con la sugerencia de que "es posible alcanzar el mismo nivel de seguridad con C o C++, si usa un subconjunto de los lenguajes C o C++". El uso de un subconjunto evita algunas de las trampas e inseguridades flagrantes integradas en C/C++ y, por lo tanto, las eleva a un grado mínimo de cordura. En comparación, Ada está diseñado con la seguridad como un objetivo de diseño central. Para cosas serias. Ya sabes, aviones y bombas y esas cosas. A diferencia de otro compilador compilador y esas cosas. No puedo recordar con qué frecuencia un error del compilador en Ada reveló un error que habría sido un volcado del núcleo en C.
@uhoh Esas respuestas en stackoverflow están llenas de tonterías. He trabajado en varias naves espaciales cuyo software de vuelo utiliza plantillas de C++. Lo que uno no quiere hacer es usar funciones que asignan dinámicamente memoria desde el montón después del tiempo de inicialización, arrojar/atrapar excepciones, llamar a funciones del sistema o usar recursividad/bucle sin límites. Gran parte de la biblioteca estándar de C++ no tiene tales restricciones algorítmicas. Esto no tiene nada que ver con las plantillas en general.

Momento. Ada se desarrolló en las décadas de 1970 y 1980 con la intención de reemplazar la plétora de idiomas utilizados en los sistemas en tiempo real del Departamento de Defensa de EE. UU. La NASA (y también organizaciones de Europa) fueron participantes activos. El Departamento de Defensa encargó a Ada todo el desarrollo importante en 1991. La NASA hizo lo mismo. La Estación Espacial Internacional había sido un concepto de papel hasta ese momento. Empezó a hacerse realidad exactamente cuando entró en vigor el mandato Ada.

El Departamento de Defensa abandonó su mandato Ada en 1997. La NASA hizo lo mismo. Si la ISS se construyera hoy, su software de vuelo probablemente no estaría en Ada.


Entonces, ¿por qué Ada? Ada se creó para abordar una serie de problemas. Uno fue la gran cantidad de idiomas en uso en el Departamento de Defensa. Otro fue la falta de seguridad percibida en esos idiomas, particularmente con respecto a los sistemas en tiempo real y los sistemas integrados. Ada proporcionó varias funciones que faltaban en otros idiomas.

Hay muchas razones por las que Ada se ha convertido en un idioma de nicho. Una es que la excesiva rigurosidad y prolijidad del lenguaje impiden que sea un lenguaje de propósito general. Otro problema fue que la comunidad de Ada perdió el tren en la transición de mainframes a minicomputadoras a computadoras de escritorio. Los lenguajes a la vanguardia de estas transiciones (C y C++) siguen siendo ampliamente utilizados. La comunidad de Ada también perdió el tren en el movimiento del software libre. El primer compilador gratuito de Ada no salió hasta 1995 y ese lanzamiento no estaba completo. Para entonces ya era demasiado tarde.

Si bien voté a favor de esta respuesta porque creo que identifica la causa principal, creo que se mejoraría al mencionar las razones por las que la NASA prefirió a Ada sobre otras alternativas disponibles en ese momento. No fue completamente arbitrario.
Al igual que con las otras respuestas, esta responde qué lo hizo adecuado, pero no la segunda parte de la búsqueda sobre por qué todavía está en uso.
@JackAidley: ¿Había alternativas? ¿Modula-3 o Mesa, tal vez?
El por qué es bastante simple: el software de vuelo no es como otro software. No cambias nada a menos que sea absolutamente necesario. Me arrojarían desde el techo del Edificio 1 si tuviera que solicitar seriamente un puerto completo de software de vuelo en un idioma diferente.
@Tristan - Tengo una idea para una broma de April Fool el próximo año...
". Si la ISS se construyera hoy, su software de vuelo probablemente no estaría en Ada". Sería en Java o Python, como todo lo demás.
@QuoraFeans por mucho que ame Python, aún no está al nivel de aplicaciones críticas en tiempo real/seguridad. Java, con su tiempo de ejecución de peso pesado, se descarta esencialmente de las aplicaciones de controles integrados. Es muy probable que el código termine en C (quizás C++) usando algo así como los estándares MISRA que usa la industria automotriz (o uno de los millones de estándares similares). Esos idiomas siguen siendo los reyes en el espacio incrustado, por muchas muy buenas razones.
@Tristán, exactamente. simplemente no está en la(s) respuesta(s)
@JCRM: otra forma de decirlo es "los paradigmas van y vienen, pero el código heredado es para siempre". No es solo software de vuelo: conozco al menos un sistema de gestión de pedidos corporativos que todavía ejecuta COBOL de la era de los 70 porque el riesgo de trasladarlo a un lenguaje más moderno es simplemente demasiado alto.
¿ La comunidad de Ada se perdió el tren durante la transición de los mainframes a las computadoras de escritorio? ¡Bueno, hay barcos que se pierden y barcos que algunas personas no tienen interés en atrapar! Por su naturaleza, Ada siempre iba a ser un lenguaje de nicho de mercado y nunca convencional: la mayoría de las aplicaciones no necesitan su rigor. De todos modos, atender a un mercado mayoritario exige una sobrecarga de soporte de alta tecnología, ya que las empresas clientes solo tendrán habilidades de codificación generalistas (es decir, C/C++/Java). No hay dinero en eso. Es mejor presentar Ada a industrias críticas, todas con experiencia interna, para que los gastos generales de soporte técnico sean mínimos. ps
@Trunk: el problema con ese punto de vista es que supone que se necesita Ada para construir sistemas críticos de tiempo/seguridad críticos, y que otros lenguajes son insuficientes. Ese no es el caso.
@David Hammen: estaba tratando de presentar el modelo comercial de la industria de Ada, tal como lo leí. Espero que esto no sugiera que estaba de acuerdo con él o, menos aún, con los estrechos horizontes socioeconómicos que sugiere.

Recuerdo tomar cursos de Informática a finales de los 90. El profesor de informática explicó a nuestro exiguo grupo de especialistas en informática que nos iba a enseñar C, en lugar de COBOL o Ada, porque sería más útil en general. En ese momento, eran las principales universidades de lenguajes de programación que enseñaban en el pasado (todas las universidades importantes en el área con un título en informática enseñaban uno de esos dos). ¿Por qué enseñarían idiomas más antiguos? Porque aún podrías conseguir un trabajo escribiendo código en ellos. Esto fue alrededor de la época en que se estaba construyendo la ISS.

La razón por la que surgió Ada fue porque necesitaban un software de misión crítica que fuera confiable y Ada se hizo literalmente para cumplir con los requisitos. La NASA todavía tiene uno de los errores de software más costosos de la historia (en la época oscura de las tarjetas perforadas )

Un error introducido por una tarjeta perforada resultó ser uno de los errores de software más costosos de la historia, cuando condujo a la destrucción de la nave espacial Mariner 1 en 1962 (costo en dólares de 1962: 18,5 millones; costo en dólares de hoy: $ 135 millones ), antes de que pudiera completar su misión de volar por Venus.

Sin embargo, hubo una falla fatal en el software de ese sistema de guía: cuando las ecuaciones que se usarían para procesar y traducir los datos de seguimiento en instrucciones de vuelo se codificaron en tarjetas perforadas, se omitió un símbolo crítico: una barra superior o una línea superior, a menudo confundido en los años siguientes con un guión. La falta de esa barra superior, esencialmente, hizo que la computadora de guía compensara incorrectamente algún movimiento normal en la nave espacial.

La característica principal de Ada es la estabilidad.

Con su énfasis en principios sólidos de ingeniería de software, Ada apoya el desarrollo de aplicaciones de alta integridad, incluidas aquellas que deben estar certificadas según estándares de seguridad como DO-178B y estándares de seguridad como Common Criteria. Por ejemplo, la tipificación fuerte significa que no se accederá a los datos destinados a un propósito a través de operaciones inapropiadas; Se evitan errores como tratar los punteros como números enteros (o viceversa). Y la verificación de los límites de la matriz de Ada evita las vulnerabilidades de saturación del búfer que son comunes en C y C++.

La NASA trató de crear su propio lenguaje Ada-esque llamado (no me lo estoy inventando) HAL/S que usó el transbordador espacial y... no mucho más. Todo el equipo de tierra terminaría usando Ada para entonces (¡ estándares! )

Se propuso una propuesta para una versión terrestre estándar de HAL de la NASA denominada HAL/G para "tierra", pero la próxima aparición del lenguaje de programación Ada, que pronto se llamará, contribuyó a la falta de interés de Intermetrics en continuar con este trabajo.

Oh, HAL/S tiene otro problema menor

La debilidad de Hal/S es que solo está disponible cuando se aloja en la serie IBM 360/370 de computadoras centrales. Intermetrics también ha alojado Hal/S en las minicomputadoras Modcomp IV y Classic, y en Data General Eclipse. Pero la implementación de Modcomp solo la usa JPL, y el desarrollo de Eclipse ya no se usa porque las limitaciones del espacio de direcciones reducen la velocidad de compilación a unas 30 líneas/minuto.

Como tal, no sorprende que a principios de los 90 (cuando las PC estaban en auge) fuera mucho más barato obtener más dispositivos informáticos estándar (apuesto a que IBM pudo hacer que Ada se ejecutara en hardware más estándar, ya que ya estaban suministrando astronautas con Thinkpads por esa época ). Dato curioso: los Thinkpads que ejecutan Linux se utilizan para interactuar con la computadora de la estación

"Eran solo las necesidades de las aplicaciones", dijo, describiendo cómo el software de la computadora portátil que hablaba con los sistemas de comando y control de la estación en esos primeros días fue diseñado para ejecutarse en un sistema operativo basado en Linux.

Por el contrario, el vehículo de exploración (principios de la década de 2000) se ejecutó en C

Está ejecutando 2,5 millones de líneas de C en un procesador RAD750 fabricado por BAE.

Ese no es el error más costoso. El Mars Climate Orbiter costó 327,6 millones de dólares en 1998. Se estrelló porque se mezclaron las unidades métricas e imperiales. Aunque técnicamente eso no fue un error de software al final: el problema se notó antes de la falla, solo los ingenieros "no siguieron las reglas sobre cómo completar [el] formulario para documentar sus inquietudes". Entonces, esto fue realmente un error de la burocracia, al igual que Challenger, donde los ingenieros también habían advertido a la burocracia por adelantado.
Lo de la barra superior no fue un error en el lenguaje de programación, fue un error en la especificación. (fuente: Scott Manley, creo), el problema real era que la especificación debería haber dicho que ese valor debía promediarse, por lo tanto, la barra superior, pero la revisión de la especificación y la revisión del código no detectaron que debería haber sido un promedio valor. Ahora, un lenguaje con menor carga cognitiva podría permitir que el programador se dé cuenta más fácilmente, pero este incidente en particular no fue causado por un lenguaje.
"El profesor de CS era un tipo jovial": ¡habla de un idioma con 1000 dialectos, cada uno de los cuales requiere su propio compilador! Por eso se desarrolló Ada: Para reemplazar los cientos de dialectos joviales. ¡No es de extrañar que te haya enseñado C: Malos sentimientos que Ada reemplazó su idioma favorito!
@davidbak rimshot HASTA que exista tal lenguaje...
@Machavity: ¡Oh, sí! JOVIAL es algo famoso porque el software de aviónica del B2 Spirit fue escrito en JOVIAL. Posteriormente, la Fuerza Aérea contrató a una empresa llamada Semantic Designs (cuyo ingeniero jefe es en realidad muy activo en ingeniería de software y desbordamiento de pila ) para crear un traductor de JOVIAL a C , lo que pudieron hacer sin tener acceso al código fuente .
HAL/S precedió bastante a Ada. Uno de los tres contendientes perdedores de la competencia del Departamento de Defensa que finalmente resultó en Ada era de Intermetrics. Su propuesta era esencialmente un derivado de HAL/S. Que Intermetrics diseñara e implementara HAL/S influyó mucho en su propuesta.
Es interesante que Curiosity se ejecute en un código escrito en C. Aunque debe tenerse en cuenta que un error de SW puede repararse (actualizaciones de SW) o, en el extremo, causaría la pérdida de la misión, pero no la pérdida de vidas . ¿En qué anduvo el vehículo de lanzamiento, me pregunto?
No creo que sea correcto que el equipo de tierra del programa Shuttle haya usado Ada. El Centro de Control de Misión no lo hizo, ni el Simulador de Misión de Transbordador. El sistema de procesamiento de lanzamiento utilizó un lenguaje llamado GOAL. Ada comenzó a ser utilizada por la NASA en el programa ISS, no por Shuttle.

Desde el sitio web :

Las herramientas de AdaCore se pueden usar para cumplir con los objetivos de verificación, incluido el cumplimiento del estándar de codificación , la precisión del código ( prevención de errores como el desbordamiento del búfer, el desbordamiento de enteros y las referencias a variables no inicializadas) y el análisis de cobertura estructural hasta MC/DC . Las bibliotecas de tiempo de ejecución especializadas de alta seguridad, incluida una que implementa el perfil de asignación de tareas de Ravenscar, son lo suficientemente simples como para incluirlas en sistemas calificados, pero lo suficientemente expresivas para admitir la funcionalidad necesaria para el software espacial duro en tiempo real . El material de calificación para las bibliotecas en tiempo de ejecución puede desarrollarse para el estándar ECSS y adaptarse a nuevos contextos de proyectos.

C y C ++ no previenen esos errores (excluyen complementos costosos ), y Java no es difícil en tiempo real (excluye máquinas virtuales no estándar ).

Cuando hay vidas en juego, es mejor descartar errores de tiempo de ejecución y retrasos por diseño :

with Ada.Text_IO; use Ada.Text_IO;

procedure Learn is

   subtype Alphabet is Character range 'A' .. 'Z';

begin

   Put_Line ("Learning Ada from " & Alphabet'First & " to " & Alphabet'Last);

end Learn;

Aquí, Alfabeto no puede contener ningún valor que no sea de la A a la Z. Esta característica única del lenguaje, entre otras , ayudó a un equipo de estudiantes a completar la misión CubeSat 2013-2015 :

Como un ejemplo de Ada en un entorno de pregrado, los estudiantes de Vermont Technical College en los EE. UU. utilizaron el lenguaje SPARK (un subconjunto formalmente analizable de Ada) para desarrollar el software para un satélite CubeSat que recientemente completó con éxito una misión orbital de dos años. Se eligió SPARK debido a sus beneficios de confiabilidad. Los estudiantes no tenían experiencia previa en Ada, SPARK o métodos formales, pero pudieron ponerse al día rápidamente.

De los doce CubeSats de instituciones académicas que se incluyeron en el lanzamiento, el de Vermont Tech fue el único que completó su misión. Muchos de los otros encontraron su destino debido a errores de software. El grupo Vermont Tech atribuye su éxito al enfoque SPARK que, por ejemplo, les permitió demostrar formalmente la ausencia de errores en tiempo de ejecución.

Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat .

De todos los idiomas posibles para elegir, ¿cuáles son los aspectos de Ada que lo convierten en la elección de la NASA para una aplicación tan crítica? ¿Cuál podría ser la ponderación entre las razones heredadas y la idoneidad intrínseca?

  • Ada es un lenguaje diseñado para este tipo de situación , es decir, sistemas intolerantes a fallas, en tiempo real y (a menudo) integrados que se utilizan para controlar equipos o procesos críticos.

  • La evolución de Ada fue mucho más enfocada y estrechamente gestionada desde el principio. Tanto sus creadores como sus evaluadores fueron expertos cuidadosamente seleccionados en el campo del desarrollo del lenguaje con un fuerte sentido del deber tanto con su profesión como con el proyecto Ada. Así como los valores de la costa oeste impregnan Java, la modestia desinteresada de Ichbiah, Dewar y Taft estableció un tono para Ada que aún prevalece y que debe atraer a una organización como la NASA.

  • Ada tiene un lenguaje de subconjunto formalmente definido llamado SPARK que permite el mapeo listo de un diseño de sistema verificado formalmente en su código

  • Ada es uno de los lenguajes más rápidos que existen, además con procesadores paralelos

  • La industria de Ada (empresas como AdaCore, Altran, Green Hills, Wind River, etc., etc.) ha desarrollado numerosas herramientas de soporte para el desarrollo de sistemas críticos en Ada/SPARK.

  • Hay pocos lenguajes alternativos capaces de Ada

  • Los lenguajes alternativos, como C formalmente definido, no tienen la misma profundidad de experiencia o soporte que Ada/SPARK.

No tengo idea de cuáles eran los requisitos detallados del sistema ni cuán estrictas eran las pautas de licitación en relación con la ponderación del legado y la idoneidad intrínseca. Pero me parece racional que Ada/SPARK obtenga una puntuación alta en ambas categorías. Los factores heredados deben incluir cosas como

  • La NASA fue un patrocinador original del proyecto Ada y lo había utilizado desde el principio en sistemas anteriores.

  • Es probable que la empresa de creación de sistemas tenga una mayor familiaridad con Ada/SPARK, conocimientos prácticos para implementar sus construcciones de manera efectiva para los requisitos del nuevo sistema crítico.

  • Probable uso existente de Ada/SPARK por parte de subcontratistas, por ejemplo, sistemas integrados para equipos auxiliares como radares, visores de rayos X, etc., para el proyecto e interfaz de datos entre el sistema principal y los subsistemas.

Ada es SGMLde lenguajes de programación (y Java/C# es XML). Ambos están construidos en una nueva base para una solución completa. Y ambos no lograron hacerse populares debido a su complejidad y rareza. (La minoría conoce SGML, pero todos entienden HTML: la simplicidad es la fuerza). Aprendimos Ada en el 91 y nos encantó, incluso si vinimos de Modula-3 y no de basura Pascal o C. (Sin mencionar el ensamblaje). Ada se veía perfectamente integrado. general y en detalles. Pero ninguno de nosotros lo usó porque el único entorno de Ada era para IBM 360 (o un clon ruso) y ningún compilador de Ada apareció durante muchos años para PC. Y se convirtió en un "diamante reluciente en una vitrina", teóricamente perfecto pero intocable. Escribimos el código para Sieve of Eratosthenes pero no había ningún recurso para ejecutarlo con las tareas log(log(10e9)). (Ese día contaron la memoria RAM en cientos de KB. ) Mientras tanto, llegaron buenos entornos C++ (¡con bibliotecas de clases utilizables!) y la mayoría de los programadores lo usaron como plataforma principal hasta que apareció Java una década después. E incluso no había buenas herramientas de desarrollo para Java, pero las había utilizables y las PC baratas pueden ejecutarlas.

Estaba compilando ADA en Sun Workstations en 1989. Había muchas versiones para muchas plataformas en 1991.
Estaba escribiendo Ada para Motorola 68000/68020 en 1988, compilando de forma cruzada en un VAX. Un par de años más tarde, estaba escribiendo Ada para un DSP de coma flotante de TI, nuevamente compilando de forma cruzada en un VAX. @JCRM tiene toda la razón: había muchas opciones para muchas plataformas en 1991.
Ada es mucho, mucho menos complejo que C++. Incluso los primeros C++. Cualquier afirmación de por qué "no se hizo popular" no solo es una especulación personal que no debe presentarse como información fáctica, sino que esta en particular resulta ser probablemente incorrecta.
Como medida aproximada, mi viejo Ada83 LRM verde tiene unas 250 páginas. Este borrador de trabajo del estándar ISO C++ tiene 1440 páginas.
AdaCore podría decir que el Ada actual se está volviendo más como el HTML 5 del mundo de los sistemas de alta integridad: se puede compilar (en forma cruzada) en numerosos sistemas operativos (incluidos iOS y Android), tiene tantas herramientas deslumbrantes para verificar el código exhaustivamente. , interactuando con sistemas en otros lenguajes principales, API para GUI, controladores XML y script para marcos de prueba de validación, un servidor web seguro, etc. La única desconexión con HTML 5 es la apariencia desagradable (pero no la funcionalidad) de su IDE, GPS. . .
En 1985, Alsys estaba enviando comercialmente un compilador Ada completamente validado (pasó el conjunto de pruebas oficial) para IBM PC / AT bajo DOS. El idioma completo, incluida la concurrencia. No estoy seguro de lo que quiso decir con las tareas log(log(10e9)), ya que no son demasiadas tareas, pero una demostración común para Alsys Ada fue ejecutar una simulación de calor en la tubería a través de la relajación con cada posición del personaje. en la pantalla (80x25) respaldada por una tarea de Ada que se encuentra con sus cuatro vecinos.
@TED ​​no es cierto que Ada 83 era menos complejo que C + qa, tenía registros discriminados etiquetados con seguridad de tipo y rango verificado que podrían tener matrices de tamaño variable como campos (más de uno que varía por separado), tareas, que también podrían ser campos en esos registros , o en arreglos - y por supuesto genéricos potentes, optimizables y completamente seguros para tipos con una verdadera compilación separada que los compiladores de C++ no tienen hasta el día de hoy. ¡Y mucho más, incluidos los cuchillos ginsu! Pero, sí, ¡el libro verde era más corto que el estándar C++ actual!
@davidbak: las plantillas de C ++ son mucho, mucho más complejas de implementar, describir y tratar con los usuarios que los genéricos de Ada. Esto se debe principalmente a la decisión de usar la escritura Duck (que en mi humilde opinión, a su vez, se debió a la decisión de tratar de resolver demasiados problemas con esta función). Por supuesto, también son mucho más poderosos (¡incluso están completos!), pero el poder siempre viene con un precio. En particular, las novelas de errores y el código de minas terrestres que se compilan bien hasta que algún pobre bastardo intenta instanciarlo son dos problemas particulares que no ocurren con los genéricos de Ada.
@JCRM: Vivíamos en el lado equivocado de la pared, cualquier hardware que no se fabricara en la URSS estaba muy lejos de estar actualizado. Software también. El compilador Ada fue creado por dos profesores entusiastas (y talentosos, por supuesto) de la universidad.