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?
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.
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.
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.
UH oh
UH oh
Asuntos de codificación
UH oh
superescritorio
llamado2viaje
Rikki-Tikki-Tavi
usuario3528438