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

wiki:/graphics/start.jpg

Самый простой путь — скачать и поставить GNAT Community Edition.

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

Из бесплатных вариантов на данный момент доступен компилятор Ады из состава коллекции компиляторов GCC (the Gnu Compiler Collection). Он называется GNAT (акроним GNU NYU Ada Translator). Есть два варианта этого компилятора. Назовем их условно GNAT FSF и GNAT Community. Вот в чем различия:

  • Наверное, наиболее важное отличие в том, что библиотека времени исполнения (runtime) в GNAT FSF распространяется по лицензии GPLv3 с исключением, позволяющим пользователю использовать любую лицензию для своих исходных текстов. В GNAT Community такого исключения нет, как следствие пользователь должен публиковать свои исходные тексты под лицензией GPL, если он распространяет свою программу.
  • Первый собирается из исходных текстов GCC авторами дистрибутивов, второй распространяется AdaCore — основным разработчиком компилятора Ады.
  • Для GNAT FSF доступен компилятор основанный на последней версии генератора кода (так называемого backend). В тоже время GNAT Community основывается на более старой версии генератора кода.
  • Компилятор GNAT FSF тестируется (если этим озаботился автор дистрибутива) с помощью относительно небольшого набора тестов из состава GCC. AdaCore тестирует GNAT Community используя свой набор тестов, который значительно больше.
  • В GNAT FSF обычно входит лишь компилятор, остальные компоненты необходимо устанавливать отдельно. В дистрибутив GNAT Community, кроме компилятора, упаковываются несколько библиотек, интегрированная среда разработки GPS (GNAT Programming Studio), инструментарий статического анализа SPARK, а также прочий инструментарий (gprbuild, gprinstall, gnatcheck и пр.).

Давайте рассмотрим какие есть варианты в зависимости от операционной системы разработчика.

Windows 32

32‐битный компилятор для Windows входит в состав GNAT GPL 2017 (так раньше назывался GNAT Community) и доступен для скачивания на сайте http://www.adacore.com/download/more

Windows 64

Если Вас устраивает GPL лицензия — используйте GNAT Community Edition.

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

  • Качаем и ставим msys2 с сайта http://www.msys2.org/
  • Запускаем 64‐битный шел (есть еще 32‐битный) и ставим компилятор Ады:
 pacman -S mingw-w64-gcc-ada
  • Если вы планируете строить динамические библиотеки необходимо скопировать libgnat-*.dll и libgnarl-*.dll из bin/ в adalib/ Потому, что предлагаемый авторами дистрибутива msys2 механизм *.dll.a не всегда работает корректно:
adalib=$(dirname `gcc -print-libgcc-file-name`)/adalib
bin_dir=$(dirname `which gcc`)
rm -f $adalib/libgna{t,rl}-*.dll.a
cp $bin_dir/libgna{t,rl}-*.dll $adalib/

Linux

Если Вас устраивает GPL лицензия — используйте GNAT Community Edition. Установить его имеет смысл даже, если вы планируете использовать GNAT FSF. Это даст Вам возможность воспользоваться средой разработки GPS. Для этого нужно добавить путь к GNAT Community в конец переменной PATH.

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

Выгодно выделяется на общем фоне Fedora Linux. Так Fedora 26 предлагает 7.0.1 для архитектур x86_64, ia64, ppc, ppc64, alpha, arm и aarch64, а Fedora 25 — 6.3.1.

В Debian компилятор более старый. Debian Jessie предлагается 4.9.2 (выпуск 2014 года). Дистрибутив Ubuntu основан на Debian и предлагает аналогичный компилятор. Для платформы ARM есть популярный дистрибутив Raspbian. Он также основан на Debian и в нем тоже есть GNAT FSF 4.9.2.

Также стоит упомянуть дистрибутив OpenSUSE. В нем идет компилятор 6.

Docker

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

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

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

Mac OS

Для этой ОС также выпускается GNAT Community Edition.

Вполне работающие сборки GNAT FSF можно найти на сайте gnuada

FreeBSD

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

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

Экзотика — Кросс компиляторы

x86_64 -> ARM, RISC-V

На том же сайте http://www.adacore.com/download/more есть возможность скачать кросс компилятор в ARM и RISC-V. Он позволяет собирать программы для Raspberrypi 2 с ОС Linux и для некоторый “голых досок” (bareboard, без ОС) с процессорами ARM Cortex M3, ARM Cortex M4F and ARM Cortex R4F. Это GNAT GPL по нашей классификации. Библиотеки времени исполнения для bareboard с лицензией “GPL с исключением” мне не встречались.

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 провел целое исследование и записал руководство, как скачать, поставить и начать использовать этот транслятор.




Июнь 2018