В целях пояснения
- будет включать машинный код, сгенерированный языком программирования на Земле.
- «в космосе» включает все, что находится на орбите и в дальнем космосе.
- приветствуются специальные упоминания о языке программирования на устройствах в космосе.
- приветствуются специальные упоминания о любом кодировании космонавтами в космосе.
- 'популярный' = по количеству спутников, которые не понравились больше всего. хотя обсуждение этого приветствуется.
Этот вопрос следует за чтением отличных ответов на мой предыдущий вопрос . Какой язык программирования был первым в космосе?
Я написал код, который летал на 3 космических кораблях, которые отправились на Марс, один на Луну, один на комету и обратно, а также на несколько спутников на околоземной орбите, последний из которых был около 10 лет назад. Все они использовали С.
Конечно, это не единственный язык, но он популярен, потому что считается, что код можно сделать меньше и быстрее, используя C, без накладных расходов, требуемых управляемым языком.
Возможно, что-то изменилось за последние годы. Я надеюсь, что это так.
У меня нет информации из первых рук, но я предполагаю, что первые спутники использовали язык ассемблера — небольшой, компактный код на медленных процессорах с небольшим объемом оперативной памяти.
C кажется хорошим предположением: C популярен для встраиваемых систем, сателлиты — это встроенные системы, поэтому C популярен для сателлитов. В этой цепочке рассуждений можно найти множество дыр, и, конечно же, многие языки использовались с разной степенью популярности. В отсутствие обзора используемых языков, который дал бы решительный ответ на этот вопрос, приведенные здесь примеры могут дать некоторый контекст.
Имейте в виду, что поскольку значительное количество спутников не имеет общедоступной информации, например военные и спутники-шпионы. Можно предположить, что Ада может быть более популярной, чем предполагает общий обзор, учитывая, что она широко использовалась в вооруженных силах США в прошлом. Более подробная информация об Аде представлена в этом связанном вопросе .
Конкретный пример использования C: основная система полета НАСА ( домашняя страница cFS ) написана на C и используется в нескольких миссиях прямо сейчас ( связанный вопрос ).
Платформы меньшего размера, такие как CubeSats, также могут изменить языки в космическом распространении: их много, и они имеют гораздо более высокую устойчивость к риску (и более низкую вероятность успеха). Из доклада LightSail, представленного на SmallSat 2015, «LightSail FSW (программное и микропрограммное обеспечение) написано на языке программирования C». LightSail также использовал дистрибутив Linux, опять же написанный на C.
Ассемблер также был популярным языком, по крайней мере, исторически, по словам Рона Гаррета, который написал следующее о работе в JPL в 1988 году: «Космические корабли в основном программировались на ассемблере или, если быть радикальным, на Аде». Статья с этой цитатой документирует работу, проделанную над Remote Agent, экспериментальной программой LISP, которая управляла спутником Deep Space 1 в течение двух дней во время его миссии.
Хотя это и не прямой ответ на ваш вопрос, возможно, стоит рассмотреть атрибуты языков программирования, связанные с приложениями для космических полетов.
C — хороший выбор, потому что это язык высокого уровня, который все еще «близок к аппаратному обеспечению» (кажется парадоксом, но это не так). Как уже говорилось, он часто используется во встроенных системах, а спутники/космические зонды являются встроенными системами. Он также используется в авиации (авионика) по всем тем же причинам. Компиляторы будут создавать эффективный код времени выполнения. Предполагая, что разработчик следует соответствующим практикам, среда выполнения будет выполняться предсказуемо и детерминировано, что имеет решающее значение для тестируемости и надежности. Код может быть «доказуемо правильным».
Java и C# — это эволюция C (через C++), которая значительно повышает производительность труда разработчиков. Они могут найти применение в некритичных космических полетах, но не подходят для высоконадежных встраиваемых систем, таких как автономные космические корабли или критически важные для безопасности системы на борту пилотируемых космических кораблей. Они используют схемы управления памятью/сборки мусора, которые делают поведение во время выполнения недетерминированным, а время выполнения непредсказуемым. Хотя на более новых языках, таких как Java и C#, писать более сложные и изощренные приложения проще, чем на C, гораздо сложнее гарантировать, что код никогда не выйдет из строя.
Вы можете ожидать, что другие языки будут использоваться или не использоваться с учетом аналогичных соображений в отношении особенностей и атрибутов языка.
По большей части язык программирования C будет языком выбора для большинства космических кораблей. Он уже давно является надежным языком для космических миссий. Я бы сказал, что C++ — лучший выбор из-за его абстракций с нулевой стоимостью и безопасности типов. Именно по этим причинам мы используем C++ для нашего программного обеспечения для полетов. Я думаю, что одна из причин, по которой C до сих пор так распространен не только в космических аппаратах, но и в мире встраиваемых систем в целом, заключается в том, что инженеры часто боятся абстракций. Но именно эти абстракции дают нам более безопасный, надежный и читаемый код. В результате я заметил повышенный интерес и применение C++ для космических аппаратов. Ознакомьтесь с этим замечательным докладом об использовании C++ для автономной системы марсохода Curiosity.
Наконец, вот отличное видео от видного члена сообщества C++, Джейсона Тернера, об использовании современного C++14 в Commodore 64 без накладных расходов. Здесь он демонстрирует, что C++ не является медленным, раздутым языком, как многие разработчики встраиваемых систем пришли к выводу, в основном из утверждений, сделанных в 90-х годах.
ооо
ооо
CodingMatters
ооо
суперстол
call2voyage
Рикки-Тикки-Тави
пользователь3528438