Главная

Статьи

Мова Ада - двадцять років потому

  1. Коли вітчизняного ІТ-фахівця: «Що таке Ада?», Більшість лише здивовано потисне плечима, а хтось навіть...
  2. Що таке Ада
  3. Чому Ада?
  4. Ада і Сі
  5. Ада і Java
  6. «Пекельні» міфи
  7. Безкоштовний сир і як уникнути мишоловки
  8. висновок
  9. література
  10. Корисні джерела
Коли вітчизняного ІТ-фахівця: «Що таке Ада?», Більшість лише здивовано потисне плечима, а хтось навіть скаже, що це мертва мова, колись придуманий Пентагоном, а нині практично не використовується. Насправді ж Ада і сьогодні - цілком благополучний і активно застосовується в різних областях мову програмування. Правда, більшість російських програмістів знають про нього мало.

Напевно, кожен, кому доводилося користуватися чотирнадцятої лінією паризького метрополітену, дивувався, вперше побачивши потяг, в якому немає кабіни машиніста. Рух поїздів на цій лінії повністю управляється Ада-програмою.

Незважаючи ні на що, в окремих областях техніки Росія все ще «попереду планети всієї». І одна з них - конструювання та виробництво літаків-амфібій. Всесвітньо визнаним лідером в цій області є ТАНТК ім. Г.М. Бериева. Нещодавно це підприємство було придбано кошти розробки бортового програмного забезпечення на базі мови Ада для використання при модернізації своєї останньої моделі Бе-200.

Тим часом, більшість вітчизняних ІТ-фахівців в кращому випадку нічого не знають про мову Ада, в гіршому ж - мають абсолютно невірне уявлення про Аді як про мову-монстра, колись придуманому Пентагоном для розробки військових систем, а нині остаточно забутому.

Трішки історії

Офіційним днем ​​народження мови програмування Ада вважати 17 лютого 1983 року - дату затвердження стандарту ANSI / MIL-STD-1815 A-1983.

Технічні та адміністративні заходи, вжиті Міноборони як частина проекту зі створення та впровадження Ади, повністю запобігли появі і поширення діалектів мови. З 1983 року і по теперішній час всі індустріальні реалізації підтримують діючий стандарт Ади. Коли ж мова заходить про подмножествах Ади, то ці підмножини визначаються не реалізацією, а стандартами розробки конкретного класу систем.

У 1987 році стандарт ANSI без єдиного зміни було затверджено в якості стандарту ISO (ISO / IEC 8652), а коли на початку 90-х років назріла необхідність перегляду стандарту, робота з перегляду також була проведена під керівництвом і кошти Міністерства оборони США. Стартував новий міжнародний проект, який завершився затвердженням в кінці 1994-го і публікацією на початку 1995 року нової версії стандарту ISO / IEC 8652. Саме цей документ і є сьогодні визначенням мови програмування Ада.

В СРСР на початку 80-х років була створена Робоча група з мови програмування Ада при Державному комітеті з науки і техніки. Ретельно збиралася і аналізувалася вся відкрита інформація про проект, а зусиллями спеціальних служб добувалася і закрита інформація. Були організовані проекти з реалізації Ади для практично всіх які використовувалися тоді архітектур ЕОМ, і деякі з них виявилися вельми успішними. Розпад СРСР поклав край цій діяльності. Сьогодні Ада використовується в Росії і СНД окремими ентузіастами.

Що таке Ада

Всі сучасні індустріальні мови надають власне і той же базовий набір можливостей, розрізняючи не тим, що вони дозволяють робити, а тим, як саме вони дозволяють це робити. Однак Ада, по крайней мере, в двох аспектах розширює стандартний для сучасних мов опцій. По-перше, Ада надає високорівневі засоби програмування асинхронних процесів. По-друге, є єдиною мовою, який без будь-яких застережень можна назвати модульним.

Приклад такої просто необхідний для того, щоб спростувати досить поширений міф про те, що Ада - великий, складний і «важкий» мову, придатний лише для написання надвеликих і надскладних систем. Насправді ж, Ада може застосовуватися для розробки невеликих і середніх програм з тим же успіхом, як і сучасні клони Сі, Паскаля, Бейсік і Java. Так, класичний приклад програми «Hello, World!» Виглядає на Аді наступним чином:

Легко бачити, що код на Аді нагадує код на Паскалі, який був обраний в якості його прототипу. Перший рядок описує зв'язок даного компилируемого модуля з іншими модулями - вказується, що підпрограма Hello_World повинна компілюватися спільно з модулем Ada.Text_IO, який є компонентом визначеною бібліотеки.

