На чём пишут в NASA?

Вопрос: в NASA пишут на Python’е? 

Короткий ответ

NASA не использует Python для реализации каких-то серьезных проектов, касающихся полетов или доставки военного назначения. Однако есть некоторые проекты, в которых используется Python: частично в математических расчетах, в которых параметры полета учитываются в незначительной степени. Кроме того, я думаю, вам удалось бы обнаружить его в некоторых единоличных проектах или в качестве замены shell-скриптов и Perl’а.

Длинный (и более интересный) ответ от инсайдера

И хотя каждый может писать на том, на чем ему удобно, большинство используют C, много меньше работников пишут на C++ и уж совсем мало — на Java. Абсолютное меньшинство используют ADA, Fortran и Lisp. Assembler используется, когда речь идет о необходимости оптимизации или драйвере. Для моделирования, как минимум в JPL, большинство поддерживают MatLab, но есть и те, кто используют Mathematica (подозреваю, что кто-то пользуется даже Maple, но лично я таких людей еще не встречал). В целом, ни в каком проекте даже среднего масштаба не используются скриптовые языки, и уж тем более, Python, Ruby, Perl и другие, потому что эти проекты должны удовлетворять некоторым требованиям.

Приверженность C не лишена смысла. Все крупные проекты организации обязательно пишутся на C. Например, код для марсоходов написан на C с единственным исключением в виде Gestalt, программного обеспечения для визуальной навигации, написанном на C++. Конечно, не лишена смысла и разработка ПО на другом языке, но при этом этот код должен быть легко портируем на основной язык. На нем же написаны и драйвера для всего коммерческого оборудования. С быстрый, для него существует множество качественных библиотек, он позволяет писать на очень низком уровне, «ближе к железу», что очень полезно. Огромным плюсом является и то, что есть много компиляторов, которые придерживаются стандарта C. Например, если вы пользуетесь, gcc, то в силу строгости правил генерации кода, вы можете быть уверены, что программа будет выполняться одинаково на абсолютном большинстве машин. О других языках нельзя сказать того же. В частности, я не берусь утверждать, что мало компиляторов C++ поддерживают стандарт языка, но несколько лет назад это было именно так.

По моему скромному мнению, новым людям стоит делать выбор в пользу C++, только если они готовы смириться с определенными ограничениями, а в таком случае, имеет смысл все же взглянуть на C с другой точки зрения. Большинство кодов на C++ ограничиваются еще и ресурсами: в проектах космических полетов чрезвычайно важно экономить энергию и память, как оперативную, так и долговременную. Прошли те времена, когда военные и космические организации владели ведущими производствами чипов и другого железа, теперь их сменили гражданские производители товаров широкого потребления. Конечно, они замечательно подходят для персональной техники, но ведь речь идет о работе в открытом космосе, для них необходимо использовать защищенные от радиации материалы. В итоге менеджерам приходится выбирать оборудование, которое сильно уступает оборудованию ПК обычных пользователей. Так, например, в MER’ах установлены чипы с частотой 20 MHz и DRAM в 128 MB. Мой ноутбук, которому уже четыре года, в 100 раз быстрее (2,4GHz) и имеет в 32 раза больше памяти (4GB). А уж сравнивать объем моего HDD на 1 TB с объемом, предоставляемом космическому оборудованию, вовсе не приходится. Так что, думаю, вы понимаете, почему редко делается выбор в пользу C++, сгенерированный код на котором не славится малыми размерами. А вспомните о шаблонах стандартной библиотеки, использующих в процессе работы огромное количество ценного ресурса — оперативной памяти. В то же время, код C очень лаконичен.

К тому же, у C++ есть еще один недостаток: программы на нем могут вести себя непредсказуемо, код на C++ сложно обслуживать. Вы можете сказать, что используете только базовые функции языка, и потому на самом деле не выйдете за рамки чистого C. Если вы воспользуетесь каким-то дополнительными возможностями языка, то придется искать специальных людей, которые займутся отладкой кода и управлением оборудования, для которого данное ПО написано.

Давайте рассмотрим такой пример. Пусть инженер занимается, к примеру, антеннами. Ему не нужно знать C++: вся его работа заключается в том, чтобы заставить работать антенну без сбоев, быстро и качественно. Поэтому в качестве языка для написания драйвера он скорее выберет чистый C. И написанный им код может быть легко изучен другими инженерами, которым ровно также нет смысла создавать ПО на C++. И такая же история повторяется во всех сферах деятельности конторы: от пожарной безопасности до сжатия изображений. Да, нельзя отрицать, что C++ — замечательный язык, и неудивительно, что его используют при создании достаточно сложных приложений, но в деле проектирования полетов он не может составить C серьезную конкуренцию.

Источник: forums.udacity.com