Часть третья
В первой части статьи про язык программирования Ада мы поговорили об особенностях собственно языка. Вторая часть была исторической - я рассказал вам об истории создания языка и о женщине, в честь которой он был назван. В третьей части мы поговорим о практике - то есть об инструментах, призванных, так сказать, "сделать сказку былью", а точнее - код на языке Ада исполняемым кодом процессора.
И в самом деле, каким бы хорошим язык не был, если у него нет компилятора или интерпретатора, он так и остаётся умозрительной теорией, призванной в этот мир из закоулков разума исключительно для того, чтобы удовлетворить любопытство и/или самолюбие учёных мужей, его создавших. Потому что такие языки никогда не создаются практиками - практик создаёт язык, одновременно создавая и компилятор для него (или интерпретатор, но поскольку речь в дальнейшем будет идти об Аде, а Ада - язык компилируемый, то слово "интерпретатор" будет опускаться). Однако поскольку Ада создавалась как язык для довольно-таки практических целей, первый компилятор появился вскоре после утверждения первого же стандарта.
Первые версии компилятора были не слишком удачными. Как сказано в одной из официальных хроник этого языка, эти версии компилятора, скорее, "доказывали теорему существования Ада-транслятора, соответствующего стандарту", чем были реально работающими инструментами. Но с тех пор прошло немало времени, и сегодняшние компиляторы уже мало напоминают тех неуклюжих, хотя и старательных работяг. Фактически, большая их часть, если верить заверениям разработчиков, имеют гораздо большую производительность, чем компиляторы C/C++ (хотя я вовсе не сторонник таких сравнений, особенно если сравниваются настолько разные языки).
Честно говоря, Аду нельзя назвать массовым языком программирования во многом из-за стоимости трансляторов языка. Впрочем, сказать точно, где здесь причина, а где следствие, нельзя. Стоимость инструментов для основной сферы применения Ады, встраиваемых систем, варьируется от нескольких тысяч до нескольких сотен тысяч долларов - естественно, всё зависит от количества программистов, работающих с компилятором. Правда, за эти деньги покупатель получает действительно замечательно отлаженный инструмент, очень надёжный и качественный. На самом деле, для такого языка, как Ада, такое положение вещей вполне приемлемо. Однако сейчас в мире наступила эпоха популярности свободного программного обеспечения, и Аду это тоже не минуло. Поэтому для Ады существует и бесплатный транслятор - GNAT, GNU Ada Translator.
Официальный сайт GNAT - www.adacore.com. Есть две версии GNAT - GNAT GPL и GNAT PRO. GPL-версия даёт право разрабатывать только бесплатное программное обеспечение, имеющее при этом ещё и открытый исходный код. А версия PRO даёт право уже и на коммерческое использование самой себя. Правда, при этом за её использование нужно платить. Деньгами. Цены на коммерческую версию можно найти на указанном выше сайте. Честно говоря, сам я точную цену не узнавал, потому что для моих нужд коммерческая версия пока не требуется, но хочу отметить, что ценовая политика довольно гибкая, поэтому можно с большой вероятностью найти устраивающее именно вас соотношение цены и функциональности.
GNAT - это компилятор Ады-95 для множества самых разных платформ. Впрочем, как это всегда бывает в нашем несовершенном мире, стандарт стандартом, а компилятор умеет больше, потому что разработчики включили в него частичную поддержку более нового стандарта Ада-2005. Думаю, в скором времени этот стандарт будет поддерживаться уже полностью.
Как я сказал, GNAT кросс-платформенен. Причём под словом "платформа" нужно понимать не только операционную систему, но и аппаратную часть, то есть процессорную архитектуру. GNAT имеет гораздо лучшую кросс-платформенность, чем даже GNU Compiler Collection (GCC), на коде которой он частично основан. Система GNAT позволяет вести разработку приложений для встраиваемых систем. Но можно разрабатывать и программы для "полноценных" платформ (например, той же PC - для самых разных операционных систем). Тем, кто желает изучить компилятор под одной из знакомых операционных систем, рад буду сообщить, что есть версия и для Windows, и для Linux - полагаю, большинство заинтересовавшихся будет развлекаться с компилятором именно под одной из этих систем.
Производительность GNAT аналогична производительности других компиляторов от GNU (того же GNU C/C++, к примеру). Кого интересует сравнение производительности разных компиляторов, могу посоветовать поискать результаты тестирования на сайте rsdn.ru, поскольку сам я не сторонник таких методов проверки компиляторов. Что касается скорости компиляции, то GNAT GPL собирал сам себя из исходных текстов, коих тогда было около 40 мегабайт, за двадцать семь минут на машине с 256 Мб оперативной памяти и с процессором Athlon с тактовой частотой 1800 МГц. Кстати, обратите внимание, что компилятор GNAT, несмотря на свою наполовину коммерческую природу, поставляется вместе с исходными текстами. Фактически, деньги, которые вы платите разработчикам, - это деньги на техническую поддержку.
GNAT рекомендован рядом компетентных организаций как средство для разработки отказоустойчивых систем. Впрочем, о том, что надёжность - не только главный "конёк" Ады, но и сама основа её идеологии, я уже говорил в первой части статьи. GNAT идеально вписывается в эту концепцию и служит инструментом её практической реализации.
Кстати, коммерческая версия GNAT PRO включает в себя не только компилятор. Имеется полноценная интегрированная среда разработки (есть и бесплатная версия, только она урезана и более старая), отладчик с графическим интерфейсом. В оба варианта компилятора (и PRO, и GPL) включено довольно большое количество примеров и, конечно же, стандартная runtime-библиотека Ады.
Однако GNAT - не единственный существующий сегодня компилятор Ады, доступный, так сказать, простым смертным. Второй из компиляторов, о котором я хочу сегодня рассказать, называется ObjectAda, а занимается его разработкой компания Aonix. В интернете ObjectAda можно найти, если воспользоваться следующей ссылкой: www.aonix.com/objectada.html.
Компилятор от Aonix коммерческий "от кончиков пальцев до кончиков волос". Правда, стоит он на общем фоне совсем недорого, от 600 евро. За эти деньги компания-производитель предлагает, впрочем, продукт с закрытым исходным кодом и ограниченную техническую поддержку. Ориентирована эта разработка тоже на системы, где безопасность и надёжность являются критическими факторами. Однако при этом если рассматривать разработку под платформу PC, то здесь у ObjectAda преимущества перед GNAT. Поскольку вместе с ObjectAda Aonix предлагает библиотеки для работы с такими технологиями, как ActiveX и COM под Windows, POSIX API для всех UNIX-подобных платформ. Причём для архитектуры процессора Intel x86 имеется специально оптимизированная под неё версия компилятора, которая имеется в вариантах под Windows и Linux. Есть лишь одно НО: ObjectAda - компилятор Ада-95, и перехода на Ада-2005 пока разработчики не планируют. Это не хорошо и не плохо, просто это очень важный фактор, который необходимо учитывать обязательно при выборе GNAT или ObjectAda.
ObjectAda также позволяет проводить разработку для встраиваемых систем. Список специализированных решений для данного класса проектов, который можно найти на сайте Aonix, не так уж и мал. Компилятор прошёл тщательное тестирование и имеет сертификаты, подтверждающие возможность его использования для разработки отказоустойчивых проектов.
Однако Aonix нужно сказать спасибо не только за качественный компилятор. Собственно, насколько он качественен, можно судить только со слов самой компании, а также по отзывам пользователей, по полученным этим программным продуктом сертификатам и по разработанным с его помощью проектам. К сожалению, скачать с сайта Aonix пробную версию компилятора не удастся. Впрочем, в этом нет ничего странного, это обычная практика для разработчиков серьёзных программных продуктов. Но ведь не за это я хочу сказать Aonix спасибо, не так ли? За что же?
А за то, что эта фирма создала замечательное средство, позволяющее разрабатывать программы на Аде с помощью великолепной свободной среды разработки Eclipse. И при этом можно использовать не только честно купленный транслятор ObjectAda, но и бесплатный GNAT GPL. А можно и GNAT PRO, конечно же. Eclipse, как известно, среда кросс-платформенная, поэтому можно будет даже использовать компилятор именно под той платформой, для которой ведётся разработка. Ну, а если нет, то есть такое замечательное средство, как кросс-компиляция (компиляция программ для одной платформы из-под другой).
Впрочем, для тех, кто всё же решится купить у Aonix их компилятор Ады, фирма готова предложить полностью заточенную под Аду среду разработки на основе всё того же Eclipse. Посмотреть воочию на это IDE тоже нельзя, к сожалению, но приблизительное представление о нём можно составить и по плагину для Eclipse, который Aonix выложила для свободного скачивания на своём сайте.
Конечно, GNAT и ObjectAda - не единственные инструменты, которые пригодятся при разработке программ на Аде. Однако эти системы включают в себя самые важные для программиста инструменты - компиляторы, среды разработки, отладчики и профилировщики. Эти современные средства позволяют использовать и современные технологии моделирования, и это опровергает ещё один миф об Аде. Ада не устарела. Этот миф происходит (как и другие, впрочем, мифы) от невежества человеческого. И не нужно ему верить. Ведь люди, работающие в сфере информационных технологий, должны лучше других понимать, что ценность информации увеличивается со степенью её достоверности. Мифы - информация недостоверная. Давайте будем верить фактам, которые говорят, что Ада жива и умирать пока не собирается.
Вадим СТАНКЕВИЧ
![Версия для печати Версия для печати](https://www.kv.by/sites/all/modules/print/icons/print_icon.png)
Комментарии
Страницы
>>И я не стану. Но в какие др. языки встроено рандеву?
рандеву? это сленг такой? параллеьные вычисления? а так ли уж хорошо они в аде реализованы? я так и не нашел ответа - в чем преимущество.
>>Ключ - АНАЛОГИЧНЫХ. Обратное утверждение не верно, например, попробуйте на Аде выдернуть 5-ый бит порядка в числе с плавающей запятой.
вот и пример.
>>Может и не в 9, но ДО ОТЛАДКИ точно меньше
это следует из рекламы?
>>Си легко осваивается теми, кто писал на Асме и имеет представление об АЛУ. Иначе проще изучить Аду.
совершенно неважно. все дело в привычке. у меня и c++, и java, и object pascal (delphi), и sql и пр. не вызывает никаких проблем. после пары дней при переходе с языка на язык - все нормально.
не вижу связи между assembler и c/c++. как такое вообще могло померещиться?
>>Думаю, да. Мне порой приходится исправлять ошибки 2х-3х-годичной давности от сдачи юзерам; ошибки, которые бы на Аде точно не сделал.
какие ошибки? типа в char[20] затолкал char[30], а потом это вылезло в совершенно непредсказуемом месте? гы.
хотелось бы услышать от спецов, как именно не так реализованы в аде параллельные вычисленияч и защита от ошибок. примеры в студию. без этого разговор будет опять ни о чем.
:) Как сказал бы ослик, "Ийя, ийя, и я того же мнения!"
>рандеву? это сленг такой? параллеьные вычисления?
Это способ взаимодействия вычислений, как параллельных, так и нет. Слэнг ли? Да хоть горшком обзови, но в Си/Си++ такого нет. Нечто похожее на Си++ я делаю событийной рекурсией. К сожалению, Вадим Станкевич доходчиво о рандеву не рассказал; видимо, ему решили, что и так хватит.
>это [меньшее кол-во ошибок до отладки] следует из рекламы?
Это моё убеждение. С Адой и Си я знакомился одновременно ещё на СМ1800.
>Все дело в привычке.
Да, привычка - великое дело.
>у меня и c++, и java, и object pascal (delphi), и sql и пр. не вызывает никаких проблем. ПОСЛЕ ПАРЫ ДНЕЙ при переходе с языка на язык - все нормально.
Завидую. Для меня ПАРА ДНЕЙ - роскошь.
>не вижу связи между assembler и c/c++
А я вижу, но это отдельный разговор.
>типа в char[20] затолкал char[30], а потом это вылезло в совершенно непредсказуемом месте?
:) Бывало и такое.
>примеры в студию.
Лучше в газету. 2Станкевич: "Просим, просим!". Я серьёзно.
тогда зачем говорить "Кстати, думаю, вряд ли америкосская система ПРО юзает уеб-технологии."?
>>но в Си/Си++ такого нет
как нет? а потоки заюзать? а разные ящики заюзать? нельзя? гы.
типа в аде уже все просто так есть. гы. многопоточная ада for DOS? гы.
всякая реализация зависит от той же ОС и других прибамбасов.
>>Это моё убеждение.
вера?
>>С Адой и Си я знакомился одновременно ещё на СМ1800.
что ж такое вы делали на том славном агрегате? две параллельно выполняющиеся задачи в 64Кбайт? гы. или ящиков было много?
>>А я вижу, но это отдельный разговор.
очень похожий синтаксис? гы.
>>:) Бывало и такое.
это везде может привести к непредсказуемым последствиям. внимательнее надо быть.
>>Лучше в газету. 2Станкевич: "Просим, просим!". Я серьёзно.
подозреваю, что примеров серьезных не будет.
Поток это модуль, которому ОС выделяет время проца; рандеву тут непричём.
>а разные ящики заюзать?
Можно, евпатория, но так и делаю.
>многопоточная ада for DOS?
Ада позиционировалась под реальное время. При соотв. работе с прерываниями годилась и CP/M, предтеча DOS.
>или ящиков было много?
Нет, было много каналов приёма/передачи.
>очень похожий синтаксис [Асма и Си]?
Нет, но Си легко опустить до уровня Асма.
>внимательнее надо быть.
Спасибо, знаю, но этот чёртов телефон! И хрен отключишь - шеф сечёт, пашу ли.
>подозреваю, что примеров серьезных не будет.
Думаю, да. Я Аду подзабыл. А Вадиму вряд ли захочется зря распинаться.
Oпять СЕРЬЁЗНЫЙ... Подробнее, pls.
аде ОС ничего не выделяет, да? гы.
>>>а разные ящики заюзать?
>>Можно, евпатория, но так и делаю.
че?
>>>многопоточная ада for DOS?
>>Ада позиционировалась под реальное время. При соотв. работе с прерываниями годилась и CP/M, предтеча DOS.
гы. с прерываниями? гы-гы. пусть позиционируют дальше.
>>>или ящиков было много?
>>Нет, было много каналов приёма/передачи.
и что? камень и ящик один. помешались все на этих каналах. толку-то?
>>>очень похожий синтаксис [Асма и Си]?
>>Нет, но Си легко опустить до уровня Асма.
всунув в C asm? гы-гы-гы.
>>>внимательнее надо быть.
>>Спасибо, знаю, но этот чёртов телефон! И хрен отключишь - шеф сечёт, пашу ли.
причем здесь телефон к внимательности при написании кода? бред.
>>>подозреваю, что примеров серьезных не будет.
>>Думаю, да. Я Аду подзабыл. А Вадиму вряд ли захочется зря распинаться.
он уже и так постарался - статьи написал. молодец. только после статей всякую муть не надо рассказывать.
майк, прежде, чем что-то писать, надо хорошо подумать. слово - не воробей, вылетит - не поймаешь.
http://www.kv.by/index2007224403.htm
Cobol, ColdFusion, PowerBuilder, NetWare, OS/2...
майк, как насчет Optima++, Power++? гы. слыхали о таком? программили?
Страницы