Ада: Мова, народжена з кризи.#
Чи замислювалися ви коли-небудь, як з’являються мови програмування? Деякі народжуються в гаражах ентузіастів, інші – як відповідь на конкретні потреби маленьких команд. Але історія мови Ада – це зовсім інша справа. Вона не була витвором одного розробника; її створення стало результатом безпрецедентного державного проєкту, ініційованого Міністерством оборони США.
Коли уряд каже: "Нам потрібна нова мова!"#
Ада – це чи не єдина мова, яку спроєктували системно, за планом, з чіткими вимогами, конкурсами та офіційним стандартом. Це разюче відрізняється від більшості мов, що еволюціонували з експериментів. Наприклад, Сі створив Деніс Рітчі для переписування UNIX, Python – Гвідо ван Россум для простих скриптів, а JavaScript Брендан Айх придумав буквально за десять днів для браузера. Ада ж, разом із COBOL чи ALGOL, належить до того типу історій, де спочатку є специфікація, а не код.
Саме тому історія Ади така особлива. Її створили до того, як вона почала використовуватись. Це результат великого державного проєкту з чіткими вимогами, перевірками й навіть конкурсами.
Криза програмного забезпечення та її наслідки#
Все почалося з так званої «кризи програмного забезпечення», яка особливо гостро відчувалася у збройних силах США. Уявити тільки: до 1973 року Міністерство оборони витрачало майже половину свого комп'ютерного бюджету – колосальні 7,5 мільярда доларів – на розробку та підтримку програм.
Головна проблема полягала в повному хаосі мов програмування, особливо у так званих "вбудованих комп'ютерних системах" – тих, що є невід'ємною частиною зброї, літаків, кораблів. На початку 70-х у військових системах використовувалося близько 450 мов високого рівня. Багато з них створювалися для одного конкретного завдання, бо жодна існуюча мова не підходила для специфічних потреб, як-от керування в реальному часі.
Це був справжній кошмар для підтримки. Кожен вид збройних сил мав свої улюблені мови, які були несумісні з мовами інших. Програму, написану для Повітряних сил, доводилося повністю переписувати для Армії чи Флоту. Підполковник Вільям Вітакер, голова робочої групи, пам'ятав, як одну програму довелося переписувати п'ять разів через заміну комп'ютерів. Несумісність означала значні витрати на розробку окремих компіляторів, навчання програмістів для роботи з різними мовами та підтримку програмного коду, термін служби якого міг сягати 20 років. Ось чому їм потрібна була єдина, уніфікована мова.
Народження HOLWG та шлях до Steelman#
У січні 1975 року Пентагон створив Робочу групу з мов високого порядку, скорочено HOLWG (High Order Language Working Group), щоб навести лад у цьому "лінгвістичному хаосі". До вирішення проблеми підійшли з розмахом. Процес створення нового стандарту був безпрецедентним.
Почали з формулювання вимог. Замість того, щоб просто обрати мову, HOLWG залучила широке коло користувачів та експертів. Протягом трьох років вони розробили кілька версій документів з вимогами, які мали кодові назви: Strawman, Woodenman, Tinman, Ironman та фінальний стандарт – Steelman. Кожна версія уточнювалася на основі відгуків понад 80 команд рецензентів. Назва "Strawman" (Страшило) символізувала первинний, можливо, недосконалий варіант, який мав викликати багато обговорень і критики, щоб потім на його основі побудувати щось міцніше.
Після того, як список вимог значно розширився, стало зрозуміло, що жодна з існуючих мов, навіть така як Фортран або Кобол, не могла задовольнити більше 75% специфікацій. Це й привело до рішення створити абсолютно нову мову.
Міжнародний конкурс та перемога "Зеленої" команди#
У 1977 році було оголошено міжнародний конкурс на розробку нової мови. Більшість пропозицій базувалися на мові Паскаль через значний вплив концепції структурованого програмування. До фіналу вийшли дві команди: "Зелена" (Cii Honeywell Bull) та "Червона" (Intermetrics).
У травні 1979 року перемогла "Зелена" команда на чолі з Жаном Ішбіа. Нову мову назвали Ада на честь Огасти Ади, графині Лавлейс, яку часто вважають першою програмісткою у світі.
Загальні критерії дизайну: документ Steelman (Червень 1978)#
Документ Steelman містив розділ 1, присвячений Загальним критеріям дизайну (General Design Criteria), які визначали основні цілі, що вплинули на вибір більш конкретних технічних вимог. Ці критерії забезпечували основу для прийняття рішень щодо дизайну мови програмування, призначеної для вбудованих комп'ютерних систем Міністерства оборони США, включаючи командування і управління, зв'язок, авіоніку та системи озброєння.
Ось вісім ключових критеріїв, що лягли в основу дизайну Ади:
Універсальність (Generality): Мова мала забезпечувати універсальність лише в тій мірі, яка необхідна для задоволення потреб вбудованих комп'ютерних систем. Це включало керування в реальному часі, самодіагностику, ввід-вивід до нестандартних периферійних пристроїв, паралельну обробку, числові обчислення та обробку файлів.
Надійність (Reliability): Пріоритет номер один. Мова повинна була сприяти проєктуванню та розробці надійних програм, уникати схильних до помилок функцій та максимізувати автоматичне виявлення помилок програмування.
Зручність супроводу (Maintainability): Мова повинна була сприяти легкості супроводу програм, надаючи перевагу читабельності програм (ясності, зрозумілості та можливості модифікації) над легкістю написання.
Ефективність (Efficiency): Дизайн мови повинен був сприяти виробництву ефективних об'єктних програм. Конструкції, які мали несподівано дорогі реалізації, повинні були бути легко розпізнані.
Простота (Simplicity): Мова не повинна була містити непотрібної складності. Вона мала бути якомога меншою, відповідно до потреб цільових додатків, з мінімумом спеціальних випадків та узгодженою семантичною структурою.
Можливість реалізації (Implementability): Мова повинна була складатися з функцій, які є зрозумілими та можуть бути реалізовані. Семантика кожної функції повинна була бути достатньо добре специфікована.
Машинна незалежність (Machine Independence): Дизайн мови повинен був прагнути до машинної незалежності, не диктуючи характеристики об'єктних машин або операційних систем, окрім необхідного.
Повне визначення (Complete Definition): Мова повинна була бути повністю та недвозначно визначена. Формальне визначення було важливим для досягнення всіх цих цілей.
Спадщина, що пройшла випробування часом#
Ці вимоги були дуже амбітними і далекоглядними. Що найцікавіше – ці критерії пройшли випробування часом. Навіть в останній версії стандарту Ада, яка вийшла кілька років тому, ми бачимо ті ж самі, або дуже схожі вимоги. Це доводить, наскільки далекоглядним був той початковий дизайн.
Це справді вражає. Виходить, те, що починалося як відповідь на кризу програмного забезпечення в 70-х, заклало основи для мови, яка й сьогодні залишається актуальною і відповідає найвищим стандартам надійності та ефективності. Історія Ади – це не просто історія мови, це історія системного підходу до інженерії програмного забезпечення.