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?
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.
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.
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 de la curiosidad (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.
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.
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.
usuario20636
polvo oscuro
usuario20636
RoylatGnail
Jörg W. Mittag
MSalters
J...
Peter - Reincorporar a Monica
Dan