Ада и ASPLinux 10

Аватар пользователя Subj

Ада и ASPLinux 10

Эта статья призвана помочь тем из Вас, кто решил по тем или иным причинам изучить данный замечательный язык. Автор сам использует в качестве десктопа а также в качестве рабочей среды Linux ASP 10, отсюда и название статьи и некоторый уклон именно на этот дистрибутив. Однако компиляторы с языка Ада реализованны под очень большое число различных операционных систем. Самым примечательным из них является система компилятора - GNAT основанная на технологии GCC, распространяемая на условиях лицензии GNU (оттого и примечательный). Про него и будем говорить.

Я не буду рассказывать об истории этого языка, отраслях применения и о существующих компиляторах. Информации в сети об этом предостаточно. Итак, в состав ASP 10 входит собственная сборка GNAT. Поищите на установочных дисках пакеты:

gcc-gnat-3.3.3-7asp.i386.rpm
libgnat-3.3.3-7asp.i386.rpm

После установки открываем терминал и смотрим:

$ gnat
GNAT 3.3.3 20040412 (ASPLinux 3.3.3-7) Copyright 1996-2002 Free Software Foundation, Inc.
...

Довольно старая версия и для сборки серьезных проектов категорически не подходит, поскольку слишком много Bug Report's может повыскакивать. Но для изучения этого вполне хватит.

Если Вас это не устраивает, можете скачать последнюю на момент написания статьи версию - это GNAT GPL 2005, который поддерживает некоторые нововведения из стандарта ADA2005. Замечу, что основным применяемым стандартом на данный момент является ADA95.
Скачать можно с официального сайта: https://libre2.adacore.com/
Но учтите, что эта версия налагает запрет на разработку программ под лицензией, отличной от GPL. Там же есть версия для учебных организаций и версия для разработки коммерческих программ (GNAT Pro).
Поскольку на этом сайте нет поддержки дозагрузки, логичнее будет отправиться на зеркало:

ftp://ftp.mipt.ru/ada/gnat.gpl

По умолчанию все устанавливается в директорию /usr/gnat где и разворачивается вся структура, так что не забудьте включить путь /usr/gnat/bin в переменную PATH (перед /usr/bin. Здесь правда могут возникнуть проблемы с многоверсионностью gcc, так что будьте внимательны, например, при сборке какого-нибудь модуля ядра - здесь должен использоваться родной gcc).

Итак, Вы установили GNAT, и мне остаеться только рассказать в кратце о том, как им пользоваться.
Но для начала немного об IDE. Под Windows я знавал редактор AdaGide, который к сожалению под Wine так и не смог запустить.
Поддержку подсветки синтаксиса Ада включают большинство стандартных текстовых редакторов: Gvim, Kate, XEmax. Можно использовать KDevelop. Есть еще GPS, который без проблем можно найти в сети и который уже включен в стандартный пакет поставки ADA GPL 2005. Про другие ничего хорошего сказать не могу.

--
Пример минимальной программы:

$ cat > ex.adb
procedure Ex is
begin
   null;
end Ex;
Ctrl-C

Для полноты создадим небольшую модульную программку. Понятие "модуль" в языке Ада представленно такой единицей, как пакет. Пакет имеет спецификацию и тело. В системе GNAT принято, что файлы спецификаций имеют расширения .ads, а тел - .adb. Головная процедура может иметь любое имя и должна помещаться в файл с тем же названием, и расширением .adb (см. предыдущий пример).
Поиздеваемся над традиционным Hello, world!
Программа будет называеться: hello и включать один пакет под названием: logic.
Начнем с пакета. Спецификация будет содержать описание одной функции, которая будет выводить текст, переданный ей в качестве параметра, и возвращать количество её вызовов. Счетчик мы поместим в приватную часть пакета.

$ cat > logic.ads
package Logic is
   function Write (S : in String) return Integer;
private
   Count : Integer := 0;
end Logic;
Ctrl-C

$ cat > logic.adb
with Ada.Text_IO; use Ada.Text_IO;
package body Logic is
   function Write (S : in String) return Integer is
   begin
      Put_Line(S);
      Count := Count + 1;
      return Count;
   end Write;
end Logic;
Ctrl-C

Головная процедура:

[subj@localhost new]$ cat > hello.adb
with Logic;
procedure Hello is
   c : Integer;
begin
   c := Logic.Write("Hello, world!");
   for i in 1..10 loop
      c := Logic.Write(c'Img);
   end loop;
   c := Logic.Write(c'Img & " End!");
end Hello;
Ctrl-C

Мы имеем три файла: hello.adb, logic.ads, logic.adb
Сборка проходит в три этапа: Компиляция, Связывание программы, Компоновка программы.
Всё это осуществляется вызовом трех утилит: gcc, gnatbind, gnatlink соответственно.
Начнем. Компиляция:

$ gcc -c logic.adb
$ gcc -c hello.adb

Связывание:

$ gnatbind -shared hello.ali
(заместо -shared можно использовать -static)

Линковка:
$ gnatlink -s hello.ali
( s - Strip, необязательно)

Дабы облегчить сборку лучше пользоваться утилитой gnatmake, которая автоматически выполняет показанные выше операции. Чтобы раскидать параметры по утилитам, которые будут вызванны, используют:
для gcc : -cargs ... (можно не указывать)
gnatbind: -bargs ...
gnatlink: -largs ...

В простейшем случае можно написать:
$ gnatmake hello.adb

С использованием ручного указания нужных параметров (к опциям gcc добавим -O2, а -shared заменим на -static):
$ gnatmake -O2 hello -bargs -static -largs -s
gcc -c -O2 hello.adb
gcc -c -O2 logic.adb
gnatbind -aO./ -static -I- -x hello.ali
gnatlink -s hello.ali

Запускаем:
$ ./hello
Hello, world!
1
2
...
10
11 End!

Ну и напоследок введите gnatmake без всего для получения более подробной информации по различным опциям; и gnat без всего для получения листинга доступных утилит.

P.S.: Как я уже сказал ранее, в сети можно найти довольно много различной информации, касающейся этого языка, но я бы посоветовал в качестве отправной точки посетить русскоязычный ресурс: http://ada-ru.org/ (найдите там книгу А.Гаввы "Адское программирование". Лучшего учебника я не знаю).

(c) by Subj {subj@bk.ru}. 02.04.2006. Thank's ...

Your rating: Нет Average: 10 (1 vote)

Комментарии

Аватар пользователя Subj

Re: Ада и ASPLinux 10

А это только у меня одного такие мракозябры с html тэгами?

RSS-материал