¿Cuál es el lenguaje de programación más popular en el espacio?

A los efectos de aclaración
- incluirá código de máquina generado por un lenguaje de programación en la tierra.
- 'en el espacio' incluye cualquier cosa en órbita y tránsito en el espacio profundo.
- Se agradecen menciones especiales de lenguaje de programación en dispositivos en el espacio.
- Se agradecen menciones especiales de cualquier codificación por astronautas en el espacio.
- 'popular' = por conteo del número de satélites que no son más 'me gusta'. aunque la discusión sobre esto es bienvenida.

Esta pregunta sigue a una lectura de las excelentes respuestas a mi pregunta anterior ¿ Cuál fue el primer lenguaje de programación en el espacio?

¿Será problemático "más popular"? ¿Te refieres al que más le gustó a la gente, o al más frecuente/común?
¿Qué pasa si el lenguaje A está presente en la fracción más alta de satélites, pero hay la mayor cantidad de líneas de lenguaje B en el espacio y, sin embargo, los programadores son los más aficionados al lenguaje C?
Edité mi OP para aclarar: por recuento de satélites instalados. Sobre todo, tengo curiosidad sobre qué idiomas se usan y si esto ha cambiado desde los primeros satélites.
Gracias, se ve mejor. Podría considerar mover esa explicación de un comentario a la pregunta misma. Es mejor si las preguntas no necesitan explicaciones en los comentarios. Cuanto más esfuerzo haga dentro de la pregunta para describir qué es lo que está buscando, mejor.
"incluirá código de máquina generado por un lenguaje de programación en la tierra". - esta aclaración me confunde. La mayor parte del software se compilará en tierra y se cargará en el satélite antes del lanzamiento. Supongo que la mayoría de los parches también se compilan sobre el terreno. Entonces, si incluye el código de la máquina, la pregunta realmente es: qué arquitectura de procesador es más popular en el espacio (ARM vs PowerPC vs x86, etc.).
@superdesk También me confundió al principio, pero estoy bastante seguro de que quiere decir que si un programa está escrito en C y compilado en código de máquina, que luego se envía al espacio, esto seguirá contando como "C en el espacio".
La mayoría de los proyectos en realidad no hablan sobre el lado del software, por lo que solo puedo hablar sobre cosas en las que participé personalmente de alguna manera, lo cual es una muestra bastante limitada. Sin embargo, diría que los terribles espaguetis Fortran son la opción más popular.
De manera realista, las pocas computadoras portátiles que ejecutan Windows deberían contener más código que todas las computadoras de la nave espacial combinadas, considerando el favor de la tecnología comprobada y la simplicidad en la industria.

Respuestas (4)

Escribí un código que voló en 3 naves espaciales que fueron a Marte, una a la Luna, otra a un cometa y de regreso, y algunos satélites en órbita terrestre, el último de los cuales fue hace unos 10 años. Todos ellos utilizaron C.

No es el único lenguaje que existe, por supuesto, pero es popular porque la percepción es que el código se puede hacer más pequeño y más rápido usando C, sin la sobrecarga que requiere un lenguaje administrado.

Quizás las cosas han cambiado en los últimos años. Eso espero.

No tengo conocimiento de primera mano, pero supongo que los primeros satélites usaban lenguaje ensamblador: código pequeño y ajustado en procesadores lentos con poca RAM.

Bueno, los primeros satélites precedieron a las primeras versiones de C en unos quince años... Incluso el programa Apolo estaba prácticamente en modo de liquidación cuando se realizaron los primeros trabajos en C, y no fue hasta 1978 (dice Wikipedia ) que se publicó El lenguaje de programación C.

C parecería una buena suposición: C es popular para sistemas integrados, los satélites son sistemas integrados, por lo tanto, C es popular para satélites. Hay muchos agujeros que puedes hacer en esta línea de razonamiento y, por supuesto, muchos idiomas se han utilizado con diversos grados de popularidad. En ausencia de una encuesta de idiomas utilizados que responda a esta pregunta de manera decisiva, los ejemplos aquí pueden dar algo de contexto.

Tenga en cuenta que, dado que una cantidad significativa de satélites no tienen información disponible públicamente, como los satélites militares y espías. Uno podría suponer que Ada puede ser más popular de lo que sugeriría una encuesta general, dado su uso generalizado en el ejército de los EE. UU. en el pasado. Se proporciona más información sobre Ada en esta pregunta relacionada .

Un ejemplo específico del uso de C: el sistema de vuelo central de la NASA ( página de inicio de cFS ) está escrito en C y está en uso en varias misiones en este momento ( pregunta relacionada ).

Las plataformas más pequeñas como CubeSats también pueden cambiar los idiomas en la distribución del espacio: hay muchos de ellos y tienen una tolerancia al riesgo mucho mayor (y una tasa de éxito más baja). Del artículo de LightSail presentado en SmallSat 2015, "LightSail FSW (software y firmware) está escrito en el lenguaje de programación C". LightSail también ejecutó una distribución de Linux, nuevamente escrita en C.

