Ада — особо хороший язык программирования
Все языки программирования делятся на две группы:
1. со «статическими» (или «сильными») типами;
2. с «динамическими» (или «слабыми») типами.
Обе группы языков имеют свои достоинства и недостатки. Главный тезис этой статьи: «Ада — лучший из языков со статическими типами».
Преимущества языков со статическими типами (а значит, автоматически преимущества Ады, поскольку Ада относится к языкам со статическими типами):
1. более высокая скорость выполнения программы во много (зачастую в сотни) раз (кстати, во столько же раз уменьшается расход электричества на бесполезный нагрев процессора);
2. возможность (полностью реализованная в Аде) более надежного контроля «глупых» ошибок, вроде «перепутанных» числа и строковой переменной (последовательности символов).
Ада, в некотором смысле, — это язык с «самыми сильными» типами среди языков с сильными типами. Отсюда автоматически выводы:
1. Ада — один из самых быстрых языков программирования среди всех языков программирования. Программа реально может работать в сто раз быстрее по сравнению с динамическими языками программирования.
2. Ада напрочь отметает «глупые» ошибки с перепутанными типами данных. На этом мы остановимся ниже подробнее.
История Ады
История появления Ады заслуживает отдельного рассмотрения.
Пентагон (так называют американское министерство обороны, потому что они расположены в здании в форме пентагона) объявил конкурс на создание языка программирования для решения военных задач. Язык должен был обеспечивать высокую надежность программ, давать возможность разрабатывать большие сложные системы, быть высокоскоростным и «читаемым» для программистов (даже если текст программы был написан другим программистом), а также поддерживать эффективное использование многопроцессорных систем (в недавнее время получивших широкое распространение в виде многоядерных процессоров — заметьте, как разработчики смотрели в будущее!)
В конкурсе победил язык «Ада» (названный в честь женщины-математика 19-ого века Ады Лавлейс). К 1983 году была написана, так называемая, формальная спецификация Ады, ставшая известной как Ada83.
Ada83 не соответствовал требованиям к современному языку программирования. Поэтому на его основе были созданы Ada95 (1995 год), который уже можно назвать современным языком, а позднее Ada2005 и Ada2012 (понятно каких годов).
Ада получила широкое распространение в сферах, требующих повышенной надежности (военной промышленности, финансах, управлении инфраструктурой и т. п.), например, самолет F-16 сделан на Аде.
Список достоинств Ады
Список основных достоинств Ады:
1. Ада — один из самых быстрых языков программирования. Программа реально может работать в сто раз быстрее.
2. Ада напрочь отметает «глупые» ошибки с перепутанными типами данных.
3. Хорошая поддержка контроля даже против менее грубых ошибок. (Это дает в четыре раза меньше ошибок в программах на Аде). На этом мы остановимся подробнее ниже.
4. Модульная структура языка. Поддержка больших и сложных программ.
5. Очень хорошая поддержка современных многоядерных процессоров, а также суперкомпьютеров с более чем одним процессором.
6. «Мощный» современный язык программирования: объектно-ориентированное программирование, шаблоны, гибкое управление выделением динамической памяти и т. д. и т. п. (Не волнуйтесь, если не понимаете терминологию: это просто означает, что Ада — мощный современный язык).
7. Довольно-таки быстрая компиляция (программист меньше ждет, пока Ада создаст .exe файл и имеет больше свободного времени на программирование и поиск ошибок).
8. Поддержка всех видов устройств: компьютеры, встроенная электроника, космические корабли и т. д.
9. Язык таков, что его удобно не только писать, но и читать (если Вы — программист).
10. Есть бесплатная, но хорошая среда разработки (программы для программистов).
11. Есть международный стандарт.
12. Десятичные дроби позволяют работать, например, с финансовой информацией.
Надежность или скорость
Между требованием надежности и скорости есть естественное противоречие:
Чтобы программа работала с максимально возможной скоростью, надо отказаться от проверки правильности программы по ходу ее выполнения.
Например, есть список из 10-ти чисел. Если программа пытается изменить 12-ое число в этом списке — это бессмыслица. Если проверка не была осуществлена, эта программа запишет наше 12-ое число, выражаясь технической терминологией, «куда попало» и программа может даже испортить сама себя и начать делать что-то бессмысленное.
Поэтому, для обеспечения надежности программа должна делать проверки против таких бессмысленных действий. Но проверки требуют затрат процессорного времени.
Разрешение этого противоречия в Аде следующее: Есть два режима работы: с проверками и без проверок (точнее режимов больше, потому что есть возможность селективно включить некоторые виды проверок, а некоторые оставить выключенными). С проверками программа может работать в несколько раз медленнее, но с проверками во много раз реже бывает, что программа начинает делать полную бессмыслицу.
Часто проверки оставляют включенными при изначальной отладке (поиске и исправлении ошибок) программы и выключают, когда программа готова, чтобы увеличить скорость и уменьшить затраты электричества на нагрев процессора. Если вы закажете мне программирование на Аде, мы можем договориться, оставить ли проверки включенными после того, как я передаю вам готовую программу.
Кстати, Ада готова проверять не только самую выдающуюся бессмыслицу (типа 12-ого элемента в списке из 10-чисел или деление на ноль), но и менее грубые ошибки. Уникальная система «сильных» типов в Аде способна автоматически проверить, например, что месяц всегда в интервале 1..12 (а не 14-ый месяц, например). Эти проверки позволяют сделать программу намного надежней, чем программы на других языках программирования. Недавние версии Ады более того позволяют программисту делать вообще любые виды проверок, которые он пожелает сделать.
Мифы об Аде
Миф 1: Ада — «древний» язык программирования
На самом деле, этот миф истинен только для первой версии Ады, Ada83, разработанной в 1983 году.
А последняя версия спецификации Ады, Ada2012 — вполне недавний и современный язык программирования с такими современными чертами, как объектно-ориентированное программирование и шаблонные типы.
Я бы сказал, что Ада даже «более современный» язык, чем другие современные языки программирования.
Миф 2: Ада только для больших систем
Да, Ада была разработана в первую очередь для больших систем, таких, как сложные оборонные проекты Пентагона.
Но эти «большие» возможности полезны и для менее сложных систем. Они делают программирование в целом более удобным и более надежным даже для не таких уж больших программ. Они уменьшают время на отладку (поиск ошибок) и, таким образом, уменьшают общее время разработки. Это значит, что я делаю ту же работу за меньшее время.
Миф 3: Ада — это для электроники
Действительно, Ада — хороший язык программирования для «встроенных» систем (электроники), но она так же хороша для обычных персональных компьютеров. Она просто универсальна.
Миф 4: Ада требует дорогих технологий
На самом деле, есть бесплатный компилятор Ады (GNAT) для большинства современных операционных систем. Он идет со всем программным обеспечением для программиста-профессионала.
Я работаю в первую очередь с Линуксом. И конечно, есть GNAT для Линукс.
Недостатки Ады
Возможно, было бы несправедливо говорить только о достоинствах и не упомянуть недостатки.
Ада имеет следующие недостатки:
1. Ада — мощный профессиональный инструмент, а потому, чтобы им умело пользоваться, нужен высококвалифицированный специалист (вроде меня!)
2. К сожалению, Ада не стала высокопопулярным языком. Как следствие, «компоненты» (готовые фрагменты программ) для многих задач отсутствуют. Например, нет действительно хороших компонентов для разработки Web-сайтов на Аде.
3. Программа на Аде может получиться несколько длиннее, чем на других языках программирования; поэтому то, что помещается на одну страницу текста, скажем на Пайтоне (кстати, программированием на Пайтоне я тоже занимаюсь), может не поместиться на одну страницу на Аде.
4. Есть и еще некоторые недостатки (о которых я не буду говорить подробно, поскольку такой разговор требует специальной терминологии), но они могут показаться достоинствами на фоне недостатков других языков программирования.
Автор статьи:
Программирование и Линукс
Вид деятельности: Программисты