На каких языках пишут ПО для космоса Роскосмос, NASA и Space X
prostopasha1914 — 05.08.2021
Фото: Алексей Пахунов - глава отдела программистов Space X и
разработчик ПО для всех кораблей Илона Маска.
Случился у меня тут в обсуждении вчерашней темы о проблемах
Роскосмоса диалог с одним товарищем. Суть наших противоположных
мнений (которые касались программирования "для космоса") оказалась
в следующем:
1. Товарищ усомнился в моем программистском прошлом и заявил, что я
ничего не понимаю в программировании даже на уровне бэйсика (что в
данном случае неважно, поскольку товарищу даже бэйсик явно знаком
только по названию).
2. Товарищ заявил, что все ПО для космоса пишется исключительно на
низкоуровневых языках программирования (что гораздо более важно). И
никакие мои доводы о фактах и причинах используемых в космических
аппаратах харда и софта действия на него не возымели.
Поэтому я и решил сказать пару слов по этой теме. И вкратце
распишу, какие языки и методы программирования использовали и
используют в различных космических компаниях. А именно - в NASA,
SpaceX и Роскосмосе. И как эти языки менялись, меняя за собой всю
отрасль.
***
Как кодят в Роскосмосе?
«С? С++? Что за бред? Какой-то набор скобочек и запятых?
Зачем нам это?» — подумали российские инженеры, когда эти
языки начали появляться на свет. И продолжили писать (и по сей день
пишут) ПО для ракет и космических кораблей на языках, разработанных
еще для "Бурана".
Для реализации этого проекта тогда был разработан ПРОЛ2 —
язык для разработки комплексных бортовых программ в реальном
времени. Сразу за ним подоспели ДИПОЛЬ —
проблемно-ориентированный язык для создания программ для наземных
испытаний и ЛАКС — язык для моделирования. Все это было
создано под БЦВМ — бортовую цифровую вычислительную машину.
Для неё также была написана отдельная операционная система,
получившая название «Пролог-диспетчер». После запуска Бурана, как
мы все знаем, лавочка была прикрыта и больше Буран не
эксплуатировался, однако его наработки не были забыты и даже
усовершенствованы. Таким образом на свет родился Дружелюбный
Русский Алгоритмический язык, Который
Обеспечивает Наглядность. Или сокращённо
ДРАКОН. Язык является в меньшей степени языком и в большей
набором схем, создающимся в редакторе.
Однако замечу, что команды в нем, тем не менее, все равно
использовали на английском.
Правда, в посленее время даже в "Роскосмосе" пришлось кое-что
поменять. Всё-таки одними схемами сыт не будешь. И ДРАКОН стал
"гибридным" языком программирования. Это значит, что он стал смесью
старого и нового ПО - таким себе ДРАКОН-Java, ДРАКОН-Python и так
далее.
Как кодят в NASA?
История этого ведомства, скорее всего, является самой необычной и
насыщенной уймой странностей и необъяснимых вещей. Именно поэтому
раздел о нём будет самым длинным. Дело в том, что в NASA не особо
любят заниматься переписыванием одного и того же кода от миссии к
миссии и часто там практикуется повторное использование компонентов
кода, успешно зарекомендовавших себя в предыдущих миссиях.
Казалось бы, это правильное решение и в целом с этим нельзя не
согласиться. Это увеличивает надёжность будущего аппарата и
сокращает время разработки ПО под него. Однако вот незадача…
Технологии идут вперёд. И код, подходящий для одной архитектуры,
нужно переделывать, чтобы он заработал на более новой.
Делать это, конечно, никто не торопился. Именно поэтому миссии
THEMIS и STEREO, запущенные аж в 2006 и 2007
годах, работали с использованием модулей от предыдущих миссий на
процессорах Intel 8085, выпущенных ещё в 1976 году!!!
Код для них, по этой причине, разумеется писался на
машинно-ориентированных языках типа Ассемблера. Для такого проца
использование этого древнего кода, естественно, сильно ускоряло
работу ПО.
То есть, еще раз - относительно недавно, 15 лет назад, ассемблер
все еще использовался в космическом кодировании НАСА. Для сравнения
приведу разницу в длине кода для ассемблера и даже такого, тоже
далеко не современного, языка как Паскаль.
Естественно, что еще в 1970-х уже существовали языки более высокого
уровня, тот же Fortran. Однако использовался он не так активно и
преимущественно для компьютеров, которые будут находиться на Земле,
а не в полёте. К тому же, просто использовать Fortran тогдашнее
руководство не захотело и во время раскрутки программы Space
Shuttle в 70-ые года было принято решение разработать на основе
Fortran новый язык программирования, отвечающий новым требованиям
стандартов, которые так были необходимы для упорядочивания всей
накопившейся к тому времени кодовой каши.
Было решено разработать два языка: HEL/S для ПО космических
аппаратов, и HEL/G для наземного оборудования. Однако с HEL/S
создатели явно перемудрили, сделав код абсолютно не читабельным
даже для программиста выше среднего уровня. В итоге HEL/S был
оставлен в прошлом, а HEL/G даже не появился на свет.
А NASA начало временно использовать язык программирования
Ada, разработанный до этого под нужды ВВС США. Изначально он
использовался для управления военными объектами, снарядами,
самолётами, кораблями и другими безделушками в реальном времени.
Как вы уже могли догадаться, единственным языком в NASA он не стал.
Всё также кто-то где-то использовал Fortran, кто-то Pascal, а
кто-то вообще Visual Basic или Bliss.
Но наконец-то ко всей этой солянке в начале 2000-х добавились
знаменитые С, С++ и Perl. Стали, наконец, появляться
операционные системы в привычном нам понимании. К слову, многие
аппараты до этого вообще путешествовали по космическим просторам
без каких либо операционных систем (Пионер вам в пример). Таким
образом приоритет захватил быстрый и удобный язык С.
Именно на нём сейчас работает большая часть космических
аппаратов, в том числе всем известный любимчик — марсоход
Curiosity. Под роверы на С была написана универсальная операционная
система VxWorks. Все марсоходы начиная от Pathfinder и заканчивая
Curiosity работают на ней (привет моему оппоненту в
споре).
Как кодят в SpaceX?
А теперь перейдем к современности.
Пример кода на С++
Если NASA — это ваш 60-летний сосед, пользующийся кнопочным
телефоном, время от времени читающий газеты (те самые, бумажные) и
прогуливающийся до рынка, чтобы прикупить себе что-нибудь модное,
то SpaceX — это молодой паренёк со смартфоном в руках, в котором
есть всё, начиная от звонков и новостей, заканчивая интернет
магазинами с доставкой.
Компания Илона Маска также использует несколько языков
программирования, однако их в разы меньше, чем у NASA и все
они являются современными высокоуровневыми языками.
На нём пишут практически всех современных роботов, все системы дистанционного управления и всё, что только можно. По заявлениям сотрудников SpaceX, этот язык занимает основную позицию, среди всех других языков в компании. Своё место нашли C# и JavaScript. На них работают большая часть внутренних инструментов и услуг компании.
Знаете, есть подозрение, что даже кофеварка в кабинете у Илона Маска, вероятнее всего, работает на C# (если она у него есть).
Для других технологических задач также используются Knockout, Handlebars, Python, LESS. А моделирование проводится в LabVIEW с помощью графического языка программирования G.
Ну и из операционных систем для своих аппаратов SpaceX предсказуемо отдали предпочтение Linux.
И да - главой отдела программистов у Маска работет украинец, Леша Пахунов..)
За инфу благодарен Fr1Zz с "Альфа-центаври".