Cài đặt ngôn ngữ lập trình Ada

Ngôn ngữ lập trình Ada nổi bật với độ an toàn, tính song song và khả năng lập trình thời gian thực, thường được ứng dụng trong lĩnh vực hàng không, quốc phòng và hệ thống nhúng quan trọng. Trong bài viết này, sẽ được tìm hiểu cách cài đặt Ada trên nhiều hệ điều hành khác nhau (Linux, Windows, macOS), thiết lập GNAT, biên dịch chương trình đầu tiên, cũng như tối ưu hiệu năng khi làm việc với Ada.
1. Cài đặt Ada Compiler
Ada chuẩn hiện nay được hỗ trợ chủ yếu qua GNAT (GNU Ada Translator), thuộc GCC.
Linux (Ubuntu/Debian):
    sudo apt update
    sudo apt install gnat gprbuild -y
Fedora / RHEL / CentOS:
    sudo dnf install gcc-gnat gprbuild -y
Windows:
Cài đặt GNAT Community Edition (AdaCore): Truy cập AdaCore Community để tải GNAT Community phiên bản mới nhất. Sau khi chạy bộ cài đặt, chọn các tùy chọn mặc định. Sau khi cài xong, mở GNAT Studio (IDE đi kèm) để biên dịch và chạy chương trình Ada.
  Ví dụ chạy thử:
  Biên dịch bằng lệnh:
    gnatmake hello.adb
    .\hello.exe
- Cài đặt GNAT qua MSYS2:
  + Tải và cài MSYS2. Mở MSYS2 MINGW64 terminal và cài gói Ada: pacman -S mingw-w64-x86_64-gcc-ada gprbuild
  + Kiểm tra: gnatmake --version
- Cài đặt GNAT qua Cygwin:
  + Cài Cygwin: https://www.cygwin.com/. Trong lúc cài đặt, chọn thêm gói gcc-adagprbuild.
  + Mở Cygwin Terminal, chạy: gnatmake hello.adb
macOS:
Trên macOS, chỉ cần cài GCC qua Homebrew: brew install gcc
Cài gprbuild để quản lý project lớn: brew install gprbuild
Kiểm tra compiler Ada: gnat --version
Tối ưu hiệu năng cho Apple Silicon M1/M2/M3:
  + Tạo file hello.adb:
  + Biên dịch & chạy:
     gnatmake hello.adb -O3 -mcpu=native -fstrict-aliasing
     ./hello
     Dùng tối ưu ARM64 flags:
     + -O3 → tối ưu tối đa
     + -mcpu=apple-m1, -mcpu=apple-m2, -mcpu=apple-m3 hoặc -mcpu=native → tối ưu đúng chip
     + -fstrict-aliasing → tối ưu memory access
2. Tối ưu Biên Dịch (Optimization Flags)
2.1. Mức cơ bản (tốc độ vs an toàn)
-O0: Không tối ưu, dễ debug
-O2: Tối ưu phổ biến, cân bằng tốc độ & size (default tốt)
-O3: Tối ưu mạnh, có thể tạo code lớn hơn nhưng nhanh hơn
-Os: Tối ưu dung lượng (giảm size binary)
-Ofast: Như -O3 nhưng tắt một số kiểm tra chuẩn IEEE/ISO (không luôn an toàn)
2.2. Flags chuyên biệt của Ada
-gnatn: Inline function/procedure (nội tuyến)
-gnatp: Bỏ runtime checks (range, overflow, null access…) → nhanh hơn nhưng kém an toàn
-gnato: Bật kiểm tra overflow (ngược lại với -gnatp)
-gnata: Bật kiểm tra assertion
-gnatVa: Bật kiểm tra tất cả các điều kiện phụ (pre/post-conditions, contract)
-gnat05/-gnat12/-gnat2022: Chọn standard Ada version
2.3. Flags tối ưu của GCC (backend)
-march=native: Tối ưu theo CPU hiện tại (tự động chọn tập lệnh: SSE, AVX, NEON…)
-mtune=native: Tối ưu pipeline CPU, không ràng buộc ISA
-flto: Link-Time Optimization (LTO) → tối ưu liên chương trình
-funroll-loops: Unroll vòng lặp (chạy nhanh hơn, binary to hơn)
-fstrict-aliasing: Tối ưu dựa vào giả định alias chuẩn
-fprefetch-loop-arrays: CPU prefetch dữ liệu vòng lặp
-ffast-math: Tối ưu toán học (có thể sai lệch kết quả nhỏ)