Наступна програма визначає два асинхронних процесу [1]:

У розділі локальних оголошень процедури Tasking_Example описується завдання Outputter (рядок 6, рядки з 8 по 17 містять тіло це завдання). Коли управління в процесі, відповідному процедурі Tasking_Example, доходить до рядка 20, перед тим, як виконати цей перший оператор, запускається процес, відповідний завданню Outputter, після чого два цих процесу живуть і асинхронно виконуються незалежно один від одного. Виконання оператора затримки (рядки 14 і 20) складається в припиненні відповідного процесу на вказану кількість секунд. Таким чином, процес Tasking_Example припиняється на 20 секунд, а в цей час процес Outputter починає друкувати значення зростаючого на одиницю лічильника, припиняючи однією секунду після виведення кожного значення. Після закінчення 20 секунд процес Tasking_Example встановлює прапор Finished в положення «істина», в результаті завершується цикл в процесі Outputter. Специфікація змінної Finished як атомарної об'єкта даних (рядок 4) унеможливлює одночасне читання і зміна значення цієї змінної.

Далі представлений шаблон функції, що дозволяє покомпонентно складати два одновимірних масиву. Цей шаблон може бути налаштований на довільний тип, який є одновимірним масивом, для компонентів якого визначені операції присвоювання і складання ( «складання» не повинно бути арифметичним складанням).

Рядки 1-6 містять оголошення настраиваемой функції, а рядки 8-20 - її тіло. Змістовно, параметром настройки є довільний одновимірний регулярний тип з неуточненими індексним діапазоном (рядок 4), про якого відомо лише, що тип компонента у нього довільний, проте для компонентів визначена операція присвоювання (рядок 2), тип індексу - довільний дискретний (рядок 4) . Оскільки ми маємо покомпонентно складати два масиви, треба знати, що таке операція складання для типу компонентів. Так як це довільний тип, ми змушені передавати складання для типу компонента як формальний параметр настройки (рядок 5).

У тілі функції ми відразу ж перевіряємо, чи збігаються довжини операндів (рядок 12), інакше покомпонентное складання втрачає сенс. Збіг довжин операндів не гарантує збіг індексних діапазонів, тому в циклі по індексному діапазону першого аргументу (рядок 15) слід кожен раз обчислювати індекс відповідного компонента другого аргументу. Ми не можемо зробити це для типу Index, оскільки знаємо про нього тільки, що він дискретний, тому переходимо від значення дискретного типу до його порядковому номеру (атрибут? Pos), обчислюємо необхідний зрушення для порядкового номера та повертаємося до відповідного значенням типу Index ( атрибут? Val).

Зауважимо, що параметри (настроюється) функції «+» Left і Right оголошено як мають тип Arr, індексний діапазон якого уточнено. Однак Left і Right - це формальні параметри, на місце яких за виклик (результату конкретизації) функції «+» будуть поставлено конкретні масиви з відомими індексними діапазонами. Ми ж в тілі функції «+» користуємося атрибутами масивів (? Range,? First,? Length), щоб з об'єкта отримати інформацію про його індексному діапазоні.

Чому Ада?

Вибір мови для програмного проекту раніше був чисто технічним питанням. Сьогодні це стало питанням стратегічної важливості, мають далекосяжні наслідки для успіху проекту. Перерахуємо деякі причини, завдяки яким мова Ада був обраний для реалізації програмних проектів різними компаніями, або зроблено обов'язковим для використання в рамках тендерів.

  • Бажання підвищити надійність розроблюваної системи, так як програмні дефекти можуть мати серйозні наслідки для здоров'я людей, економіки, екології тощо (Ада має убудовані засоби забезпечення надійності).
  • Бажання знизити вартість розробки і супроводу системи.
  • Наявність міжнародних стандартів і наявність компіляторів мови практично для будь-якої платформи.
  • Переваги дисциплінованого підходу до розробки програмного забезпечення, які стають особливо істотними в міру збільшення обсягу і складності програмного забезпечення.
Ада і Сі

При проведенні порівняльних аналізів популярних мов переламано стільки копій, що сьогодні цю тему часто відносять до розряду «релігійних воєн». Тому обмежимося лише посиланням на відому статтю [2], в якій робиться ряд красномовних висновків.

  1. Розробка програм на мові Ада обходиться на 60% дешевше аналогічних програмних проектів, що реалізуються на Сі.
  2. Програма на мові Ада має в 9 разів менше дефектів, ніж програма на Сі; програма на Сі ++ має ще нижчі, ніж програма Сі, характеристики.
  3. краще Сі як для досвідчених, так і для недосвідчених програмістів, а також для програмістів, що мають як максимальний, так і мінімальний рейтинг у своїй групі.
  4. Трудомісткість вивчення мови Ада не вище трудомісткості вивчення Сі.
  5. Програми на Аді надійніші, ніж програми на Сі.

В якості ілюстрації цих висновків, наведемо приклад розробки бортового програмного забезпечення літака C-130J відповідно до вимог Рівня А стандарту DO-178B [3]. При цьому констатувалося якість коду, в 10 разів перевищує середню для програмного забезпечення Рівня А. Продуктивність праці зросла вчетверо щодо порівняних програмних проектів.

Ада і Java

У Microsoft були змушені включити в ліцензійні угоди для своїх операційних систем наступний пункт ( www.microsoft.com/msdownload/ieplatform/ie/ license.txt ): «Зауваження щодо підтримки мови Java ... Технологія Java не є стійкою до збоїв і призначена ... для використання в рамках керуючих систем реального часу ..., в яких збій мови Java може спричинити за собою смерть, каліцтво, або великої шкоди інфраструктурі або навколишньому середовищу. Компанія Sun Microsystems, Inc. зобов'язала компанію Microsoft розмістити дане попередження ».

Зазначимо на статті [4] і [5], що демонструють переваги мови Ада над Java.

«Пекельні» міфи

Досить часто з Адою пов'язують набір стійких помилок, що перешкоджають як поширенню мови, так і свідомого вибору Ади в якості мови реалізації проекту.

Ада - мертва мова, на ньому нині не програмує. Насправді, Ада впевнено займає нішу великих вбудованих систем з підвищеними вимогами до надійності. У порівнянні з «коробковими» продуктами для Windows, такі системи не так помітні, оскільки або перебувають в одному екземплярі (який сенс тиражувати програму, що управляє рухом поїздів метро), або поширюються як частина системи, в якому вони вмонтовані (бортове програмне забезпечення).

Ада - мова, призначена виключно для військових застосувань. Ада дійсно була розроблена за участю Міністерства оборони США, проте відсутні будь-які технічні, адміністративні або інші причини, що перешкоджають використанню Ади для розробки цивільних систем. Кількість «цивільних» проектів, заснованих на цій мові, сьогодні можна порівняти з кількістю «військових» проектів.

Ада - занадто великий і складний мову, для того щоб використовувати його в невеликому проекті. Обсяг і складність всіх сучасних індустріальних мов практично однакові, і щоб переконатися в цьому, досить просто порівняти обсяг їх описів. Цей міф сягає початку 80-х років, коли Аду зіставляли з Паскалем, Фортраном 77 або Бейсиком.

Програмістів, які знають Аду, мало, вивчення мови з нуля вимагає надмірних зусиль і часу. Насправді ж, справжню труднощі представляє пошук фахівців, які розуміють специфіку вбудованих систем і здатних створювати якісні програми для них. Так, наприклад, компанія BAE, один з активних користувачів мови Ада, не вимагає від кандидатів знання цієї мови; замість цього шукаються люди, знайомі з вбудованими системами і процесами створення програмного забезпечення індустріального якості. Після найму таких людей потрібно два тижні для навчання їх мови Ада.

Наш особистий досвід показує, що програмістам, знайомим з тією чи іншою різновидом Паскаля, потрібно всього кілька днів, щоб почати розробляти нескладні програми на Аді.

Існуючі Ада-технології неефективні; і транслятори, і породжуваний ними код, відрізняються низькою продуктивністю. Цей міф також сходить до першої половини 80-х років, коли з'явилися перші реалізації Ади, фактично всього лише доводили «теорему існування Ада-транслятора, що відповідає стандарту». Досить провести ряд нескладних експериментів, запрограмувавши деяку модельну задачку на Аді, Паскалі і Сі / Сі ++, і порівнявши (при порівнянних параметрах компіляторів) потім швидкість компіляції, обсяг породжуваного коду і його виконання, щоб переконатися, що будь-якої специфічної неефективності , властивої Аді, просто не існує. Можна також відзначити, що система програмування GNAT при обсязі вихідних текстів більш 40 Мбайт, на 90% реалізована на Аді, і побудова її з вихідних текстів (в його ході вона тричі сама себе компілює) на сучасному ПК займає не більше півгодини.

