ДРАКОН
Сегодня я расскажу вам о необычном языке программирования, который называется ДРАКОН, что расшифровывается как Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность. Это язык визуального программирования, поэтому, в отличии от большинства других языков, программист в нем не пишет код программы, а оперирует графическими схемами, поэтому читать алгоритм на нем могут не только программисты.
И, хотя, ДРАКОН появился только в 1996 году, множество сил в него вложили советские инженеры, начавшие работу еще во второй половине 1980-ых годов.
Цена ошибки в программе
С 1986 года перед советскими инженерами стояла задача создания языка программирования для космического корабля "Буран". Самое главное требование к новому языку - крайне высокая надежность, которую не могли обеспечить классические языки программирования. И сейчас вы поймете почему.
Даже в современном мире цена ошибки в коммерческих программах может приводить к большим финансовым и имиджевым потерям, однако, часто их можно быстро исправить, в крайнем случае - отозвать "неправильную" продукцию с ошибкой в прошивке. Но в сфере космической разработки потери становятся просто колоссальными:
- Гибель ракеты-носителя "Ariane-5" в 1996 году. Через 40 секунд после старта ракета взорвалась в воздухе, полностью уничтожив четыре спутника, которые нужно было вывести на орбиту. Причиной аварии стала неправильно объявленная переменная.
- Гибель межпланетного зонда "Фобос-Грунт". Программная ошибка вызвала одновременный перезапуск двух работающих каналов бортового вычислительного комплекса. В результате аппарат не совершил манёвры, необходимые для выхода на отлётную орбиту: двигательная установка не сработала, и даже топливные баки не отделились.
- Гибель космического аппарата "Mars Climate Orbiter" в 1999 году. Команда разработчиков использовала две разные системы измерения: английскую и метрическую, что привело к неправильной траектории полёта аппарата.
- Гибель демонстрационного спускаемого модуля "Schiaparelli" российско-европейской миссии "ExoMars-2016" в 2016 году. Причиной ЧП стал сбой бортового компьютера, который выдал команду на запуск тормозных двигателей и выпуск парашюта через три минуты после входа в атмосферу, что было раньше положенного по расчётам времени.
- Гибель американского межпланетного зонда "Mariner-1" в 1962 году. Вскоре после старта ракета перестала получать радиокоманды с Земли и управление взял на себя бортовой компьютер. Однако в программе компьютера оказалась ошибка, ракета сошла с курса и взорвалась
К сожалению, никто не отменял человеческий фактор, а программисты, как и все люди, могут совершить опечатку или не заметить ошибку в коде, особенно, когда над речь идет о больших проектах с множеством разработчиков.
Именно такую задачу поставили перед инженерами центра автоматики и приборостроения имени академика Н. А. Пилюгина.
Для сложной системы управления "Бураном" потребовалось создать язык программирования высокого уровня, предназначенного для решения задач в реальном времени. При разработке "Бурана" проблема разработки и тестирования программного обеспечения считалась одной из наиболее сложных, поэтому в 1983 году разработчики "Бурана" обратились в Институт прикладной математики с задачей разработки бортового программного обеспечения.
По их оценкам, для этой работы требовалось несколько тысяч программистов, так как предполагалась экономия объёма памяти бортового компьютера "Бисер-4" за счёт использования ассемблера. После ознакомления с задачей математики решили разработать проблемно-ориентированные языки, основанные на терминах, понятиях и форме представления алгоритмов управления и испытаний, используемых разработчиками корабля.
Визуальное программирование
Возможно, вы помните, что такое блок-схемы? Если да, то считайте, что вы уже знакомы с ДРАКОН-схемами! Как и блок-схемы, ДРАКОН-схемы используют для понятного описания алгоритма программы, при этом их легко читать человеку без технических знаний.
Вместо строк кода ДРАКОН использует следующие графические элементы:
- Прямоугольники — действия
- Ромбы — условия
- Овалы — начало и конец
- Стрелки — поток выполнения
Также существуют и строгие правила:
- Запрет на пересечение линий
- Чёткая иерархия элементов
- Стандартизированные формы блоков
Как видите, ничего сложного!
Именно визуальное программирование считается безопасным способом написания программы, в то время как обычные языки программирования могут давать программисту излишнюю свободу. Например, в языке С (Си) программист может случайно использовать один знак равно (=, присваивание), вместо двух (==, равенство), такая опечатка может привести к непредсказуемым последствиям, в корне изменив логику программы!
Где применялся?
ДРАКОН стал применяться в самых различных сферах, где критически важна безопасность и точность:
- В космической программе "Буран"
Управление полётом
Системы диагностики
Автоматическая посадка - В ядерной энергетике
Контроль реакторов
Системы безопасности - В медицине
Диагностические алгоритмы
Поддержка принятия врачебных решений - В образовании
Обучение основам алгоритмизации
Подготовка инженеров
ДРАКОН сейчас
На начальном этапе развития информация о ДРАКОНе была недоступна для пользователей, так как работы по ракетно-космическим программам и, в частности, по космической программе Буран были строго засекречены как составляющие государственную тайну. В тот период область применения ДРАКОНа была ограничена ракетно-космической техникой.
В результате политики гласности и рассекречивания ранее закрытых сведений о проектах, появилась возможность приспособить инструментальные средства языка ДРАКОН для гражданских нужд широкого применения на персональных компьютерах. Сфера применения языка стала постепенно выходить за рамками ракетно-космической техники, например для решения задач в предметных областях и отраслях экономики. В открытой литературе стали доступны публикации по языку ДРАКОН. Часть этих материалов появилась в Интернете в конце 2006 года.
В наше время язык ДРАКОН доступен для программистов, использующих самые разные языки. Можно использовать ДРАКОН-схемы для описания алгоритма программы и в качестве результата сгенерировать код на необходимом языке.