Publicado hace 7 años por RubiaDereBote a lars-lab.jpl.nasa.gov

Estándar interno que tiene el departamento Jet Propulsion Laboratory (JPL) de la NASA para la programación en C de sus sistemas.

Comentarios

D

#4 Deja de hacer el ridículo.

RubiaDereBote

#10 JPL es el laboratorio de propulsión de cohetes de la NASA: http://jpl.nasa.gov

RubiaDereBote

#3 Gracias@Lobazo.

Shotokax

#21 el hardware no soporta C, solo soporta binario.

LuisPas

#5 se cree el nuevo

D

#26
No hay nada como el Ook!.

Findeton

#16 Pues porque C está probado, porque el hardware que tienen soporta C y lo mismo no soporta Rust, y porque hay programas que analizan el código de C y comprueban que no tiene multitud de tipos de errores (validación formal), cosa que con otros lenguajes no ocurre.

Cancerbero

#2 Es cutre hasta para ser un troll.

juantxovilla

#11 no, jpl, a pesar de su nombre en la actualidad no tiene nada que ver con cohetes, es el lavoratorio de la nasa principalmemte encargado de las sondas y robots interplanetarios. Su nombre viene de que en sus inicios fueron sobretodo a la creación de motores y cohetes, pero eso ya no tiene nada que ver con el jpl actual

ruinanamas

Rule 11 (simple control flow)
The goto statement shall not be used.

Findeton

#28 Correcto, me refería a que a menudo no hay soporte/compiladores para otros lenguajes más extraños o novedosos, como Rust.

Findeton

#14 El JPL sigue haciendo cosas relacionadas con cohetes pero, en cualquier caso, sigue siendo parte de la NASA. Que hagan cohetes o no no tiene nada que ver con la noticia: es correcto decir que son la NASA.

brainsqueezer

#16 #26 Nadie ha dicho que solamente programen en C. Cualquier proyecto mas o menos grande acaba teniendo código en diferentes lenguajes. Ni hablemos cuando se trata de cientos de proyectos.

Creo que este documento debe abordarse más con el objetivo de hacer que el código no falle, que debatir cual es el mejor lenguaje.

Findeton

#23 Esta es una de las muchas cosas que fastidian de C y C++: Undefined Behaviour. Por eso me gusta Rust, pero le queda un larguísimo camino todavía...

D

#39 Cocopino al menos era majete. Este es como mucho ese otro que has dicho.

D

#22 En absoluto. El presupuesto de la NASA va ajustadísimo, y crear (y mantener) un compilador consistente que genere código decente no es moco de pavo, y menos cuando hablamos de un animal tan difícil de domar como C.

D

#25 técnicamente es dirigida por la NASA pero la organización padre es Calltech.
Del propio documento: Acknowledgement
The research described in this document was carried out at the Jet Propulsion Laboratory, California Institute of Technology, under a contract with the National Aeronautics and Space Administration.

© 2009 California Institute of Technology. Government sponsorship is acknowledged.

Así que me da que es solo el estándar del JPL, no de toda la NASA aunque supongo que serán muy parecidos.

D

#32 Que yo sepa fue por una junta que no soporto las bajas temperaturas de un deposito y como que una fuga de hidrógeno teniendo un mechero gigante cerca no es buena idea. lol

D

Rule 29
Non-constant pointers to functions should not be used.


Vaya C de chichinabo entonces.

D

#13 decides no usar algo que es potente y que lo diferencia de otros muchos lenguajes. Por poner un caso, te complica el código de una simple calculadora.
#15 sip. Y la pregunta siguiente es por qué no pasan de C y usan alguno de los lenguajes que tienen capadas esas posibilidades de serie. Puede haber decenas de respuestas.

Thelion

#26 Eso iba a poner, que programen en Ada.

Findeton