Існуючі реалізації Ади вкрай дороги. Це вірно, однак слід мати на увазі, що є публічно доступна версія системи програмування GNAT, яка безкоштовно і на абсолютно законних підставах може бути взята з програмного сховища Нью-йоркського університету ( ftp://cs.nyu.edu/pub/gnat ) Разом з вихідними текстами

Безкоштовний сир і як уникнути мишоловки

GNAT (GNu Ada Translator) - многоплатформная реалізація мови Ада, існуюча на всіх сучасних індустріальних платформах і підтримує генерацію коду для популярних вбудованих архітектур. GNAT ( www.gnat.com ) Повністю реалізує стандарт Ади, включаючи ті бібліотеки, які стандартом класифікуються як необов'язкові. Крім власне Ада-транслятора, GNAT включає інструментарій, в якому слід зазначити розвинену інтегровану середу розробника і багатомовний графічний відладчик, що дозволяє, в тому числі, досліджувати поведінку програм з асинхронними процесами. Транслятор і супутні інструменти можна використовувати як окремо, викликаючи їх з командного рядка, так і в рамках інтегрованої графічної середовища розробки Ада-програм. Всі компоненти GNAT, включаючи середовище розробки, мають один і той же інтерфейс на всіх платформах. Крім повної реалізації описуваних стандартом коштів GNAT пропонує багатий набір допускаються стандартом розширень. GNAT - реалізація Ади в багатомовному системі програмування gcc, що складається з набору компіляторів переднього плану для різних вхідних мов при загальному генераторі коду, що істотно спрощує розробку програм, що містять компоненти, реалізовані на різних мовах програмування.

GNAT з самого початку розроблявся і поширювався під ліцензією GPL. На жаль, з GPL також пов'язано безліч міфів. Так, багато хто вважає, що програми під GPL розробляються неорганізованими групами ентузіастів, поширюються абсолютно безкоштовно; в результаті і надійність, і функціональність таких програм залишають бажати кращого, не дозволяють використовувати їх в будь-яких серйозних проектах. Що стосується GNAT це далеко не так. Для того щоб переконатися в цьому, досить переглянути список компаній, які уклали з його розробниками контракти на технічну підтримку: Boeing, British Aerospace, Lockheed, Ericsson, SAAB, Avionics і ін.

Вільне надання демонстраційних версій - звичайна практика багатьох розробників програмного забезпечення. GNAT відрізняється тим, що знаходиться у вільному доступі публічна версія є абсолютно повною версією технології, без будь-яких юридичних чи технічних обмежень на її використання. Ряд серйозних проектів був успішно реалізований саме на базі публічних версій GNAT. Програмне забезпечення апарату, що спускається Beagle 2 європейської автоматичної станції Mars Express, який спрямовується в цей момент до Марсу ( www.beagle2.com/index.htm ), Автоматизована станція документальної зв'язку Міністерства оборони РФ ( www.ada-ru.org/prj_doc.html ). Єдиним недоліком публічних версій є те, що розробник не надає для них технічної підтримки.

висновок

Підводячи підсумок, можна сказати, що мова Ада надає розробникам ідеальне поєднання цілісності, послідовності, надійності і ефективності. Мова підтримує творче творчість і новаторство, забезпечуючи в той же час дисципліну і індустріальний рівень розробки програмного забезпечення, необхідні для реалізації програмних систем великої ваги.

література
  1. Benjamin Brosgol, Introduction to Ada 95. www.embedded.com/story/OEG20021211S0034
  2. Stephen Zeigler, Comparing Development Costs of C and Ada. www.adaic.com/whyada/ada-vs-c/cada_art.html
  3. P. Amey, Correctness by Construction: Better Can Also be Cheaper. CROSSTALK: Journal of Defense Software Engineering, March, 2002.
  4. Ada 95 Benefits, www.act-europe.fr/texts/papers/ada95-benefits-on-the-jvm.pdf
  5. A Comparison of the Concurrency and Real-Time Features of Ada 95 and Java, www.act-europe.fr/texts/papers/ada-java-concurrency-comp.pdf

Сергій Рибін ( [email protected] ) - старший науковий співробітник НИВЦ МГУ, Василь Фофанов ( [email protected] ) - інженер-розробник ACT Europe.

Корисні джерела

Практично вся інформація з мови Ада і Ада-технологіям, доступна в Мережі, може бути знайдена, якщо в якості стартової точки пошуку використовувати один з трьох сайтів: www.adahome.com , www.adaic.org , www.acm.org/sigada . Нещодавно силами ентузіастів мови Ада створили російськомовний сайт www.ada-ru.org . Анотовану бібліографію книг з мови Ада, виданих російською мовою, можна знайти на сайті faqs.org.ru/progr/other_l/adafaq2.htm .

Коли вітчизняного ІТ-фахівця: «Що таке Ада?
Атрибут?
Атрибут?
Range,?
First,?
Чому Ада?

Новости