Сборка набора инструментов «GNAT Community 2018» для платформы MinGW-w64.
Не прошло и двадцати лет и, наконец-то, в мае 2018 года компания «AdaCore» выпустила 64-рязрадную
среду программирования ADA под Windows «GNAT Community 2018». Но, как оказалось, этот набор
инструментов очень плохо подходит для разработки приложений для Windows. В качестве основы взаимодействия
приложений с пользователем была выбрана комбинация MINGW-пакетов Cairo и GTK+,
которые не являются естественными для Windows и создают нагромождение интерфейсов. Эти пакеты необходимы
для разработки и функционирования интегрированной среды программирования GPS, но разрабатывать
приложения для Windows на их основе сложно и трудоёмко. Интегрированный редактор GPS также плохо
приспособлен для разработки приложений для Windows. Поддерживаются реликтовые кодировки типа
«Cyrillic (ISO-8859-5)», которые нигде не используются с начала 80-х годов прошлого века,
а кодировки Windows-ANSI и Windows-OEM не поддерживаются, но эти кодировки
необходимы для редактирования исходных текстов программ для Windows и файлов ресурсов Win32-приложений.
Интегрированная среда GPS не является полностью 64-х разрядной. Утилита «explaunch.exe»,
осуществляющая перехват вызовов API консольного вывода подчинённых процессов, является 32-разрядным
приложением и бесполезна для 64-разрядных процессов. Я разработал 64-разрядный вариант этой утилиты
ещё в 2015 году. Утилита GPRINSTALL не устанавливает EXE-файлы (пытается установить исполняемые
файлы без расширения, а их не существует). Я этот глюк исправил ещё в 2013 году. Разрабатывать
COM-компоненты и COM-приложения на языке ADA вообще нет никакой возможности.
В конце 90-х и начале 2000-х годов интегрированной средой разработки под Windows систем GNAT GPL был
редактор AdaGIDE, который поддерживал разработку Win32-приложений. Была возможность скачивания и
установки пакета Win32Ada и пакетов GNATCOM и GWindos проекта GNAVI.
Белорусский проект GNAT OEM был создан специально для разработок Win32-приложений на языке
ADA. С появлением редактора GPS пакеты проекта GNAVI перестали поддерживаться,
исходные тексты редактора AdaGIDE были утеряны, бинарные инсталляторы этого редактора перестали
работать, проект GNAT OEM перестал развиваться. В редакциях GNAT GPL 2017 и
GNAT Community 2018 исчез даже пакет Win32Ada, хотя, с самого начала, он был практически
бесполезен, разрабатывать Win32-приложения с помощью этого пакета практически невозможно,
а доступ к функциям Win32 API лучше осуществлять с помощью прагм Import в нужных местах и в
нужном контексте.
Очень часто, при обсуждении технологий разработок программного обеспечения на языке ADA,
затрагивается вопрос о переносимости ПО на уровне исходных текстов. Отсюда такие рекомендации, как
использование переносимых графических оболочек GTK+ или QT.
На самом деле, из-за сильнейшей зависимости ЮНИКС-подобных ОС от
версий системных библиотек, настоящей переносимости на уровне исходных текстов не существует и
никогда не существовало! Поставщики операционных систем уже давно перестали затрагивать
вопрос о переносимости ПО, а вот в сфере ADA-технологий он почему-то постоянно всплывает.
Кардинальным решением проблем переносимости ADA-программ,
я думаю, было бы изменение стандарта ADA и внесение реализаций графических и консольных
интерактивных интерфейсов в стандартную исполняющую библиотеку ADA. Что использовать для
реализации этих интерфейсов – Win32 API, X-Win API, NCURSES или что-то ещё,
определялось бы на стадии генерации компилятора и исполняющей библиотеки. Пример внесения
графического интерактивного интерфейса в исполняющую библиотеку языка программирования: система
программирования MODULA3. При этом, определения синтаксиса и семантики языка программирования,
основных интерфейсов исполняющей системы оставались очень компактными и понятными. Другой пример
переносимой среды программирования: популярная система программирования ДЕЛФИ.
В настоящее время надежным способом разработки переносимых интерактивных приложений на языке
ADA является создание веб-приложений в системе AWS и использование для текстового
и графического ввода/вывода возможностей современных веб-браузеров, которые, благодаря стандартам
и рекомендациям W3C, примерно одинаковы для всех.
Главной особенностью предлагаемой сборки является наличие развитых средств и возможностей разработки
Win32-приложений на языке ADA.
Сам процесс сборки подобен процессу сборки описанному в статье
Сборка среды GNAT Ada GPL 2017 для платформы MinGW-w64
но только с несколько иным набором исходных текстов.
В предлагаемой сборке реализованы почти все пакеты из списка пакетов для сборки
«GNAT Community 2018» на платформе Windows от компании «AdaCore». В результате получилась,
пожалуй, самая навороченная сборка MINGW64 версии 7.3.1.
Построенная сборка включает компиляторы языков программирования Ada, C, C++,
Fortran, ObjC, Obj-C++; интерпретаторы Python, Perl, Tcl/Tk,
Ruby; интерактивный отладчик gdb v.8.0; систему управления проектами CMake,
утилиту скачивания CUrl с широким набором поддерживаемых протоколов и возможностей;
системы управления базами данных "Berkeley DB",
"SQLite3", "PostgreSQL"; библиотеку двумерного графического вывода
Cairo v.1.15.4; библиотеку оконного ввода/вывода GTK+ v.3.14.15;
мощный редактор исходных текстов программ "GPS Community 2018 (GNAT Programming Studio)"
с широкими возможностями построения проектов, компиляции и отладки программ, доступа к документации по
программированию; 64-разрядную реализацию Ada-библиотек XmlAda, GtkAda,
GNATColl, Win32Ada.
Для обеспечения возможностей разработки
Win32-приложений реализованы следующие
Ada-проекты:
-
Unicode_Console – Ada-библиотека ввода/вывода MINGW-консоли;
-
AdaCursesW – Ada-обёртка для Wide-варианта MINGW-пакета
«ncurses 6.0» (статья
Ada2012 Unicode NCURSES);
-
GNATCOM – Фреймворк для разработок COM-приложений на языке ADA;
-
GWindows – Фреймворк для разработок интерактивных графических Win32-приложений
на языке ADA;
-
GMSHTML – Ada-библиотека поддержки HTML-форм на языке ADA;
Все указанные выше пакеты поддерживают UNICODE-программирование и, по сложности и объёму
исходных кодов при разработке приложений, соответствуют программированию на языке C++
с использованием фреймворков ATL и MFC от компании «Microsoft»!
Для обеспечения возможностей разработки
Win32-приложений в сборку включены также следующие
сторонние утилиты:
-
ResEdit – мощный, свободный редактор ресурсов Win32-приложений разработки
«resedit.net».
-
Midl – компилятор IDL-файлов из пакета «Windows SDK» компании
«Microsoft». Необходимость включения этой утилиты продиктована тем, что MINGW-компилятор
IDL-файлов Widl неработоспособен.
В связи с особенностями разработок 64-разрядных
Win32-приложений в модули редактора
GPS внесены некоторые изменения:
-
Существенным переделкам подверглись коды утилиты
explaunch.exe,
осуществляющей перехват консольного вывода подчинённого процесса. Так как эти коды в существующем
пакете были существенно 32-разрядными пришлось потрудиться, чтобы перевести их в 64-разрядный код.
-
В список кодировок окна редактирования введены две новые кодировки: локальная кодировка
ANSI и локальная кодировка
OEM, кодовые страницы которых берутся из
Windows. Вообще то, при программировании под
Windows, нужны только три кодировки:
ANSI,
OEM и
UTF-8.
-
При запуске приложения gps.exe переменная окружения LANG получает значение
«en_US.UTF-8», что предотвращает вывод нечитаемых не английских строк в окно сообщений.
-
В строку запуска процесса отладчика gdb.exe добавляется ещё один обязательный параметр
'-iex "set new-console on"', что позволяет отлаживать в среде GPS консольные
приложения.
Инсталляция сборки и исходников производится при помощи Inno Setup инсталлятора
rtsdd_gnat_2018.exe со
скачиванием выбранных компонент инсталляции с моего сайта.
* Windows Defender теперь стал определять инсталлятор
"rtsdd_gnat_2018.exe"
как опасное для безопасности приложение (неизвестный издатель). Но никакой приватной информации на
сервер не посылается и данный файл можно запускать.
После инсталляции компонент нужно установить владельцем каталогов C:\ADAPROJECTS,
C:\msys64 и всех их подкаталогов, и файлов текущего пользователя, дать этому
пользователю полный доступ к этим каталогам, подкаталогам и файлам. А также, если вы
планируете в дальнейшем модернизировать сборку, сделать тоже самое для каталога
C:\MinGW64\7.3.1.
Если вы хотите самостоятельно произвести сборку из исходников, то в каталогах
C:\ADAPROJECTS\MINGW731\build\Debug и C:\ADAPROJECTS\MINGW731\build\Release
имеются файлы gcc-7.3.1.txt, содержащие команды сборки соответствующих типов.
Ну вот пока и всё! Наслаждайтесь жизнью в мире программирования
GNAT Community 2018 для Windows!!
Сергей Дюков
Адрес Skype