#54 Supongo que te refieres a la diferencia entre lenguajes como C/C++ donde se realiza una gestión manual de la memoria y lenguajes como Java o Javascript que hacen uso de recolectores de basura. Rust es como C/C++ en ese aspecto, y en principio tienes que hacer tú mismo el trabajo sucio. Eso me gusta. Por supuesto, si quieres hacer uso de un recolector de basura, también puedes, no tienes más que usar alguna librería para ello (igual que en C++).

RubiaDereBote

#14 Laboratorio es con B.
y el JPL forma parte de la NASA vuelve a leer #11.

g

#16 #21 Los dos motivos que más se dan para promover el uso de C/C++ en sistemas embebidos real-time o safety-critical son:

1. Que C/C++ son lenguajes muy conocidos y, por tanto, hay muchos programadores que saben programas en esos lenguajes, mientras que hay muchos menos programadores que sepan otros lenguajes más idóneos, como Ada.

2. Que la mayor parte de los vendors de microcontroladores proporcionan compiladores para C/C++, pero no para otros lenguajes más exóticos, como podría ser Ada.

Dicho esto, me sigue pareciendo una locura usar C/C++ por la gran cantidad de errores que se pueden cometer, incluso un programador experimentados y versado en las intricacies de C/C++.

#12 Para paliar los peligros de C/C++ es por lo que surgen estándares de codificación como MISRA y estos estándares de la NASA/JPL. Si estos estándares prohiben usar features de C/C++, es porque esas features son PELIGROSAS (con todas las letras y en mayúsculas).

D

JPL != NASA

perro_marron

#71 por la inmensa cantidad de herramientas que existen para c y para ningun otro lenguaje. Si consideras c como una especie de ensamblador todo cobra sentido. Muchos de los que trabajamos en sistemas empotrados usamos c pensando en el codigo que genera en lugar de la filosofia del lenguaje, que es lo que tocaria realmente.

D

#49 definir una función es lo mismo que definir un puntero constante a ella. Claro que tiene sentido la restricción, de hecho existen otros lenguajes que tienen esa restricción implícita. La cuestión es por qué no usan esos directamente, que es en lo que estamos y que ya hay bastante comentado.
#27
Hasta ahí llegamos. En C se puede hacer de todo, para lo bueno y para lo malo.
No deben tener sencillo traducir desde otros lenguajes de tipado más robusto a C.
#21 sip, tiene sentido, yo me apunto a esa tesis. Ahora solo falta que alguien que trabaje en la nasa nos lo confirme
#57 sin acritud: tu compara tu aporte al debate con los del resto.
#52 cientos de proyectos y decenas de lenguajes los tiene una empresa grande sin necesidad de tener perfil tecnológico. En la nasa deben moverse en un orden de magnitud de miles o cientos de miles. Sería interesante ver el ciclo completo de SQA; las reglas de codificación son solo una pequeña parte y supongo no la más importante.

ufoisthebest

#43 #27 lo que provoco ese fallo tambien es curioso de saber https://es.wikipedia.org/wiki/Inversi%C3%B3n_de_prioridades?wprov=sfla1

perro_marron

#12 pero punteros const a funciones si que se puede, esta restriccion tiene todo el sentido del mundo. Te impide ejecutar una direccion de memoria. fnptr=0x1234; fnptr(); por ejemplo. Hacer esto puede ser necesario si programas contra contra hardware puro y duro, pero es muy peligroso si estas bajo un sistema operativo.

c
NapalMe

#96 Entonces me habré confundido, te pido disculpas.

JAIL

#12 ¿Por?

juantxovilla

#20 y #25 pues leeme tú tmb, yo también he dicho que es de la nasa lol. Mi 'no' era a que no es de cohetes desde hace muchísimos años, ahora es la parte de la nasa q se dedica a la exploración interplanetaria. Ups, exactamente lo que dije en el otro comentario ;).

Sorry por la v

llorencs

#14 Escrito con móvil? Lavoratorio? Hacen lavativas? lol

box3d

#12 el razonamiento viene de una de las reglas MISRA que no aparecen por ser propietarias.

Se quiere evitar ejecutar una direction de memoria que se desconozca a priori o, en el peor de los casos, memoria corrupta. En un sistema embebido los punteros constantes se almacenan en ROM lo que garantiza que no se corrompa, por eso se permiten.

g

#105 PS #12 No conozco muchas situaciones en las que necesites un puntero no constante a función. La regla 29 no prohibe pasar punteros no constantes como argumentos de función, sino usar punteros no constantes que apunten a una función.

j

#66 Y por eso he dicho que tu frase de #21 es cierta...

g

#109 Un lenguaje de sistemas no es adecuado para sistemas embebidos si requiere un entorno de ejecución pesado. Además, los sistemas embebidos requieren otras muchas cosas: punteros, acceso a periféricos, interrupciones, la posibilidad de garantizar formalmente el tiempo de ejecución y la política de planificación de tareas...

Ada tiene todo eso. Ada permite reducir el runtime a lo más mínimo mediante diferentes perfiles (profiles). Ada proporciona un perfil para sistemas críticos en tiempo real (Ravenscar). Ada proporciona verificación formal. etc. etc.

En cuanto a Rust, ni lo he usado, ni he oído de nadie que lo use para sistemas embebidos. ¿Que pueda usarse? Pues a lo mejor sí, pero no sé de nadie que lo use para aplicaciones serias. Además, también hay sistemas empotrados con Java o .NET, pero eso no significa que sean lenguajes adecuados para ello.

Pero, sobre todo, Rust nació en 2010. Ada nació en 1980, por lo que está bien probado y se ha usado en muchos proyectos industriales y militares, y la industria contribuye a su desarrollo y a que continúe siendo revisado y adaptado a las necesidades actuales. En cambio, Rust todavía está en pañales, tiene features inestables (según leo) y sólo es usado por hobbyists y por Mozilla para Firefox, que no es precisamente un sistema embebido.

Además, Rust en su estado actual no parece 100% apto para sistemas embebidos, según indica este paper: http://iot.stanford.edu/pubs/levy-tock-plos15.pdf

No es que quiera defender Ada a muerte, pero todo apunta a que Rust no es una alternativa real a día de hoy. A lo mejor para un proyectillo de Arduino de andar por casa está bien, pero yo no me atrevería a usar Rust para el sistema de control de un avión.

kolme

#89 Te queda mucho por aprender, pequeño Padawan. lol

D

#21 "cosa que con otros lenguajes no ocurre"
No es cierto. Muchos lenguajes lo tienen, además de suites de test variadas.

D

#60 Has generalizado sin especificar, por lo que yo he respondido generalizando.

NapalMe

#16 Es que los de la NASA son tontos

avalancha971

#34 Creo que el problema es que no has visto que un usuario es al que le has dicho que sí son de la NASA, y otro usuario es el que te ha dicho que ya no son el laboratorio de cohetes.

Aclaro que yo son un tercer usuario.

llorencs

#18 Vas a quedar no "vas ha quedar".

RubiaDereBote

#45 Lo dice la entradilla.

NapalMe

#71 Sin acritud, si no entendiste el mensaje detrás del sarcasmo es tu problema.
Por si no lo pillas, estoy seguro que esa gente tiene una razón perfectamente lógica para cada punto de ese estándar, y he usado el sarcasmo para mostrar la gracia que me ha hecho tu amago de duda al respecto.
PD. Por cierto, muy bonito lo de editar el mensaje.

NapalMe

#76 Si estas dando a entender que te he llamado tonto a ti estas suspendido en lógica, decir que la NASA no es tonta no implica que lo seas tu, así que no vengas con falsos victimismos.
He dicho que me hace gracia que lo cuestiones, nada mas, pero como has editado tu comentario, las respuestas dejan de tener sentido.
Un saludo.

D

#70: Puedes... no sé, depurar el código.

D

#27 #15 Solo añadir que si algo hay depurado, es el compilador gcc, es a prueba de bombas, y quizá sea el compilador soportado por más tipos de arquitecturas, sean del año que sean.

Reconozco que odio C, y con estas limitaciones, lo odiaría mucho más, pero hay que reconocer que si uno necesita un binario fiable y predecible, ha de usar C y gcc por fuerza mayor.

D

#44 el goto se debe usar siempre que sea necesario. Es decir: nunca.
#22 está por ver todavía el primer centro de desarrollo donde tengan recursos para hacer todo lo que quieran y más.
#71 lo pillo perfectamente. Como en la nasa no son tontos, el tonto soy yo por cuestionar.
Que soy tonto lo tengo asumido desde que suspendí el primer examen y corté con la primera novia. Pero no suelo entrar a discutir esas cosas, como comprenderás. Ni lo de editar.
MNM es libre, cada uno se mueve aquí como quiere. Lo de sin acritud era sincero.

D

#39 Estás obsesionado conmigo, chatín. Se te nota el escozor.

Y yo ni recuerdo dónde te he visto. lol

D

#72 lo pillo perfectamente. Como en la nasa no son tontos, el tonto soy yo por cuestionar.
Que soy tonto lo tengo asumido desde que suspendí el primer examen y corté con la primera novia. Pero no suelo entrar a discutir esas cosas, como comprenderás. Ni lo de editar.
MNM es libre, cada uno se mueve aquí como quiere. Lo de sin acritud era sincero.

D

Como firme defensor de la programación defensiva, leo con interés. De hecho lo voy a guardar y todo.

D

#78 No, esta vez me he topado con tu comentario por casualidad. Normalmente me invocas para insultarme personalmente, pero veo que también recurres a la más cobarde difamación.

Lo dicho, mi niño acosador, no te obsesiones. Vivirás mejor.

Y no te equivoques, chiquitín, que tú le dés tantísima importancia a Menéame no significa que los demás también lo hagamos.

D

#58 Una regla que se erifica casi al 100% es que si tu editor o tu IDE es una mierda, tu código será una mierda. Da igual lo bueno que te creas.

D

#26 Dicen que uno de los grandes retrasos y sobrecostes del programa J35 es por el Ada. El leguaje estará todo lo bien que quieran, pero no tiene el soporte de un buen IDE, entornos de desarrollo y depuradores que tiene el C.

D

Cosa que no interesa a nadie pero meneamos para hacernos los interesantes.

D

#87 no te preocupes, no me he ofendido. No tiene importancia.
No he editado, pero eso tampoco la tiene.

ElPerroDeLosCinco

#101 Tu idea me parece buena, pero en la NASA no pueden dedicarse a formar a la gente. Se supone que sus programadores ya están sobradamente formados y lo único que cabe hacer para prevenir errores humanos es auditar el código y capar las técnicas mas peligrosas.

D

#99 Lee otra vez, payasete, que ni eso sabes.

Sólo te recuerdo de verte aparecer en mis conversaciones para insultarme, no esperes que haga como tú y me grabe en la memoria dónde y por qué.

También me acuerdo de haberme tirado un cuesco esta mañana, y para que te hagas una idea el cuesco me importa más que tú.

A los trolls seguidistas como tú os llamo ”acólitos”, y me parto risa sólo de pensar que dedicáis tiempo a bucear en Menéame buscándome para nada. Qué vida más triste la vuestra.

D

#116 Psss, psss... toma otro cacahuete, monín.

D

#118 Toma un cacahuete, trollete.

Findeton

#17 Esta gente tiene suficientes recursos como para mantener su propio compilador, diría yo.

RubiaDereBote

#29 Entonces no consigo entender dónde ves el problema.

D

#4 Podías irte tomar por el culo sin acritud.

r

#1 Rivera, ¿eres tú?

Findeton

