Ada Resource Association
Descripción general de Ada
Ada es un lenguaje de programación moderno diseñado para aplicaciones grandes y de larga duración – y sistemas integrados en particular, donde la confiabilidad y la eficiencia son esenciales. Fue desarrollado originalmente a principios de la década de 1980 (esta versión se conoce generalmente como Ada 83) por un equipo dirigido por el Dr. Jean Ichbiah en CII-Honeywell-Bull en Francia. El lenguaje fue revisado y mejorado de una manera compatible al alza a principios de la década de 1990, bajo el liderazgo del Sr. Tucker Taft de Intermetrics en los Estados Unidos. El lenguaje resultante, Ada 95, fue el primer Lenguaje orientado a Objetos estandarizado internacionalmente (ISO). Bajo los auspicios de la ISO, se completó una nueva revisión (menor) como una enmienda a la norma; esta versión del lenguaje se conoce como Ada 2005. Se completó una revisión más significativa (que incluye soporte para anotaciones de programas) y se conoce como Ada 2012. Se espera completar otra revisión significativa en 2022.
El nombre “Ada” no es un acrónimo; fue elegido en honor de Augusta Ada Lovelace (1815-1852), una matemática que a veces es considerada como la primera programadora del mundo debido a su trabajo con Charles Babbage. También era la hija del poeta Lord Byron.
Ada está experimentando un uso significativo en todo el mundo en dominios de alta integridad / seguridad crítica / alta seguridad, incluidos la aviónica de aeronaves comerciales y militares, el control del tráfico aéreo, los sistemas ferroviarios y los dispositivos médicos. Con su incorporación de los principios modernos de ingeniería de software, Ada es un excelente lenguaje de enseñanza para cursos de informática introductorios y avanzados, y ha sido objeto de importantes investigaciones universitarias, especialmente en el área de las tecnologías en tiempo real.
Descripción general del idioma
Ada tiene múltiples facetas. Desde una perspectiva, es un lenguaje clásico de propósito general basado en pilas, no vinculado a ninguna metodología de desarrollo específica. Tiene una sintaxis simple, instrucciones de control estructuradas, facilidades flexibles de composición de datos, comprobación de tipos sólida, características tradicionales para la modularización de código (“subprogramas”) y un mecanismo para detectar y responder a condiciones excepcionales de tiempo de ejecución (“manejo de excepciones”).
Pero también incluye mucho más:
Rangos escalares
A diferencia de los lenguajes basados en sintaxis de C (como C++, Java y C#), Ada permite al programador especificar simple y explícitamente el rango de valores que se permiten para variables de tipos escalares (enteros, coma flotante, coma fija o tipos de enumeración). El intento de asignación de un valor fuera de rango causa un error en tiempo de ejecución. La capacidad de especificar contraindicaciones de rango hace que la intención del programador sea explícita y facilita la detección de una fuente importante de errores de codificación y entrada de usuario.
Programación en el gran
El diseño original de Ada 83 introdujo la construcción de paquetes, una característica que admite la encapsulación (“ocultación de información”) y la modularización, y que permite al desarrollador controlar el espacio de nombres accesible dentro de una unidad de compilación dada. La Ada 95 introdujo el concepto de “unidades infantiles”, añadiendo una flexibilidad considerable y facilitando el diseño de sistemas muy grandes. Ada 2005 amplió las facilidades de modularización del lenguaje al permitir referencias mutuas entre especificaciones de paquetes, facilitando así la interfaz con lenguajes como Java.
Plantillas genéricas
Una clave para componentes reutilizables es un mecanismo para parametrizar módulos con respecto a tipos de datos y otras entidades de programa, por ejemplo, un paquete de pila para un tipo de elemento arbitrario. Ada cumple con este requisito a través de una instalación conocida como “genéricos”; dado que la parametrización se realiza en tiempo de compilación, el rendimiento en tiempo de ejecución no se penaliza.
Programación orientada a objetos (OOP)
Ada 83 estaba basada en objetos, permitiendo la partición de un sistema en módulos correspondientes a tipos de datos abstractos u objetos abstractos. No se proporcionó soporte completo de OOP, ya que, en primer lugar, parecía no ser necesario en el dominio en tiempo real que era el objetivo principal de Ada, y, en segundo lugar, la aparente necesidad de recolección automática de elementos no utilizados en un lenguaje OO habría interferido con un rendimiento predecible y eficiente.
Sin embargo, los sistemas grandes en tiempo real a menudo tienen componentes como GUI que no tienen restricciones en tiempo real y que podrían desarrollarse de manera más efectiva utilizando funciones de POO. En parte por esta razón, Ada 95 proporciona soporte integral para OOP, a través de su facilidad de” tipo etiquetado”: clases, polimorfismo, herencia y enlace dinámico. Ada 95 no requiere recolección automática de basura, sino que proporciona características de definición que permiten al desarrollador suministrar operaciones de recuperación de almacenamiento específicas de tipo (“finalización”). Ada 2005 proporcionó características adicionales de OOP, incluyendo interfaces similares a Java y notación de invocación de operaciones tradicionales.
Ada es neutra desde el punto de vista metológico y no impone una “sobrecarga distribuida” para la OOP. Si una aplicación no necesita POO, no es necesario usar las funciones de POO y no hay penalización en tiempo de ejecución.
Programación concurrente
Ada proporciona una instalación estructurada de alto nivel para la concurrencia. La unidad de concurrencia es una entidad de programa conocida como “tarea”.”Las tareas pueden comunicarse implícitamente a través de datos compartidos o explícitamente a través de un mecanismo de control síncrono conocido como rendezvous. Un elemento de datos compartido se puede definir de manera abstracta como un “objeto protegido” (una característica introducida en Ada 95), con operaciones ejecutadas bajo exclusión mutua cuando se invocan desde múltiples tareas. También se admiten interacciones de tareas asíncronas, específicamente tiempos de espera y terminación de tareas. Este comportamiento asíncrono se aplaza durante ciertas operaciones, para evitar la posibilidad de dejar los datos compartidos en un estado inconsistente. Las versiones más recientes de Ada incluyen mecanismos ligeros para aprovechar las arquitecturas multinúcleo, lo que permite una computación paralela altamente eficiente, al tiempo que preserva la portabilidad y se mantiene dentro del modelo de concurrencia Ada seguro y bien definido.
Programación de sistemas
Tanto en el lenguaje” core ” como en el Anexo de Programación de Sistemas, Ada suministra las características necesarias para permitir que el programador se acerque al hardware. Por ejemplo, puede especificar el diseño de bits para los campos de un registro, definir la alineación y el tamaño, colocar datos en direcciones de máquina específicas y expresar secuencias de código especializadas o de tiempo crítico en lenguaje ensamblador. También puede escribir manejadores de interrupciones en Ada, utilizando la facilidad de tipos protegidos.
Programación en tiempo real
Las funciones de asignación de tareas de Ada le permiten expresar expresiones idiomáticas comunes en tiempo real (tareas periódicas, tareas impulsadas por eventos), y el Anexo en tiempo real proporciona varias funciones que le permiten evitar inversiones de prioridad ilimitadas. Se define una política de bloqueo de objetos protegidos que utiliza techos de prioridad; esto tiene una implementación especialmente eficiente en Ada (no se requieren mutexes) ya que las operaciones protegidas no pueden bloquearse. Ada 95 definió una política de despacho de tareas que básicamente requiere que las tareas se ejecuten hasta que se bloqueen o se anticipen, y Ada 2005 introdujo varias otras, incluida la Fecha Límite más temprana Primero.
Sistemas de alta integridad
Con su énfasis en principios sólidos de ingeniería de software, Ada apoya el desarrollo de aplicaciones de alta integridad, incluidas aquellas que necesitan 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 los datos destinados a un propósito no se accederán a través de operaciones inapropiadas; se evitan errores como tratar a los punteros como enteros (o viceversa). Y la comprobación de límites de matriz de Ada evita vulnerabilidades de desbordamiento de búfer que son comunes en C y C++.
Sin embargo, el lenguaje completo es inapropiado en una aplicación crítica para la seguridad, ya que la generalidad y la flexibilidad pueden interferir con los requisitos de trazabilidad / certificación. Ada soluciona este problema proporcionando una directiva de compilador, Restricciones pragma, que le permite restringir las características del lenguaje a un subconjunto bien definido (por ejemplo, excluyendo las instalaciones de POO dinámico).
La evolución de Ada ha visto un aumento continuo en el soporte para aplicaciones críticas para la seguridad y de alta seguridad. Ada 2005 estandarizó el Perfil de Ravenscar, una colección de características de concurrencia que son lo suficientemente potentes para la programación en tiempo real, pero lo suficientemente simples para hacer práctica la certificación. Ada 2012 introdujo facilidades de anotación para agregar pre-condiciones, post-condiciones e invariantes a los programas. Ada 2022 los amplía con anotaciones adicionales para las condiciones iniciales predeterminadas, las propiedades estables, el uso sin bloqueo y el uso global de objetos. Estos pueden servir tanto para la comprobación en tiempo de ejecución como para la entrada de herramientas de análisis estático.
Resumen de beneficios de la Ada
- Le ayuda a diseñar código seguro y confiable
- Reduce los costos de desarrollo
- Admite tecnologías nuevas y cambiantes
- Facilita el desarrollo de programas complejos
- Ayuda a que el código sea legible y portátil
- Reduce los costos de certificación para software
Resumen de características de Ada
- Programación orientada a objetos
- Escritura fuerte
- Abstracciones para adaptarse al dominio del programa
- Programación/plantillas genéricas
- Excepción manejo
- Instalaciones para organización modular de código
- Bibliotecas estándar para E/S, manejo de cadenas, computación numérica, contenedores
- Programación de sistemas
- Programación concurrente
- Programación en tiempo real
- Programación de sistemas distribuidos
- Procesamiento numérico
- Interfaces con otros lenguajes (C, COBOL, Fortran)
En resumen, Ada es un lenguaje estandarizado internacionalmente que combina funciones de programación orientadas a objetos, instalaciones de concurrencia bien diseñadas, soporte en tiempo real y funciones integradas fiabilidad. Ada, una herramienta adecuada para abordar los problemas reales que enfrentan los desarrolladores de software en la actualidad, se utiliza en varias industrias importantes para diseñar software que proteja las empresas y las vidas.
Leave a Reply