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

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

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

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

  • 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 использовали и 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 — язык для разработки комплексных бортовых программ в реальном времени.

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

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

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

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

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

SpaceX

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

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

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

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

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

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

Комментарии (24)


  1. programmerjava
    22.08.2023 11:08
    +1

    А как же Rust ?


    1. Sabirman
      22.08.2023 11:08
      +5

      Насколько я помню, в NASA в системах реального времени запрещено работать с динамической памятью - вся память должна быть выделена сразу же при старте программы.


      1. DancingOnWater
        22.08.2023 11:08
        +1

        Пока я тут проблем не вижу.


      1. DmitryZlobec
        22.08.2023 11:08

        А нет ли ссылочки на эту рекомендацию.


        1. fivlabor
          22.08.2023 11:08

          https://habr.com/ru/companies/hexlet/articles/303160/

          Ссылка на документ из статьи (JPL Standard C) не доступна, но можно здесь взять https://github.com/abougouffa/awesome-coding-standards/tree/master

          Там же и MISRA, что примерно то же самое

          Забавно, что в 2016 году в комментариях первый вопрос также про Rust


      1. NooneAtAll3
        22.08.2023 11:08

        А как это связано с Ржачкой?


        Плюсы и Цешку ж не запрещают


    1. Felin
      22.08.2023 11:08
      +8


  1. forthuse
    22.08.2023 11:08
    +5

    Интересно, а почему в статье обойдён вопрос использования Форт (Forth) языка для программирования научного оборудования т.к. и для него есть и аппаратные процессоры.


    Forth in Space Applications


    Сейчас самой странички http://forth.gsfc.nasa.gov/ на сайте нет, но в Веб архиве она сохранена.
    (странно, что даже в каких то репозиториях от Nasa сей факт наличия Форт кода не стал публичным и зачем то была удалена даже официальная страница с сайта)


    Чужие: странная архитектура инопланетных компьютеров


    P.S. Стековые процессоры есть и у России и Беларуссии, но используются ли они в Космосе
    публичных сведений нет.


  1. Blaukovitch
    22.08.2023 11:08
    +2

    Intel 8085 (или аналоги), 2006 год

    assembly language

    На примере "Вояджеров" - идеальный вариант.


  1. eandr_67
    22.08.2023 11:08
    +8

    Назвать Ada, разработанный в 1980 году, "одним из старейших языков" и не упомянуть возраст созданного на 10 лет раньше C, по меньшей мере странно.


  1. zodchiy
    22.08.2023 11:08
    +5

    Не надо вводить людей в заблуждение, я видел рекламу в ютубе - "I want to work for NASA, so I'm learning Javascript, Python and React", полгода её крутили, реклама не врет!


    1. cdriper
      22.08.2023 11:08

      в космос ты это не отправишь

      слишком до хрена кода, корректность которого никак не верифицируешь


  1. DvoiNic
    22.08.2023 11:08
    +9

    Хосспадя. Ну закопайте вы уже стюардессу с именем "ДУРАКОН".
    Графит-Флокс — система с использованием оного "инструмента" — держится только и исключительно потому, что есть еще несколько одногодков Паронджанова, и только им он и нужен. И поэтому — писали уже то-ли на oberon.su, то-ли на хабре — разрабами используется "на отвали", "чтобы старперы отвязались". А в работе используют нормальные современные IDE.


    При помощи этой среды можно видеть всё, что происходит и работает, на одном экране.

    при помощи этой, хм, ~~студенческой поделки ~~ "среды" видеть кроме статических картинок ничего нельзя.


  1. angry_paimon
    22.08.2023 11:08

    Типа вот бы ещё рассказывали какие российские ИТ-продукты юзают. Все три Труконф)


  1. iliasam
    22.08.2023 11:08

    Интересный документ попался: https://epizodsspace.airbase.ru/bibl/vestnik-lavochkina/2016/2016-1.pdf
    48 стр - " Основные принципы построения программной системы подготовки и функционирования блока управления и специализированного языка программирования "


  1. victor_1212
    22.08.2023 11:08
    +2

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

    Apollo 11 это 1969, C даже в проекте не было, хотя автор вероятно не в курсе, предшественник ada jovial не упомянут, что характеризует уровень статьи


  1. jobless
    22.08.2023 11:08
    +2

    Со слов автора, он есть на хабре. https://pl1.su/question/

    Используется ли сейчас этот компилятор?

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


  1. Bedal
    22.08.2023 11:08

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

    очень хотелось бы посмотреть на систему реального времени, писанную на Перле. Сколь угодно мягкую.


  1. dizatorr
    22.08.2023 11:08

    Роскосмос использует для запуска космических кораблей ДРАКОНа.

    Блин, звучит как строка из фэнтези. :)


  1. R0bur
    22.08.2023 11:08

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


    1. Overphase
      22.08.2023 11:08
      +1

      Я также не понимаю, почему упоминание ассемблера процессора Intel 8085 автор статьи проиллюстрировал ассемблерным кодом процессора MOS 6502


      1. numb13
        22.08.2023 11:08

        А ещё Дружелюбный Русский Алгоритмический язык иллюстрирован не по русски.


  1. Mike-M
    22.08.2023 11:08

    Говоря о языке С, в статье следовало упомянуть его версию для ответственных применений MISRA C, к которым относится и аэрокосмическая отрасль.


    1. BareDreamer
      22.08.2023 11:08

      Википедия сообщает, что MISRA C – это не версия языка Си, а набор рекомендаций (правил) по программированию на Си.