#61 Es difícil generalizar especificando lol. La cosa es que Para muchos dispositivos hardware, el número de herramientas, compiladores etc es bastante limitado. Por su uso pervasivo, su historia, y por la facilidad de implementar un compilador de C (ya que es un lenguaje relativamente pequeño, que no sencillo, y relativamente cercano al ensamblador/metal), normalmente siempre puedes contar con un compilador de C.

Findeton

#65 No, porque he dicho que con otros lenguajes no ocurre. No he dicho que con todos los demás no ocurra.

D

#4 Piérdete, imbécil.

Findeton

#105 Dices que usar C/C++ te parece una locura, pero, ¿qué alternativas reales hay? Quizás Rust y poco más. Cuando estás en sistemas empotrados, o en sistemas de bajo nivel como microcontroladores, NO puedes usar lenguajes de alto nivel con recolectores de basura (como Golang).

Findeton

#108 Un lenguaje de sistemas es un lenguaje de suficiente bajo nivel tal que se puede crear un SO con él. Lo cual apunta a que sea adecuado para sistemas empotrados/microcontroladores, precisamente por ser de bajo nivel. Y si, de hecho es perfectamente posible usarlo para programar microcontroladores y la gente lo hace.

D

#31 Si, yo también pensé en ADA, pero luego dije: Vaya, quizás no es soportado en los micros que utilizan.

Findeton

#40 No he especificado de qué otros lenguajes hablo, ni a qué dispositivos/hardware me refiero, así que tú digas que no es cierto me parece sorprendente.

D

#1 Venezuela tiene una base chavista en Marte , me lo ha dicho capriles

a

#15 La gran potencia y flexibilidad del C podría calificarse de diabólica por el precio de inseguridad que puede tener a la mínima torpeza. Los tipos de warnings que pueden generar algunos compiladores actuales son muy amplios. Cada uno de ellos se refiere a la inseguridad potencial de alguna práctica.

Por ello, creo que los compiladores no solo deberían ser capaces de ofrecer un modo amplio de avisos (warnings) sino que para cada tipo de ellos, el propio compilador debería ofrecer un enlace web con información adicional, porque no todos los warnings resultan triviales y obvios.

En otras palabras, los compiladores de C en particular podrían ir acompañados de funcionalidad didáctica, porque no hay nada más educactivo que aprender de los errores propios.

a

#103 Sería una tarea para los que desarrollen compiladores. La NASA tiene sus propias ideas sobre lo que considera inadecuado. Yo me refiero a ofrecer información adicional sobre todos los Warnings. Una especie de asistencia para programadores que seguramente ya incluyan algunas IDEs.

D

#2 En todo caso está generando animadversión hacia Podemos, sicología inversa... y gracias a que le das de comer pues ya tienes tu karma respectivo, como la DEA con el narcotráfico.

D

#4 A mí me ha hecho gracia. Lo que no te voto positivo por el karma y eso.

D

#48 respondí al comentario, no a la noticia.

AlphaFreak

#35 Por no hablar de la decisión política (o de "gestión") de reutilizar el software del Ariane-4 tal cual...

kolme

#23 ¿Qué tiene vim que ver con la chapuza?

kolme

#23 ¿Y qué tiene el editor que ver con que el resultado sea una chapuza?

C

#23 Alguna referencia sobre la initialización a cero de gcc?

Find
D

Un día de estos voy a subir el Neufert a ver si hago portada.

#quierocreer

D

#9 ese tenia gracia...este es un cocopino o malversan como mucho...

D

#30 Una pregunta (parece que usted controla): ¿soporta rush recolección de memoria?

xyria

#3 Por no hacer caso de un warning, dado que compila y se ejecuta perfectamente, llevo un año con una "memory leak" que me genera errores muy de tiempo en tiempo. El código parece perfecto, sigo las sugerencias del compilador. Al final, va a tener razón el autor: Reescribe el código. Lo malo es que es una jodida clase con muchas propiedades y eventos y me da pereza reescribirla.

1 2