Какой самый популярный язык программирования в космосе?

В целях пояснения
- будет включать машинный код, сгенерированный языком программирования на Земле.
- «в космосе» включает все, что находится на орбите и в дальнем космосе.
- приветствуются специальные упоминания о языке программирования на устройствах в космосе.
- приветствуются специальные упоминания о любом кодировании космонавтами в космосе.
- 'популярный' = по количеству спутников, которые не понравились больше всего. хотя обсуждение этого приветствуется.

Этот вопрос следует за чтением отличных ответов на мой предыдущий вопрос . Какой язык программирования был первым в космосе?

Будет ли "самый популярный" проблематичен? Вы имеете в виду тот, который людям нравился больше всего, или самый частый/распространенный?
Что, если язык А присутствует на гораздо большей части спутников, но в космосе гораздо больше линий языка В, и все же программисты больше всего любят язык С?
Отредактировал мой OP, чтобы уточнить: по количеству установленных спутников. В основном мне интересно, какие языки используются и изменилось ли это со времени первых сателлитов.
Спасибо, выглядит лучше. Вы можете рассмотреть возможность переноса этого объяснения из комментария обратно в сам вопрос. Лучше, если вопросы не требуют пояснений в комментариях. Чем больше усилий вы приложите в вопросе, чтобы описать, что именно вы ищете, тем лучше.
«будет включать машинный код, сгенерированный языком программирования на Земле». - это уточнение меня смущает. Большая часть программного обеспечения будет скомпилирована на земле и загружена на спутник перед запуском. Я предполагаю, что большинство патчей также компилируются на месте. Итак, если вы включите машинный код, на самом деле возникает вопрос: какая архитектура процессора наиболее популярна в космосе (ARM, PowerPC, x86 и т. д.).
@superdesk Сначала это меня тоже смутило, но я почти уверен, что он имеет в виду, что если программа написана на C и скомпилирована в машинный код, который затем отправляется в космос, это все равно будет считаться «C в космосе».
Большинство проектов на самом деле не говорят о программной стороне, поэтому я могу говорить только о вещах, в которых я лично каким-то образом участвовал, что является довольно ограниченным примером. Тем не менее, я бы сказал, ужасные ужасные спагетти Fortran — самый популярный выбор.
На самом деле несколько ноутбуков под управлением Windows должны содержать больше кода, чем все компьютеры космических кораблей вместе взятые, учитывая преимущества проверенной технологии и простоты в отрасли.

Ответы (4)

Я написал код, который летал на 3 космических кораблях, которые отправились на Марс, один на Луну, один на комету и обратно, а также на несколько спутников на околоземной орбите, последний из которых был около 10 лет назад. Все они использовали С.

Конечно, это не единственный язык, но он популярен, потому что считается, что код можно сделать меньше и быстрее, используя C, без накладных расходов, требуемых управляемым языком.

Возможно, что-то изменилось за последние годы. Я надеюсь, что это так.

У меня нет информации из первых рук, но я предполагаю, что первые спутники использовали язык ассемблера — небольшой, компактный код на медленных процессорах с небольшим объемом оперативной памяти.

Ну, первые спутники предшествовали первым версиям C примерно на пятнадцать лет... Даже программа «Аполлон» была в значительной степени в режиме сворачивания к тому времени, когда первые работы над C были выполнены, и только в 1978 году (говорит Википедия). ), что язык программирования 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 в течение двух дней во время его миссии.

Ах... Ада .
Из личного опыта я знаю, что Fortran также довольно популярен. Я думаю, что C побеждает, хотя.
В этом отношении вопрос немного нечеткий, но я думаю, что пункт № 1 в вопросе вместе с некоторыми комментариями ОП дисквалифицирует многие ваши примеры, поскольку код C будет скомпилирован на земле и что на самом деле установлено на космический корабль будет машинным кодом, поэтому код C на самом деле не находится «в космосе». Есть некоторые исключения, например, код C, который был загружен на космический корабль Pathfinder для запуска в интерпретаторе C его операционной системы VXWorks, чтобы решить проблему инверсии приоритетов.
Я не вижу комментариев стремящегося Гуру, которые проясняют пункт № 1 ... Я сам прокомментировал, прося разъяснений. На мгновение отступим: подсчет сборки, сгенерированной компилятором, вместо языка, на котором был написан исходный код, 1) не соответствует общепринятому мнению и 2) делает вопрос гораздо менее интересным.
@ArthurDent Какой вид? Конечно, Fortran 2000 лучше, чем C, но я бы лучше программировал на C, чем на Fortran IV!!
Люди продолжают упоминать Fortran, но у меня нет личного опыта или знаний о конкретных миссиях. Он все еще широко используется? Не стесняйтесь обновлять мой ответ!
@WetSavannaAnimalakaRodVance, это довольно старый код, я думаю, это был Fortran 90. К счастью, мне не приходилось с ним работать.

Хотя это и не прямой ответ на ваш вопрос, возможно, стоит рассмотреть атрибуты языков программирования, связанные с приложениями для космических полетов.

C — хороший выбор, потому что это язык высокого уровня, который все еще «близок к аппаратному обеспечению» (кажется парадоксом, но это не так). Как уже говорилось, он часто используется во встроенных системах, а спутники/космические зонды являются встроенными системами. Он также используется в авиации (авионика) по всем тем же причинам. Компиляторы будут создавать эффективный код времени выполнения. Предполагая, что разработчик следует соответствующим практикам, среда выполнения будет выполняться предсказуемо и детерминировано, что имеет решающее значение для тестируемости и надежности. Код может быть «доказуемо правильным».

Java и C# — это эволюция C (через C++), которая значительно повышает производительность труда разработчиков. Они могут найти применение в некритичных космических полетах, но не подходят для высоконадежных встраиваемых систем, таких как автономные космические корабли или критически важные для безопасности системы на борту пилотируемых космических кораблей. Они используют схемы управления памятью/сборки мусора, которые делают поведение во время выполнения недетерминированным, а время выполнения непредсказуемым. Хотя на более новых языках, таких как Java и C#, писать более сложные и изощренные приложения проще, чем на C, гораздо сложнее гарантировать, что код никогда не выйдет из строя.

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

По большей части язык программирования C будет языком выбора для большинства космических кораблей. Он уже давно является надежным языком для космических миссий. Я бы сказал, что C++ — лучший выбор из-за его абстракций с нулевой стоимостью и безопасности типов. Именно по этим причинам мы используем C++ для нашего программного обеспечения для полетов. Я думаю, что одна из причин, по которой C до сих пор так распространен не только в космических аппаратах, но и в мире встраиваемых систем в целом, заключается в том, что инженеры часто боятся абстракций. Но именно эти абстракции дают нам более безопасный, надежный и читаемый код. В результате я заметил повышенный интерес и применение C++ для космических аппаратов. Ознакомьтесь с этим замечательным докладом об использовании C++ для автономной системы марсохода Curiosity.

Наконец, вот отличное видео от видного члена сообщества C++, Джейсона Тернера, об использовании современного C++14 в Commodore 64 без накладных расходов. Здесь он демонстрирует, что C++ не является медленным, раздутым языком, как многие разработчики встраиваемых систем пришли к выводу, в основном из утверждений, сделанных в 90-х годах.