زبان برنامه نویسی Ada

مرور کلی

آدا یک زبان برنامه‌نویسی سطح بالا و ساختاری است که عمدتاً برای برنامه‌نویسی سیستم‌ها و برنامه‌های زمان واقعی طراحی شده است. این زبان به نام آدا لاولیس نامگذاری شده است که اغلب به عنوان یکی از اولین برنامه‌نویسان کامپیوتر شناخته می‌شود. آدا به خاطر نوع‌گذاری قوی، ماژولاریتی و پشتیبانی از برنامه‌نویسی همزمان شناخته شده است و آن را برای سیستم‌های حیاتی در صنایعی مانند هوافضا، خودروسازی و دفاع مناسب می‌سازد.

جنبه‌های تاریخی

ایجاد

آدا در اواخر دهه ۱۹۷۰ تحت پروژه‌ای که توسط وزارت دفاع ایالات متحده (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;

ابزارهای توسعه‌دهنده، زمان اجرا و IDEها

زمان اجرا و کامپایلرها

آدا می‌تواند با استفاده از کامپایلرهای مختلف کامپایل شود که GNAT یکی از پرکاربردترین آن‌هاست. GNAT بخشی از مجموعه کامپایلرهای GNU (GCC) است و راهی رایگان و متن‌باز برای کامپایل کد آدا فراهم می‌کند.

IDEهای محبوب

چندین محیط توسعه یکپارچه (IDE) برای آدا وجود دارد، مانند GNAT Studio، AdaGIDE و GPS (GNAT Programming Studio). این ابزارها ویژگی‌هایی مانند هایلایت نحو، تکمیل کد و قابلیت‌های اشکال‌زدایی را فراهم می‌کنند.

ساخت یک پروژه

برای ساخت یک پروژه آدا با استفاده از GNAT، معمولاً کد منبع آدا نوشته می‌شود و سپس از دستورات زیر در ترمینال استفاده می‌شود:

gnatmake my_program.adb

این دستور فایل منبع آدا را کامپایل کرده و یک فایل اجرایی تولید می‌کند.

کاربردهای آدا

آدا عمدتاً در سیستم‌های حیاتی که شامل اما نه محدود به موارد زیر است، استفاده می‌شود:

قابلیت اطمینان و نگهداری آن، آن را به انتخابی ترجیحی در این بخش‌ها تبدیل کرده است.

مقایسه با زبان‌های دیگر

در حالی که آدا برخی شباهت‌ها با زبان‌های برنامه‌نویسی دیگر دارد، اما به خاطر تأکید بر ایمنی و قابلیت اطمینان متمایز است.

نکات ترجمه منبع به منبع

هنگام برخورد با ترجمه منبع به منبع، ابزارهای خاصی وجود دارند که می‌توانند به تبدیل کد آدا به زبان‌های برنامه‌نویسی دیگر کمک کنند. به عنوان مثال، ابزارهایی مانند Gnat2Go می‌توانند برای ترجمه کد آدا به Go استفاده شوند. با این حال، باید مراقب بود تا اطمینان حاصل شود که عملکرد و ویژگی‌های ایمنی کد آدا اصلی در طول فرآیند ترجمه حفظ شود.

برخی از ابزارهای رایج برای ترجمه منبع به منبع شامل: