Начало всех начал

Не будем отклонятся от традиций и напишем самую популярную в мире программу. Итак, "Hello, world!", дамы и господа! Создаём в текстовом редакторе (типа блокнота, Geany, Notepad++ и т.д. Только не MS Office, LibreOffice и иже с ними) файл main.adb со следующим содержимым:

with Ada.Text_IO; --Подключаем пакет Text_IO. Он нужен для работы с текстом
 
procedure Main is                          --Начало программы (процедуры)
begin                                      --Начало блока исполнения команд
	Ada.Text_IO.Put_Line("Hello, world!"); --Вывод строки и переход на следующую строку
end Main;                                  --Конец программы (процедуры)

Где-то так. Как и договаривались, описание каждой строчки программы дано в комментариях. Как из этого текста сделать исполняемый файл показано в конце страницы.

Писать каждый раз ради вывода строки конструкцию "Ada.Text_IO.Put_Line("Hello, world!");" - малопривлекательное занятие, поэтому немного сократим код:

with Ada.Text_IO; use Ada.Text_IO; --Подключаем пакет для работы с текстом и говорим компилятору, что
                                   --если он встретит какую-то команду (в данном случае
                                   --Put_Line()), то её реализацию нужно посмотреть в пакете
                                   --Ada.Text_IO
procedure Main is
begin
	Put_Line("Hello, world!");
end Main;

Можно use Ada.Text_IO разместить таким образом:

with Ada.Text_IO;
 
procedure Main is
	use Ada.Text_IO; --Просмотр пакета Ada.Text_IO будет осуществляться в пределах procedure Main.
                     --Если в коде будут другие процедуры (procedure), то, если внутри них понадобится
                     --ввод/вывод текста, нужно будет прописывать use Ada.Text_IO внутри этих процедур
begin
	Put_Line("Hello, world!");
end Main;

Также можно вместо команды Put_Line() использовать команду Put(), но тогда не произойдёт перевода курсора в начало новой строки. Для перехода на новую строку можно использовать команду New_Line.

with Ada.Text_IO; use Ada.Text_IO;
 
procedure Main is
begin
	Put("Hello, world!"); --Вывод текста на экран
	New_Line;             --Перевод курсора на новую строку.
end Main;

Каждое действие (вызов функции или процедуры, арифметическая операция и т.д) должно заканчиваться символом ';'. После ';' можно продолжить писать команды в этой же строке (иногда это целесообразно), а можно перейти к новой строке. Тут уже вопрос собственных предпочтений и пряморукости. Язык Ада - регистронезависимый, поэтому текст программы можно писать как в верхнем, так и в нижнем регистрах. Однако есть некоторые соглашения, которых стоит придерживаться. Например, названия переменных, а также слова в названиях процедур и функций пишутся с заглавной буквы, слова разделяются символом '_'. Будем стараться придерживаться этих правил.

Компиляция.

Итак, чтобы программа заработала, её нужно скомпилировать и скомпоновать. Рассмотрим несколько вариантов (более подробную информацию стоит смотреть в документации компилятора). Если Вы используете редактор Geany, то для компиляции и компоновки Вам достаточно нажать F9, а затем F5 для запуска программы. Рассмотрим компиляцию и компоновку в консоли.

Способ 1. Это самый простой способ - открываем консоль, переходим в папку с нашим файлом (main.adb) и пишем следующую команду:

gnatmake main.adb

В итоге получим исполняемый файл. В Linux его размер будет около 8 Кбайт. В Windows - около 850 Кбайт. Это очень много и связано с тем, что внутрь итогового файла добавлено много "ненужностей" (Run-Time Library).

Способ 2. Компиляцию можно выполнить так (если Вы уже испробовали способ 1, то итоговый файл main.exe перед компиляцией лучше удалить, т.к компилятор "посмотрит", что в исходный файл (main.adb) никаких изменений не внесено, а итоговый файл уже существует, и "ругнётся", мол, "хозяин, ты что, издеваешься?")

gnatmake -O1 xxx -bargs -shared

Размер файла будет порядка 59 Кбайт. Это уже лучше, но всё-равно много.

Способ 3. Опять удаляем main.exe и выполняем следующие команды:

gcc -c -O1 main.adb
gnatbind -shared -x main.ali
gnatlink main.ali -s -O1 -shared-libgcc

В результате получим исполняемый файл около 12 Кбайт. На этом, пожалуй, остановимся.

Я предполагаю, что Hello, world! - это раздел для начинающих, поэтому подробно на опциях компилятора останавливаться не буду. Компиляторы бывают разные и опции у них тоже разные. С опытом придёт и знание того, какие опции нужны, а какие нет. Для самых любознательных могу посоветовать книгу Гавва А.Е. «Адское» программирование. Ada-95. Компилятор GNAT» и/или документацию к компилятору GNAT.


В разделе "Шпаргалка" кратко описаны все изученные сегодня функции.