El ensamblaje también fue un lenguaje popular, al menos históricamente, según Ron Garret, quien escribió lo siguiente sobre su trabajo en JPL en 1988: "La mayoría de las naves espaciales se programaban en ensamblador o, si realmente eras radical, Ada". El artículo con esta cita documenta el trabajo realizado en Remote Agent, un programa LISP experimental que controló el satélite Deep Space 1 durante dos días durante su misión.

Ah... Ada .
Por experiencia personal, sé que Fortran también es bastante popular. Sin embargo, creo que C lo supera.
La pregunta es un poco confusa en ese sentido, pero creo que el punto n. ° 1 en la pregunta junto con algunos de los comentarios del OP descalificarían muchos de sus ejemplos, ya que el código C se compilaría en la tierra y lo que realmente está instalado en la nave espacial sería un código de máquina, por lo que el código C no está realmente "en el espacio". Hay algunas excepciones, por ejemplo, el código C que se cargó en la nave espacial Pathfinder para ejecutarlo en el intérprete C de su sistema operativo VXWorks para solucionar el problema de inversión de prioridad.
No veo los comentarios de aspiringGuru que aclaran el punto #1... Yo mismo comenté pidiendo aclaración. Retrocediendo por un momento: contar el ensamblaje generado por el compilador en lugar del idioma en el que se escribió la fuente 1) no sigue la sabiduría convencional y 2) hace que la pregunta sea mucho menos interesante.
@ArthurDent ¿De qué tipo? Claro, Fortran 2000 supera a C, ¡pero prefiero programar en C que en Fortran IV!
La gente sigue mencionando Fortran, pero no tengo ninguna experiencia personal ni conozco misiones específicas. ¿Sigue siendo de uso generalizado? ¡Siéntete libre de actualizar mi respuesta!
@WetSavannaAnimalakaRodVance es un código bastante antiguo, creo que era Fortran 90. Afortunadamente, no tuve que trabajar con él.

Aunque no es una respuesta directa a su pregunta, podría valer la pena considerar los atributos de los lenguajes de programación en relación con las aplicaciones de vuelos espaciales.

C es una buena opción porque es un lenguaje de alto nivel que todavía está "cerca del hardware" (parece una paradoja, pero no lo es). Como ya se indicó, a menudo se usa en sistemas integrados, y los satélites/sondas espaciales son sistemas integrados. También se utiliza en aviación (aviónica) por las mismas razones. Los compiladores producirán un código eficiente en tiempo de ejecución. Suponiendo que el desarrollador siga las prácticas adecuadas, el tiempo de ejecución se ejecutará de manera predecible y determinista, lo cual es fundamental para la capacidad de prueba y la confiabilidad. El código puede ser "probablemente correcto".

Java y C# son evoluciones de C (a través de C++) que mejoran drásticamente la productividad de los desarrolladores. Pueden encontrar uso en aplicaciones de vuelos espaciales no críticos, pero no son adecuados para sistemas integrados de alta confiabilidad, como naves espaciales autónomas o sistemas críticos para la seguridad a bordo de naves espaciales tripuladas. Emplean esquemas de gestión de memoria/recolección de basura que hacen que el comportamiento del tiempo de ejecución no sea determinista y los tiempos de ejecución sean impredecibles. Si bien es más fácil escribir aplicaciones más complejas y sofisticadas en lenguajes más nuevos como Java y C# que en C, es mucho más difícil garantizar que el código nunca fallará.

Puede esperar que se usen o no otros idiomas con consideraciones similares en mente en cuanto a las características y atributos del idioma.

En su mayor parte, el lenguaje de programación C será el lenguaje de elección para la mayoría de las naves espaciales. Tiene un largo legado de ser un lenguaje confiable para misiones espaciales. Yo diría que C++ es una mejor opción debido a sus abstracciones de costo cero y seguridad de tipos. Estamos utilizando C++ para nuestro software de vuelo por estas mismas razones. Creo que una de las razones por las que C sigue siendo tan frecuente no solo en las naves espaciales, sino también en el mundo integrado en general, es que los ingenieros suelen temer las abstracciones. Pero son estas abstracciones las que nos otorgan un código más seguro, confiable y legible. Como resultado, he notado un mayor interés y aplicación de C++ para naves espaciales. Echa un vistazo a esta gran charla sobre el uso de C++ para el sistema de autonomía del rover Curiosity.

Por último, aquí hay un excelente video de un miembro destacado de la comunidad de C++, Jason Turner, sobre el uso de C++14 moderno en un Commodore 64 sin sobrecarga. Aquí demuestra que C ++ no es un lenguaje lento e inflado como muchos desarrolladores integrados han llegado a creer, principalmente a partir de declaraciones hechas en los años 90.