Ada to język programowania wysokiego poziomu, strukturalny, zaprojektowany głównie do programowania systemowego i aplikacji czasu rzeczywistego. Został nazwany na cześć Ady Lovelace, która często jest uznawana za jednego z pierwszych programistów komputerowych. Ada jest znana z silnego typowania, modularności i wsparcia dla programowania równoległego, co czyni ją odpowiednią do krytycznych systemów w branżach takich jak lotnictwo, motoryzacja i obronność.
Ada została stworzona pod koniec lat 70. XX wieku w ramach projektu finansowanego przez Departament Obrony Stanów Zjednoczonych (DoD), aby zaspokoić potrzebę ustandaryzowanego języka programowania dla systemów wbudowanych i czasu rzeczywistego. Język został zaprojektowany przez zespół kierowany przez Jeana Ichbiah i został oficjalnie wydany w 1983 roku. Jednym z głównych celów było zmniejszenie różnorodności języków programowania używanych w systemach obronnych, co miało na celu poprawę konserwacji i niezawodności.
Ada czerpie inspirację z kilku języków programowania, w tym Pascala, C i ALGOL-a. Jej projekt zawiera cechy tych języków, takie jak silne typowanie i programowanie strukturalne. Rozwój Ady był również odpowiedzią na wyzwania stawiane przez C, szczególnie w zakresie bezpieczeństwa typów i wsparcia dla programowania na poziomie systemu.
Od momentu powstania Ada przeszła kilka rewizji, z Ada 83, po Ada 95, Ada 2005 i najnowszy standard, Ada 2012. Te rewizje wprowadziły nowe funkcje, takie jak programowanie obiektowe i lepsze wsparcie dla systemów czasu rzeczywistego. Dziś Ada jest utrzymywana przez Ada Resource Association i nadal jest używana, szczególnie w krytycznych systemach, gdzie bezpieczeństwo i niezawodność są kluczowe.
Ada wymusza ścisłe sprawdzanie typów, co pomaga wychwytywać błędy w czasie kompilacji, a nie w czasie wykonywania.
type Integer_Type is range 0 .. 100;
variable Count : Integer_Type;
Count := 50; -- To jest poprawne
Count := 150; -- To spowoduje błąd w czasie kompilacji
Język wspiera programowanie modularne poprzez użycie pakietów, które kapsułkują powiązane typy, dane i procedury.
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 ma wbudowane wsparcie dla programowania równoległego za pomocą zadań, co pozwala na jednoczesne wykonywanie wielu procesów.
task My_Task is
begin
-- kod zadania
end My_Task;
Ada zapewnia solidne mechanizmy obsługi wyjątków, pozwalając programistom na zarządzanie błędami w czasie wykonywania w sposób elegancki.
begin
-- kod, który może wywołać wyjątek
exception
when Constraint_Error =>
-- obsługa błędu
end;
Ada wspiera programowanie obiektowe z cechami takimi jak dziedziczenie i polimorfizm.
type Vehicle is tagged null record;
type Car is new Vehicle with record
Doors : Integer;
end record;
procedure Display(V : Vehicle) is
begin
-- kod do wyświetlania informacji o pojeździe
end Display;
Generiki pozwalają programistom pisać elastyczny i wielokrotnego użytku kod, definiując parametryzowane typy i podprogramy.
generic
type Item_Type is private;
package Container is
procedure Add(Item : Item_Type);
end Container;
Ada wspiera typy wyliczeniowe, które definiują typ z zestawem nazwanych wartości.
type Color is (Red, Green, Blue);
Typy kontrolowane pozwalają na precyzyjną kontrolę nad tworzeniem i niszczeniem obiektów.
type My_Controlled_Type is new Ada.Finalization.Controlled with record
Value : Integer;
end record;
Ada zapewnia atrybuty, które mogą być używane do uzyskiwania informacji o typach lub obiektach.
X : Integer := 10;
Size : Natural := X'Size; -- Uzyskiwanie rozmiaru liczby całkowitej
Ada podkreśla koncepcję zarządzania pamięcią poprzez explicite kontrolę nad przechowywaniem danych i alokacją.
declare
type Record_Type is record
A : Integer;
B : Float;
end record;
My_Record : Record_Type;
end;
Ada może być kompilowana przy użyciu różnych kompilatorów, z GNAT jako jednym z najczęściej używanych. GNAT jest częścią GNU Compiler Collection (GCC) i zapewnia darmowy i otwarty sposób kompilacji kodu Ada.
Istnieje kilka zintegrowanych środowisk programistycznych (IDE) dostępnych dla Ady, takich jak GNAT Studio, AdaGIDE i GPS (GNAT Programming Studio). Narzędzia te oferują funkcje takie jak podświetlanie składni, uzupełnianie kodu i możliwości debugowania.
Aby zbudować projekt Ada przy użyciu GNAT, zazwyczaj pisze się kod źródłowy Ada, a następnie używa następujących poleceń w terminalu:
gnatmake my_program.adb
To polecenie kompiluje plik źródłowy Ada i generuje plik wykonywalny.
Ada jest używana głównie w systemach krytycznych dla bezpieczeństwa, które obejmują, ale nie ograniczają się do:
Jej niezawodność i łatwość konserwacji sprawiają, że jest preferowanym wyborem w tych sektorach.
Chociaż Ada dzieli pewne podobieństwa z innymi językami programowania, wyróżnia się naciskiem na bezpieczeństwo i niezawodność.
Podczas zajmowania się tłumaczeniem źródło-do-źródła istnieją konkretne narzędzia, które mogą pomóc w konwersji kodu Ada na inne języki programowania. Na przykład narzędzia takie jak Gnat2Go mogą być używane do tłumaczenia kodu Ada na Go. Należy jednak zachować ostrożność, aby zapewnić, że funkcjonalność i cechy bezpieczeństwa oryginalnego kodu Ada są zachowane podczas procesu tłumaczenia.
Niektóre popularne narzędzia do tłumaczenia źródło-do-źródła to: