Как «поставить Аду» ?

wiki:/graphics/start.jpg

Самый простой путь — использовать alire.

Но если Вам интересны подробности и варианты, мы рассмотрим их в этой статье.

GNAT

Из бесплатных вариантов на данный момент доступен компилятор Ады из состава коллекции компиляторов GCC (the Gnu Compiler Collection). Он называется GNAT (акроним GNU NYU Ada Translator).

Компилятор имеет открытый исходный код. Как и все подобные проекты его нетрудно собрать самостоятельно, но существуют различные, уже готовые к использованию, сборки.

Alire

Этот способ установки подойдёт для систем Linux, Windows и Mac OS X с процессором x86_64 (либо aarch64, например Raspberry Pi 4).

Alire это пакетный менеджер для Ады. Он включает в себя каталог проектов (crates — библиотек или готовых программ) и соответствующую утилиту для их установки и сборки. Аналогичные менеджеры есть в других языках (cargo в Rust или opam в OCaml). Alire может поставить и компилятор.

Установить Alire можно скачав последний релиз с github и прописав путь к нему в переменную PATH. На Windows, при первом запуске, alr предложит установить msys2, что рекомендуется сделать.

Более подробно о работе с alire мы расскажем в отдельной статье.

Для установки компилятора запустите

alr toolchain --select gnat_native gprbuild

Alire скачает и распакует компилятор в домашний каталог (.config/alire/cache/dependencies/*). Далее он будет использовать его для сборки проектов. Вне Alire вы тоже можете использовать этот компилятор, если пропишите его в переменную окружения PATH. Опцией --install-dir= можно заставить Alire ставить компилятор в другое место.

Мы собрали Alire для процессора Aarch64, скачать его можно здесь.

Windows MSYS2

Как ещё один вариант сбороки GNAT можно рекомендовать использовать дистрибутив msys2. Эта система управления пакетами (пакетный менеджер) для Windows. Она основана на форке pacman, основного пакетного менеджера дистрибутива Arch Linux. После ее установки появляется возможность пользоваться bash, autotools и прочим ПО, характерным для POSIX систем. Установка выполняется в несколько шагов

  • Качаем и ставим msys2 с сайта http://www.msys2.org/
  • Запускаем 64‐битный шел (есть еще 32‐битный) и ставим компилятор Ады:
 pacman -S mingw-w64-gcc-ada

Linux

В современных дистрибутивах Linux GNAT FSF обычно входит в список пакетов готовых для установки. Версии компилятора и наличие библиотек разработки на языке Ада варьируются в зависимости от дистрибутива Linux.

Выгодно выделяется на общем фоне Fedora Linux. Так Fedora 33 предлагает 10.2.1 для архитектур x86_64, ia64, ppc, ppc64, alpha, arm и aarch64, а Fedora 34 — 11.0.1. Достаточно установить компилятор и утилиту сборки:

dnf install gcc-gnat gprbuild

В Debian компилятор более старый. Debian 10 предлагается GNAT 8.3. Дистрибутив Ubuntu основан на Debian. Ubuntu 20.04 предлагает компилятор GNAT 9.3 Для платформы ARM есть популярный дистрибутив Raspbian. Он также основан на Debian и в нем тоже есть GNAT FSF (например в buster идет gnat 8). Установить компилятор можно так:

apt install gnat gprbuild

Также стоит упомянуть дистрибутив OpenSUSE. В Leap 15.2 идет компилятор 7 (но есть и более поздние версии). Пакета gprbuild в стандартной поставке нет.

zypper install gcc-ada 

GNAT Community Edition

Специальная редакция GNAT Community Edition последний раз была выпущена в 2021 году (под Mac OS X в 2020). Она отличается лицензией GPL на библиотеку времени исполнения, как следствие пользователь должен публиковать свои исходные тексты под лицензией GPL, если он распространяет свою программу в бинарном виде. Зато она боле тщательно оттестирована и (на момент выпуска) имеет более свежий «фронтэнд» со всеми новыми возможностями компилятора. Эта редакция содержит GNAT Studio IDE (которая может работать и с другими версиями GNAT), gprbuild, несколько библиотек от AdaCore и другие инструменты.

Docker

Для тех, кто умеет пользоваться docker не составит труда запустить GNAT Community версию в контейнере:

docker run -i -t reznik/gnat:gpl.2021.fc34.slim

Версия .slim отличается отсутствием интегрированной среды разработки GNAT Studio и дополнительных библиотек (GNATCOLL, XmlAda, AWS, AUnit и др.). Ее удобно использовать в системах непрерывного тестирования ввиду сравнительно небольшого размера образа контейнера.

Mac OS

Ещё несколько вариантов для работы под Mac OS X:

  • Simon Wright раздаёт GNAT GCC 11, GNAT Community Edition 2021 и пр. на GitHub
  • Вполне работающие сборки GNAT можно найти на сайте gnuada

FreeBSD

Для FreeBSD, DragonFly, OpenBSD и прочих развивается порт GNAT FSF на сайте www.dragonlace.net. Там же есть и кросс компиляторы для Android.

NetBSD

GNAT GCC 10 и 11 работает в NetBSD. Подробнее по ссылке.

GNAT LLVM

Интересный вариант — компиляция Ады в LLVM. Этот подход открывает возможности использования Ады с LLVM инструментарием, а значит можно относительно несложно получить поддержку тех архитектур, которые есть в LLVM. В том числе WebAssembly, OpenCL SPIR-V, и др. На github выложены исходные тексты компилятора GNAT LLVM. Процесс построения описан в README.md. Помимо исходных текстов GNAT LLVM также необходимы исходные тексты GNAT, сам LLVM и clang. Для построения нужен работаеющи компилятор Ады. Подойдет GNAT Community Edition 2019 или даже GNAT FSF 8. Использовать GNAT Community, наверное предпочтительней, тк. там есть поддержка GNAT LLVM в конфигурационных файлах gprbuild/gprconfig. Зато GNAT FSF 8 и другие зависимости можно поставить в Ubuntu прямо «из коробки». Вот как выглядит установка на Ubuntu 19.04:

git clone https://github.com/AdaCore/gnat-llvm.git
cd gnat-llvm
svn co svn://gcc.gnu.org/svn/gcc/trunk/gcc/ada llvm-interface/gnat_src
sudo apt install -y llvm-dev clang cmake gnat gprbuild g++
make
export PATH=$PWD/llvm-interface/bin:$PATH
cat > hello.adb << EOF
with Ada.Text_IO;
procedure Hello is
begin
   Ada.Text_IO.Put_Line ("Hello");
end;
EOF
llvm-gnatmake hello.adb

ObjectAda

Компилятор ObjectAda распространяется на коммерческой основе. Он доступен для Windows и (относительно недавно) для Linux. Если вы разрабатываете програмное обеспечение с открытым исходным кодом, можно попросить бесплатную версию компилятора. См. подробности на reddit.

Экзотика —

AdaWebPack

Адаптация GNAT LLVM для компиляции в WebAssembly и запуска в браузере называется AdaWebPack. Есть RPM‐ы для Fedora 33/34, но проще всего запускать из Docker построив образ:

docker build --tag wgprbuild2 - <<EOF
FROM registry.fedoraproject.org/fedora-minimal:33
RUN microdnf --assumeyes install \
  make \
  rpmdevtools \
  gcc-gnat \
  gcc-c++ \
  libstdc++-static \
  clang \
  llvm-devel \
  lld \
  gprbuild \
  gdb \
  git \
  subversion \
  openssh-server \
  tar \
  gzip \
  chrpath \
  ca-certificates && \
curl -o adawebpack-0.1.0-git.fc33.x86_64.rpm \
https://download.copr.fedorainfracloud.org/results/reznik/adawebpack/fedora-33-x86_64/02306488-adawebpack/adawebpack-0.1.0-git.fc33.x86_64.rpm && \
rpm -i adawebpack-0.1.0-git.fc33.x86_64.rpm && \
rm -f adawebpack-0.1.0-git.fc33.x86_64.rpm && \
microdnf clean all
EOF

И запускать его скриптом

#!/bin/bash
exec docker run --rm --tmpfs /tmp/ --user $UID --volume $HOME:$HOME --workdir $PWD wgprbuild2 gprbuild "$@"

Кросс компиляторы для ARM, RISC-V

Alire может также поставить кросс компилятор в ARM или RISC-V. Он позволяет собирать программы для для некоторый “голых досок” (bareboard, без ОС) с процессорами ARM Cortex M3, ARM Cortex M4F, ARM Cortex R4F или RISC-V.

alr toolchain --select gnat_arm_elf
alr toolchain --select gnat_riscv64_elf

ESP32 на FreeRTOS

Я включил Аду в кросс компиляторе для ESP32. Библиотека времени исполнения опирается на FreeRTOS. Как использовать описано здесь.

Кросс компилятор на Linux в Windows

С помощью Fedora оказалось не трудно получить кросс компилятор Linux -> Windows. В дистрибутив Fedora включен кросс компилятор в Windows, но в нем нет поддержки Ады. Включит Аду оказалось довольно легко. Вот например пакеты собранные для Fedora 24 https://build.opensuse.org/package/show/home:reznik/mingw-gcc Воспользоваться ими можно так:

dnf install --assumeyes dnf-plugins-core 
dnf config-manager --add-repo http://download.opensuse.org/repositories/home:reznik/Fedora_24/home:reznik.repo
dnf --assumeyes install gcc-gnat gprbuild mingw32-gcc-gnat mingw64-gcc-gnat

Либо воспользоваться готовым Docker образом:

docker pull reznik/matreshka-cross
docker run -i -t reznik/matreshka-cross /bin/bash 

AdaMagic: из Ada в C, C++

Интересные эксперименты можно провести используя AdaMagic. Этот компилятор имеет давнюю историю. Сейчас он распространяется MapuSoft, как часть их продукта Ada-C/C++ Changer™. Пользователь OCTAGRAM провел целое исследование и записал руководство, как скачать, поставить и начать использовать этот транслятор.

Подробности можно узнать на форуме forum.pascal.net.ru (требуется регистрация).


ноябрь 2021

GNAT Community Edition