Космическая разработка: какие языки программирования используют NASA, SpaceX и Роскосмос

в 10:21, , рубрики: Блог компании МТС, космонавтика, Программирование

Наверное, многие задавались вопросом, что используют для создания необходимых для работы космических аппаратов и сопутствующего оборудования космические агентства. В интернете есть фрагментированные ответы на этот вопрос, а мы постарались собрать всё вместе и сделать развернутую статью с подробной информацией. Так что просим под кат.

Что вообще применяется в космической отрасли

Сразу стоит сказать, что любая система, которая используется в космосе или на Земле для работы с космическими аппаратами, должна соответствовать стандартам безопасности отрасли. А они весьма строгие, ведь права на ошибку практически нет. Ошибка в месте запятой в дробном числе может быть причиной аварии или отказа определённой системы, что уже случалось.

Поэтому и выбор стека технологий тоже должен быть строгим. Вот список языков, которые используются в космонавтике:

  • Ada. Это один из старейших языков, который до сих пор применяется. Его достоинство в поддержке как объектно-ориентированного, так и не объектно-ориентированного программирования. Он подходит как для использования в комплексных системах, так и для низкоуровневой разработки. Язык позволяет обнаруживать ошибки ещё во время компиляции, а не уже непосредственного выполнения программы. Кроме того, в Ada преимущественно используются слова, а не символы. В целом это снижает риск ошибок при кодинге.

  • Язык ассемблера  (от англ. assembly language) — императивный язык низкого уровня, который используется для представления команд CPU. Также один из старейших, используется в космонавтике очень давно.

  • Язык С. Относительно широко применяется, достоинства — производительность и гибкость.

  • C++. Этот язык в частности применяет в работе SpaceX, о чём поговорим ниже.

  • FORTRAN. Еще один «артефакт» прошлых эпох разработки, который до сих пор используется. Он один из немногих сохранившихся ЯП, появившихся ещё в 50-х годах прошлого века.

  • MATLAB. Очень хороший инструмент для вычислений. С его помощью анализируют различные полетные (и не только) данные, а также разрабатывают модели и реализуют симуляции в аэрокосмической отрасли.

  • Python. Вероятно, один из новейших языков в списке. Его применяют в SpaceX, NASA и других организациях. В частности Python используется для разработки ПО, которое получает, анализирует и систематизирует данные с телескопа «Джеймс Уэбб».

О NASA, SpaceX и Роскосмосе

NASA

В этой организации код ещё пару десятков лет назад писался почти исключительно на ассемблере, поскольку и чипы с рядом компонентов были не самые новые. Так, например, в 2006 году миссии THEMIS и STEREO работали на базе процессоров  Intel 8085, выпущенных ещё в 1976 году. Соответственно, код для них писался на машинно-ориентированных языках. Понятно, что код этот простым не назовёшь, но ПО было очень быстрым. Вот сравнение кода на Ассемблере и Pascal.

Космическая разработка: какие языки программирования используют NASA, SpaceX и Роскосмос - 1

Тогда же в NASA использовали и Fortran, но не для космического оборудования, а для систем, которые находились на Земле и предназначались для управления этим оборудованием. Также NASA в 70-е стала разрабатывать два специальных языка, HEL/S для ПО космических аппаратов, и HEL/G для наземного оборудования. Но они оказались непрактичными, сложными и в итоге никому не нужными.

Что касается Ada, этот язык применялся для управления объектами в режиме реального времени. Но чуть позже стали использовать более современные  С, С++ и Perl. На С написана специальная ОС VxWorks для роверов, от Pathfinder до Curiosity. А вот программное обеспечение для визуальной навигации написано на С++. Но для проектирования полетов применяется всё же С.

Тем не менее, поскольку в распоряжении NASA — огромный «зоопарк» оборудования разных лет, то и языки используются разные. Так, например, Assembler используется, когда речь идёт о необходимости оптимизации или драйвере. Для моделирования, как минимум в JPL, большинство поддерживают MatLab. А вот скриптовые языки практически не используют, за исключением проектов, где требуется анализ данных, как в случае с обработкой информации с «Джеймс Уэбб».

О приверженности языку С как-то высказался один из разработчиков агентства (правда, еще в 2016 году — с того времени многое могло поменяться): «Код должен быть легко портируем на основной язык. На С  написаны и драйвера для всего коммерческого оборудования. Этот язык быстрый, для него существует множество качественных библиотек, он позволяет писать на очень низком уровне, «ближе к железу», что крайне важно. Огромным плюсом является и то, что есть много компиляторов, которые придерживаются стандарта C. Например, если вы пользуетесь, gcc, то в силу строгости правил генерации кода вы можете быть уверены, что программа будет выполняться одинаково на абсолютном большинстве машин».

Вот, кстати, репозитории с ПО для Apollo-11 (понятно, что это восстановленный софт):

hrislgarry/Apollo-11 — самый популярный репозиторий с кодом на Ассемблере. ПО было восстановлено специалистами из Virtual AGC и Музея MIT. Именно так выглядел код для оригинальной лунной миссии.

alfonsokim/apollo-guidance-computer — ПО для Центра принятия решений миссии Аполлон-11. Основная часть кода написана на языках С и С++. Разобраться в коде будет гораздо проще, чем в Ассемблере.

virtualagc/virtualagc — ещё одна версия ПО для Центра принятия решений. Большая часть написана на Ассемблере. Также использованы Xproc и С.

И вот ещё список  список open-source решений, используемых NASA.

Роскосмос

Если говорить о космических проектах прошлых лет, то, например, для разработки ПО аппаратов серии «Венера» использовался язык Fortran. Применялся он и для некоторых других систем.

Развитие современной базы инструментов разработки началось с момента начала реализации проекта «Буран».  Для этого проекта разработали сразу несколько собственных языков:

ПРОЛ2 — язык для разработки комплексных бортовых программ в реальном времени.

ДИПОЛЬ — проблемно-ориентированный язык для создания программ для наземных испытаний.

ЛАКС — язык для моделирования.

Сейчас применяются и другие языки, включая вполне себе современные. Но отличием от «коллег» в случае Роскосмоса является использование ДРАКОНа (Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность).

Космическая разработка: какие языки программирования используют NASA, SpaceX и Роскосмос - 2

Это реализация языка из семейства IEC 61131-3, а именно SFC. Собственно, ДРАКОН — не совсем язык, а скорее среда визуальной разработки определённых модулей процесса. При помощи этой среды можно видеть всё, что происходит и работает, на одном экране. Сейчас на базе такой среды разрабатывают программные пакеты для создания промышленных контроллеров, роботизированных систем и т.п.

А так в Роскосмосе используются и Java, Python и другие языки. 

SpaceX

В компании, созданной Илоном Маском, тоже используются разные языки программирования. Но их подборка гораздо меньше, чем у NASA. Да и древние ЯП не применяются: все языки, что входят в стек SpaceX — современные высокоуровневые языки.

Космическая разработка: какие языки программирования используют NASA, SpaceX и Роскосмос - 3

Так, например, ПО для Falcon и Dragon написано на С++. В компании его называют универсальным и применяют для разработки роботов, систем дистанционного управления и самих космических ракет. Насколько известно, именно С++ является основным. На Reddit сотрудники SpaceX периодически дают ответы относительно языков программирования, которые используются в компании. Вот один из ответов: «Нам нравится объектно-ориентированный подход в C++, но при этом мы стараемся писать настолько простой код, насколько это вообще возможно. Ещё мы используем несколько библиотек с открытым исходным кодом, но у нас очень жёсткие требования к их качеству, поэтому нам проще написать свои библиотеки, где мы точно уверены в качестве кода».

Космическая разработка: какие языки программирования используют NASA, SpaceX и Роскосмос - 4

ПО, которое отвечает за полёт, пишется на C и C+. Так разработчиков компании обучают писать код для двигателя на языке C++ и придерживаться того же подхода к надёжности во всех проектах.

Для вывода информации на экраны в SpaceX выбрали HTML, JavaScript и CSS. Python, что вполне логично, используется для тестов. К слову, интерфейс на мониторах в Crew Dragon отображается с помощью движка Chromium и JavaScript.

Кроме него используются и C# вместе с JavaScript. Также в компании для реализации разных проектов применяют Knockout, Handlebars, Python, LESS. Для моделирования используют LabVIEW.

Возможно, кто-то из читателей знает дополнительные нюансы работы с ЯП в разных космических агентствах? Если да, расскажите об этом в комментариях. 

Автор:
Petr0v1

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js