Ada es un lenguaje de programación estructurado de alto nivel diseñado principalmente para la programación de sistemas y aplicaciones en tiempo real. Lleva el nombre de Ada Lovelace, quien a menudo es considerada una de las primeras programadoras de computadoras. Ada es conocida por su fuerte tipado, modularidad y soporte para la programación concurrente, lo que la hace adecuada para sistemas críticos en industrias como la aeroespacial, automotriz y de defensa.
Ada fue creada a finales de la década de 1970 bajo un proyecto financiado por el Departamento de Defensa de los Estados Unidos (DoD) para abordar la necesidad de un lenguaje de programación estandarizado para sistemas embebidos y en tiempo real. El lenguaje fue diseñado por un equipo liderado por Jean Ichbiah y fue lanzado oficialmente en 1983. Uno de los principales objetivos era reducir la diversidad de lenguajes de programación utilizados en sistemas de defensa, mejorando así el mantenimiento y la fiabilidad.
Ada se inspira en varios lenguajes de programación, incluidos Pascal, C y ALGOL. Su diseño incorpora características de estos lenguajes, como el fuerte tipado y la programación estructurada. El desarrollo de Ada también respondió a los desafíos planteados por C, particularmente en términos de seguridad de tipos y soporte para programación a nivel de sistema.
Desde su creación, Ada ha pasado por varias revisiones, siendo Ada 83 seguida por Ada 95, Ada 2005 y el estándar más reciente, Ada 2012. Estas revisiones introdujeron nuevas características, como la programación orientada a objetos y un mejor soporte para sistemas en tiempo real. Hoy en día, Ada es mantenida por la Ada Resource Association y continúa utilizándose, especialmente en sistemas críticos donde la seguridad y la fiabilidad son primordiales.
Ada impone un estricto control de tipos, lo que ayuda a detectar errores en tiempo de compilación en lugar de en tiempo de ejecución.
type Integer_Type is range 0 .. 100;
variable Count : Integer_Type;
Count := 50; -- Esto es válido
Count := 150; -- Esto causará un error en tiempo de compilación
El lenguaje soporta la programación modular a través del uso de paquetes, que encapsulan tipos, datos y procedimientos relacionados.
package Geometry is
type Point is record
X : Float;
Y : Float;
end record;
procedure Move(Point : in out Point; DeltaX, DeltaY : Float);
end Geometry;
Ada tiene soporte incorporado para la programación concurrente a través de tareas, lo que permite la ejecución de múltiples procesos simultáneamente.
task My_Task is
begin
-- código de la tarea
end My_Task;
Ada proporciona mecanismos robustos para el manejo de excepciones, permitiendo a los desarrolladores gestionar errores en tiempo de ejecución de manera elegante.
begin
-- código que puede generar una excepción
exception
when Constraint_Error =>
-- manejar el error
end;
Ada soporta la programación orientada a objetos con características como herencia y polimorfismo.
type Vehicle is tagged null record;
type Car is new Vehicle with record
Doors : Integer;
end record;
procedure Display(V : Vehicle) is
begin
-- código para mostrar información del vehículo
end Display;
Los genéricos permiten a los desarrolladores escribir código flexible y reutilizable al definir tipos y subprogramas parametrizados.
generic
type Item_Type is private;
package Container is
procedure Add(Item : Item_Type);
end Container;
Ada soporta tipos de enumeración, que definen un tipo con un conjunto de valores nombrados.
type Color is (Red, Green, Blue);
Los tipos controlados permiten un control detallado sobre la creación y destrucción de objetos.
type My_Controlled_Type is new Ada.Finalization.Controlled with record
Value : Integer;
end record;
Ada proporciona atributos que se pueden usar para obtener información sobre tipos u objetos.
X : Integer := 10;
Size : Natural := X'Size; -- Obtener el tamaño de un entero
Ada enfatiza el concepto de gestión de memoria a través del control explícito sobre el almacenamiento y la asignación de datos.
declare
type Record_Type is record
A : Integer;
B : Float;
end record;
My_Record : Record_Type;
end;
Ada se puede compilar utilizando varios compiladores, siendo GNAT uno de los más utilizados. GNAT es parte de la Colección de Compiladores GNU (GCC) y proporciona una forma gratuita y de código abierto para compilar código Ada.
Hay varios entornos de desarrollo integrados (IDEs) disponibles para Ada, como GNAT Studio, AdaGIDE y GPS (GNAT Programming Studio). Estas herramientas ofrecen características como resaltado de sintaxis, autocompletado de código y capacidades de depuración.
Para construir un proyecto Ada utilizando GNAT, normalmente se escribiría el código fuente de Ada y luego se usarían los siguientes comandos en la terminal:
gnatmake my_program.adb
Este comando compila el archivo fuente de Ada y genera un ejecutable.
Ada se utiliza predominantemente en sistemas críticos de seguridad, que incluyen, entre otros:
Su fiabilidad y mantenibilidad la convierten en una opción preferida en estos sectores.
Si bien Ada comparte algunas similitudes con otros lenguajes de programación, se destaca por su énfasis en la seguridad y la fiabilidad.
Al tratar con la traducción de código a código, hay herramientas específicas que pueden ayudar a convertir código Ada a otros lenguajes de programación. Por ejemplo, herramientas como Gnat2Go se pueden usar para traducir código Ada a Go. Sin embargo, se debe tener cuidado para asegurar que la funcionalidad y las características de seguridad del código Ada original se conserven durante el proceso de traducción.
Algunas herramientas comunes para la traducción de código a código incluyen: