آدا یک زبان برنامهنویسی سطح بالا و ساختاری است که عمدتاً برای برنامهنویسی سیستمها و برنامههای زمان واقعی طراحی شده است. این زبان به نام آدا لاولیس نامگذاری شده است که اغلب به عنوان یکی از اولین برنامهنویسان کامپیوتر شناخته میشود. آدا به خاطر نوعگذاری قوی، ماژولاریتی و پشتیبانی از برنامهنویسی همزمان شناخته شده است و آن را برای سیستمهای حیاتی در صنایعی مانند هوافضا، خودروسازی و دفاع مناسب میسازد.
آدا در اواخر دهه ۱۹۷۰ تحت پروژهای که توسط وزارت دفاع ایالات متحده (DoD) تأمین مالی شده بود، ایجاد شد تا نیاز به یک زبان برنامهنویسی استاندارد برای سیستمهای توکار و زمان واقعی را برطرف کند. این زبان توسط تیمی به رهبری ژان ایشبیا طراحی شد و به طور رسمی در سال ۱۹۸۳ منتشر شد. یکی از اهداف اصلی کاهش تنوع زبانهای برنامهنویسی مورد استفاده در سیستمهای دفاعی بود که به این ترتیب نگهداری و قابلیت اطمینان را افزایش میدهد.
آدا از چندین زبان برنامهنویسی، از جمله پاسکال، C و ALGOL الهام گرفته است. طراحی آن شامل ویژگیهایی از این زبانها، مانند نوعگذاری قوی و برنامهنویسی ساختاری است. توسعه آدا همچنین به چالشهای ناشی از C پاسخ داد، به ویژه از نظر ایمنی نوع و پشتیبانی از برنامهنویسی در سطح سیستم.
از زمان تأسیس، آدا چندین بار تجدید نظر شده است، به طوری که آدا ۸۳ با آدا ۹۵، آدا ۲۰۰۵ و آخرین استاندارد، آدا ۲۰۱۲ دنبال شده است. این تجدید نظرها ویژگیهای جدیدی مانند برنامهنویسی شیءگرا و بهبود پشتیبانی از سیستمهای زمان واقعی را معرفی کردند. امروزه آدا توسط انجمن منابع آدا نگهداری میشود و همچنان در سیستمهای حیاتی که ایمنی و قابلیت اطمینان در آنها بسیار مهم است، استفاده میشود.
آدا بررسی نوع سختگیرانهای را اعمال میکند که به شناسایی خطاها در زمان کامپایل به جای زمان اجرا کمک میکند.
type Integer_Type is range 0 .. 100;
variable Count : Integer_Type;
Count := 50; -- این معتبر است
Count := 150; -- این باعث ایجاد خطای زمان کامپایل میشود
این زبان از برنامهنویسی ماژولار از طریق استفاده از بستهها پشتیبانی میکند که انواع، دادهها و رویههای مرتبط را در خود جای میدهند.
package Geometry is
type Point is record
X : Float;
Y : Float;
end record;
procedure Move(Point : in out Point; DeltaX, DeltaY : Float);
end Geometry;
آدا پشتیبانی داخلی از برنامهنویسی همزمان از طریق وظایف دارد که اجازه میدهد چندین فرآیند به طور همزمان اجرا شوند.
task My_Task is
begin
-- کد وظیفه
end My_Task;
آدا مکانیزمهای قوی مدیریت استثنا را فراهم میکند که به توسعهدهندگان اجازه میدهد خطاهای زمان اجرا را به طور مؤثر مدیریت کنند.
begin
-- کدی که ممکن است استثنا ایجاد کند
exception
when Constraint_Error =>
-- مدیریت خطا
end;
آدا از برنامهنویسی شیءگرا با ویژگیهایی مانند وراثت و چندشکلی پشتیبانی میکند.
type Vehicle is tagged null record;
type Car is new Vehicle with record
Doors : Integer;
end record;
procedure Display(V : Vehicle) is
begin
-- کد برای نمایش اطلاعات وسیله نقلیه
end Display;
عمومیسازی به توسعهدهندگان اجازه میدهد کدهای انعطافپذیر و قابل استفاده مجدد بنویسند با تعریف انواع و زیر برنامههای پارامترگذاری شده.
generic
type Item_Type is private;
package Container is
procedure Add(Item : Item_Type);
end Container;
آدا از انواع شمارشی پشتیبانی میکند که نوعی با مجموعهای از مقادیر نامگذاری شده تعریف میکند.
type Color is (Red, Green, Blue);
انواع کنترلشده اجازه کنترل دقیق بر ایجاد و تخریب اشیاء را میدهند.
type My_Controlled_Type is new Ada.Finalization.Controlled with record
Value : Integer;
end record;
آدا ویژگیهایی را فراهم میکند که میتوان از آنها برای بهدست آوردن اطلاعات در مورد انواع یا اشیاء استفاده کرد.
X : Integer := 10;
Size : Natural := X'Size; -- بهدست آوردن اندازه یک عدد صحیح
آدا بر مفهوم مدیریت حافظه تأکید دارد و کنترل صریح بر ذخیرهسازی و تخصیص دادهها را فراهم میکند.
declare
type Record_Type is record
A : Integer;
B : Float;
end record;
My_Record : Record_Type;
end;
آدا میتواند با استفاده از کامپایلرهای مختلف کامپایل شود که GNAT یکی از پرکاربردترین آنهاست. GNAT بخشی از مجموعه کامپایلرهای GNU (GCC) است و راهی رایگان و متنباز برای کامپایل کد آدا فراهم میکند.
چندین محیط توسعه یکپارچه (IDE) برای آدا وجود دارد، مانند GNAT Studio، AdaGIDE و GPS (GNAT Programming Studio). این ابزارها ویژگیهایی مانند هایلایت نحو، تکمیل کد و قابلیتهای اشکالزدایی را فراهم میکنند.
برای ساخت یک پروژه آدا با استفاده از GNAT، معمولاً کد منبع آدا نوشته میشود و سپس از دستورات زیر در ترمینال استفاده میشود:
gnatmake my_program.adb
این دستور فایل منبع آدا را کامپایل کرده و یک فایل اجرایی تولید میکند.
آدا عمدتاً در سیستمهای حیاتی که شامل اما نه محدود به موارد زیر است، استفاده میشود:
قابلیت اطمینان و نگهداری آن، آن را به انتخابی ترجیحی در این بخشها تبدیل کرده است.
در حالی که آدا برخی شباهتها با زبانهای برنامهنویسی دیگر دارد، اما به خاطر تأکید بر ایمنی و قابلیت اطمینان متمایز است.
هنگام برخورد با ترجمه منبع به منبع، ابزارهای خاصی وجود دارند که میتوانند به تبدیل کد آدا به زبانهای برنامهنویسی دیگر کمک کنند. به عنوان مثال، ابزارهایی مانند Gnat2Go میتوانند برای ترجمه کد آدا به Go استفاده شوند. با این حال، باید مراقب بود تا اطمینان حاصل شود که عملکرد و ویژگیهای ایمنی کد آدا اصلی در طول فرآیند ترجمه حفظ شود.
برخی از ابزارهای رایج برای ترجمه منبع به منبع شامل: