neprihlásený Streda, 26. júna 2024, dnes má meniny Adriána
Programátori NASA nemôžu používať rekurziu

Značky: programovanieNASA

DSL.sk, 22.7.2015


Programátori v laboratóriách Jet Propulsion Laboratory spadajúcich pod NASA a pracujúcich na viacerých dôležitých misiách NASA musia pri programovaní softvéru používaného na sondách a ostatných vesmírnych zariadeniach dodržiavať pomerne prísne pravidlá pre spôsob programovania.

Pravidlá aplikované už viacero rokov sa dostali aktuálne do pozornosti napríklad po náznaku problémov so sondou New Horizons, ktorá prerušila činnosť kvôli softvérovému problému krátko pred preletom okolo Pluta.

Softvér pre sondy a ďalšie vesmírne zariadenia sa typicky píše kvôli efektívnosti v programovacom jazyku C. Aktuálne pravidlá pre písanie vesmírneho softvéru v tomto jazyku vydali Jet Propulsion Laboratory, JPL, v roku 2009, pričom oddelenie pre kvalitu softvéru majú JPL už od roku 2003 a prvú verziu pravidiel vydali v roku 2007.

Pravidlá pre programovanie v jazyku C majú celkom 31 pravidiel a ich účelom je samozrejme písať prehľadný čo najspoľahlivejší softvér s čo najmenej chybami, ktorého vlastnosti je možné overovať automatickou analýzou.

Pre predídenie zacyklenia je zakázané používať akúkoľvek rekurziu, skoky goto, setjmp a longjmp a cykly musia mať staticky overiteľnú hornú hranicu.


Robotické vozidlo Curiosity pre Mars na Zemi bez viacerých krytov vyvinuté v JPL, kliknite pre zväčšenie (foto: NASA)



Pre predídenie problémom s dynamickou alokáciou pamäte je pamäť možné alokovať len pri spustení úlohy a nie počas jej behu.

Viacero pravidiel sa týka programovania bezpečných multithreadových aplikácií, komunikácia úloh navzájom má prebiehať len pomocou IPC správ a napríklad je zakázaná synchronizácia úloh pomocou ich časového pozdržania.

Zložité výrazy musia byť kompletne ozátvorkované a vyhodnocovanie logických boolean podmienok nemôže mať vedľajšie efekty. Každá funkcia môže mať kvôli prehľadnosti najviac 60 riadkov a najviac šesť parametrov.

Kompilovať programy je povinné so zapnutím všetkých upozornení kompilátora a každý kód musí byť okontrolovaný aktuálne používaným nástrojom na statickú analýzu. Programátori môžu povinné pravidlá porušiť iba po vyžiadaní si písomného súhlasu, ktorý dáva komisia zložená zo softvérových expertov nepracujúcich na danom softvéri.

Pravidlá je možné sťahovať zo stránok JPL v podobe PDF dokumentu.

V minulom roku zároveň JPL zverejnili aj pravidlá pre programovanie v Jave, v ktorej sa zatiaľ programy priamo pre vesmírne zariadenia nepíšu, používa sa ale aj na vývoj softvéru používaného na Zemi v jednotlivých vesmírnych misiách. Java niektoré programátorské chyby oproti C vôbec neumožňuje robiť, JPL má ale desiatky konkrétnejších pravidiel pre vyhýbanie sa konkrétnym zdrojom problémov napríklad v aritmetike, pri multithreadových aplikáciách, výnimkách, náhodných číslach a podobne.


      Zdieľaj na Twitteri



Najnovšie články:

iPhony začali umožňovať posielať správy užívateľom Androidu cez RCS
Internetové pripojenie sa bude dať prenášať k inému operátorovi podobne ako mobilné číslo
Oznámené termíny predstavenia nového Pixelu, Galaxy Z a možno Galaxy Ring - aktualizácia 1
Čína úspešne ako prvá priniesla vzorky z odvrátenej strany Mesiaca
Orange výrazne zvýši množstvo dát v študentskom paušále Yoxo
Vlastník Telekomu v Česku testuje poskytovanie 4G siete z dronov
Zakladateľ WikiLeaks je po dlhých rokoch na slobode, odletel z Británie
App Store od Apple podľa EK protizákonne obmedzuje vývojárov, preveruje aj nový poplatok
Netflix údajne zvažuje bezplatný program s reklamami
Majitelia domu poškodeného odpadom z ISS žiadajú od NASA odškodné


Diskusia:
                               
 

"vsetkych" alebo "vsetkych" upozorneni?
btw, nejaky zamestnavatel na slovensku/KE co ma aspon podobne pravidla?
Odpovedať Známka: -6.8 Hodnotiť:
 

V COOP Jednote zamestnanci pocas pracovnej doby nesmu programovat. Zevraj je to rovnako aj v Bille.
Odpovedať Známka: 9.8 Hodnotiť:
 

Robim v Jednote uz par rokov pracujem a veru ze programovat mozem a dokonca to mam aj v pracovnej zmluve, tak neviem o com tocis.
Odpovedať Známka: 0.6 Hodnotiť:
 

No tak súdiac podľa toho ako vypadajú jednotlivé prevádzky po slovensku tak by som povedal že derové štítky sa nedajú považovať za programovanie ako je popísané v článku.
Odpovedať Známka: 6.6 Hodnotiť:
 

a ten hnoj z ovocia a zeleniny čo tam predávajú.
Mali by si upgradnuť kalendár už nieje rok 95.
Odpovedať Známka: 5.0 Hodnotiť:
 

To si bol v jednote naposledy este v 1971 ze?
Odpovedať Známka: 0.0 Hodnotiť:
 

... dotknuty coop jednota programator...
Odpovedať Známka: 10.0 Hodnotiť:
 

Slavo, si to ty? :D
Odpovedať Známka: 10.0 Hodnotiť:
 

Nejaky style-guide maju vsade, kde robia viac ako dvaja.
Odpovedať Známka: 7.8 Hodnotiť:
 

NASA mi príde bigotne konzervatívna.
Tam asi experimentujú len s overenými 20 ročnými postupmi.
Odpovedať Známka: -7.1 Hodnotiť:
 

Neviem co by si robil keby ti padla sonda za niekolko milionov len preto ze niekto napisal zle funkciu a ona sa zacykli.
Odpovedať Známka: 7.5 Hodnotiť:
 

ved nech to odbehne manualne resetnut
Odpovedať Známka: 10.0 Hodnotiť:
 

ts, v jave, ked narazi sonda na mimozemsku civilizaciu, tak
throw alienEncounter(IN_THIS_VERY_MOMENT)
definovane v
class alienEncounter extends runtimeException(int time)
Odpovedať Známka: -6.4 Hodnotiť:
 

ty si toho v jave asi este vela nenaprogramoval, co?
Odpovedať Známka: 8.0 Hodnotiť:
 

Jeho celu tvorbu si videl v prispevku vyssie.
Odpovedať Známka: 10.0 Hodnotiť:
 

v pythone by to bolo jednoduche

import universe
import planetary_probe

new_horizon = planetary_probe.probe(universe.universe_rules)
new_horizon.do_stuff()
Odpovedať Známka: 4.2 Hodnotiť:
 

import universe
import planetary_probe

new_horizon = planetary_probe.probe(universe.universe_rules)
pluto = universe.milkyway.sol_system.planets.deprecated[0]
new_horizon.do_stuff(pluto)
Odpovedať Známka: 0.8 Hodnotiť:
 

.doStuff(uranus)
Odpovedať Známka: 2.5 Hodnotiť:
 

preboha do.ebal som vam naming conventions
Odpovedať Známka: 7.4 Hodnotiť:
 

Observable
.From(SolarSystem)
.Where(planet => planet.equals(Planet.Mars))
.Do(mars => doLand(mars))
.Subscribe();
Odpovedať Známka: 5.7 Hodnotiť:
 

kentus!
Odpovedať Známka: -8.2 Hodnotiť:
 

Kentus si ty, ked nevies co to je
Odpovedať Známka: 8.5 Hodnotiť:
 

# mas tam chybu

import universe

>> RuntimeError 'maximum recursion depth exceeded'

# zabudol si na:

sys.setrecursionlimit(EARTH_SOLAR_SYSTEM_SIZE)

Odpovedať Známka: 1.7 Hodnotiť:
 

"Každá funkcia môže mať kvôli prehľadnosti najviac 60 riadkov a najviac šesť parametrov"
ktory debil by to uz len takto napisal????
Odpovedať Známka: -7.5 Hodnotiť:
 

preco debil? vo vacsine pripadov 60 riadkov na funkciu staci... je to lahsie testovatelne aj ked to vola dalsie funkcie... A tie parametre tiez, malokedy potrebujes viac ako 6 paramerov ktore su kompletne na sebe nezavisle ze by sa nedali zlucit do triedy. Ono vyznat sa vo funkcii s 20 parametrami zabere cas, ale ked tak mozes bachnut triedu/strukturu + 2,3 parametre tak je to prehladnejsie a plni to to isty ucel. Taktiez je to lahsie na udrzanie "naming convention" v celom projekte

k funkciam, ide o to ze si mozes unit otestovat kazdu nezavislu (aj zavislu cast kodu, napr mocking) takze to znizuje pravdepodobnost chyby.
Odpovedať Známka: 10.0 Hodnotiť:
 

ja som to prave tak myslel, ak niekto bezne pise funkciu s 60 riadkamy a 6 parametramy.. mal by pouvazovat nad inym zamestnanim/hobby
Odpovedať Známka: -5.2 Hodnotiť:
 

Ty by si (koli pravopisu) nemal pisat prispevky do diskusii.

Odpovedať Známka: 7.0 Hodnotiť:
 

FAIL! koli sa pise s v
Odpovedať Známka: 7.4 Hodnotiť:
 

Ale inak ma pravdu
Odpovedať Známka: 4.7 Hodnotiť:
 

ja by som tvrdil, ze aj to je vela ;)
Odpovedať Známka: 2.0 Hodnotiť:
 

triedu??!!! isto nie! predavat parametre implicitne je cesta do pekla
Odpovedať Hodnotiť:
 

no divil by si sa kolko takych debilov existuje... kolega minule refactoroval nejaky 10 rocny kod (viacero jednoucelovych programov, ktore potrebovali kvoli zavedeniu SEPA aj trochu upravit) a teda niekedy sme na to cumeli, cely program pozostaval napr z cca 3000 riadkov absolutne nestrukturovany do nejakych metod/makier/whatever...
Odpovedať Známka: 4.3 Hodnotiť:
 

Ked fungoval jak mal tak to je hadam jedno
Odpovedať Známka: -5.0 Hodnotiť:
 

Je to jedno, pokial nad tym kodom nie je potrebne spravit "drobnu zmenu".
Ale teda nechcel by som robit white-box nad 3000riadkovym nestrukturovanym bordelom...
Odpovedať Známka: 8.2 Hodnotiť:
 

a uz si videl kod webminu?
Odpovedať Známka: 10.0 Hodnotiť:
 

to potesi, a este ked tam je niekolko if else :)
Odpovedať Známka: 10.0 Hodnotiť:
 

A prečo tí magori používajú C-čko?!

Veď to je ako rezať dosku nožíkom!

Prečo radšej nepoužívajú niečo vhodnejšie a takpovediac vyvinuté pre tento účel, ako napríklad jazyk ADA?

Určite preto, aby to bežalo o chlp rýchlejšie, že?

Samozrejme, rekurzia je modla teoretikov... a toto je ukážkový príklad, do akej miery je teoretická informatika využiteľná pri písaní programov určených do skutočného života. :-D

Odpovedať Známka: -7.3 Hodnotiť:
 

Tiez nemam rekurziu v laske ,ale ako by si inak poriesil operacie so subormi , pripadne s objektami co odkazuju samy na seba ?
Odpovedať Známka: -6.0 Hodnotiť:
 

pri kazdej rekurzii si mozes spravit nejaky int, ktory pri opatovnom volani tej istej funkcie inkrementujes... ak je napriklad int >= 1000, tak vies, ze je niekde problem.. vo vacsine pripadov problem medzi klavesnicou a stolickou ;)
Odpovedať Známka: -2.7 Hodnotiť:
 

Každú rekurziu vieš ekvivalentne nahradiť cyklom+zásobníkom. Cyklus a zásobník zrejme povolené majú.
Odpovedať Známka: 9.0 Hodnotiť:
 

je to tak, ako pise kolega... opacne to ale neplati :)
http://dopice.sk/e8i
Odpovedať Známka: 3.3 Hodnotiť:
 

Mňa by zaujímalo, prečo si myslíš, že iteračný algoritmus je problém nahradiť rekurziou...
Odpovedať Známka: 6.0 Hodnotiť:
 

vdaka za upozornenie :] iteracia a rekurzia sa daju navzajom nahradit. mea culpa
Odpovedať Známka: 10.0 Hodnotiť:
 

nie vsetky rekurzie su primitivne rekurzie nahraditelne iteraciami. som zvedavy ako by si ziteroval Ackermannovu funkciu :)
Odpovedať Známka: 0.0 Hodnotiť:
 

beriem spat, vygooglil som si priklad non recursive ackermanna :)
kazdy den sa nieco nove dozviem :D
Odpovedať Známka: 7.1 Hodnotiť:
 

No pozor toto su predsa programy pre mimozemsky zivot xDDD
Odpovedať Hodnotiť:
 

Chcel som sa spýtať, čo to je rekurzia, lebo nie som IT, ale už som vygúglil, takže vlastne ani neviem, načo píšem tento príspevok...
Odpovedať Známka: 10.0 Hodnotiť:
 

Rekurzivna funkcia ,polopate povedane vola vo svojom vnutri sama seba, je nebezpecna kvoli zacykleniu.
Odpovedať Známka: 10.0 Hodnotiť:
 

neviem programovat, akurat viem par zakladov co sa pouzivaju v .bat suboroch. tak sa pytam, myslene rekurzie su nieco ako toto?

:abc
goto abc
Odpovedať Známka: -3.3 Hodnotiť:
 

Instrukcia:
Chod do piche, kedze si z nej vysiel a mas tam zasa ist, dojde k zacykleniu a tym padom pretrtkas celu noc az kym nedojde k restartu.
Odpovedať Známka: 4.3 Hodnotiť:
 

to máš tak, treba ti šťať, tak ideš. doštíš a sadneš si k pc a zas ti treba šťať, tak ideš, doštíš a sadneš si k pc a treba ti šťať, tak ideš. doštíš a sadneš si k pc a zas ti treba šťať, tak ideš, doštíš a sadneš si k pc a treba ti šťať, tak ideš. doštíš a sadneš si k pc a zas ti treba šťať, tak ideš, doštíš a sadneš si k pc a treba ti šťať, tak ideš. doštíš a sadneš si k pc a zas ti treba šťať, tak ideš, doštíš a sadneš si k pc a treba ti šťať, tak ideš. doštíš a sadneš si k pc a zas ti treba šťať, tak ideš, doštíš a sadneš si k pc a treba ti šťať, tak ideš. doštíš a sadneš si k pc a zas ti treba šťať, tak ideš, doštíš a sadneš si k pc a treba ti šťať, tak ideš. doštíš a sadneš si k pc a zas ti treba šťať, tak ideš, doštíš a sadneš si k pc. pre toto je to nebezpečné..
Odpovedať Známka: 4.5 Hodnotiť:
 

pri tretej rezurzii som sa dosral
Odpovedať Známka: 9.0 Hodnotiť:
 

akurat, ze toto nie je rekurzia, ale goto
Odpovedať Známka: 6.0 Hodnotiť:
 

dobre moj krasny a ako by si rekurziu napisal do ludskeho jazyka s obmedzenym poctom znakov? :)
Odpovedať Známka: 3.3 Hodnotiť:
 

Najjednoduchšia definícia rekurzie v slovníku cudzích slov je asi takáto:

rekurzia
viď: rekurzia


Toto je triviálna, avšak nekonečne zacyklená rekurzia.

Odpovedať Známka: 10.0 Hodnotiť:
 

Potom trochu netriviálnejšie priblíženie rekurzie by bol napr. návod na rozobratie súčiastky(to je jedno akej súčiastky)

Ako sa rozoberá súčiastka:
1. ak sa dá súčiastka rozobrať, nájdeme spôsob ako ju rozobrať (obyčajne sú na nej skrutky ktoré treba odskrutkovať, alebo je tam zips, suchý zips, magnet, závlačka alebo iný spôsob spoja, ktorý treba rozpojiť)
2. nájdeným spôsobom rozoberieme súčiastku na menšie súčiastky, z ktorých sa skladá.
3. rozoberieme každú súčiastku, ktorá nám takto vznikla.
4. ak sa už súčiastka nedá rozobrať, odložíme si ju nabok do vitríny úspechov.

Tu je rekurzívny krok č. 3, pretože tento návod používa sám seba na riešenie problému v kroku 3 ..
Táto rekurzia je konečná, pretože predokladáme že prinajhoršom skončí tak že vitrína úspechov bude plná kvarkov, na ktoré sa nám podarilo rozložiť súčiastku a na menšie ako kvarky to už nedokážeme.
Táto rekurzia by mohla byť aj nekonečná, ak by krok 4. znel takto:
4. ak sa už súčiastka nedá rozobrať, aj tak rozober túto súčiastku
Odpovedať Známka: 10.0 Hodnotiť:
 

V kontexte článku je to v podstate jedno čo je rekurzia. Zrejme štatisticky prišli na to, že na sondách s obmedzenými prostriedkami jej používanie robia najväčšie problémy.

Rekurzia je napr. vyhľadávanie všetkých súborov v nejakom priečinku vrátane jeho podpriečinkov. Teda ak pri hľadaní narazím na priečinok, hľadám aj vo vnútri. Ak je tam ďaľší, hľadám aj v ňom atď. :D
Odpovedať Známka: 6.7 Hodnotiť:
 

Predstav si to ako ked si pichnes hlavu do svojej riti... a stale hlbsie a hlbsie
Odpovedať Známka: 5.8 Hodnotiť:
 

a ked si ju prestrcis cez usta, tak si ju zas pichnes do riti a stale dookola.
Odpovedať Známka: 9.3 Hodnotiť:
 

To som zabudol dodat....
Odpovedať Známka: 6.7 Hodnotiť:
 

Vidíš? A presne preto sa v NASA nepoužíva rekurzia.
Odpovedať Známka: 10.0 Hodnotiť:
 

*Rekurzia* vid *rekurzia*
Odpovedať Známka: 7.3 Hodnotiť:
 

ja vlastne tiež neviem, prečo som klikol na odpovedať.
Odpovedať Známka: 6.9 Hodnotiť:
 

Na to aby si pochopil rekurziu musis pochopit rekurziu
Odpovedať Známka: 10.0 Hodnotiť:
 

na to aby si pochopil rekurziu, musis najprv pochopit rekurziu.
Odpovedať Známka: 10.0 Hodnotiť:
 

Určite tam všetci využívajú dynamické programovanie :) Pekne si problém rozdelia do podproblémov a si z toho vypočítali algoritmus s tromi cyklami :)
Odpovedať Známka: 6.0 Hodnotiť:
 

:) (: :) ( ͡° ͜ʖ ͡°)
Odpovedať Hodnotiť:
 

fail
Odpovedať Hodnotiť:
 

Nechapem, preco to jednoducho nebastlia rovno v ASM pre danu platformu. Ved chechtakov na tieto zbesile projekty ide viac nez je zdrave, takze zaplatit par koderov by nemusel byt problem. A navyse sa to da odladit na uplne maximum, co pri ziadnom C/JAVA/atd.. nehrozi.

Odpovedať Známka: -1.7 Hodnotiť:
 

nah, ani nie.
momentalne ide viac penazi na pre ludstvo dolezitejsie projekty typu: "preco su lesbicky tucne". vies - usa a priority...
Odpovedať Známka: 5.3 Hodnotiť:
 

Lebo ich žiadny chlap nechce - vyriešené. Čo dostanem za výskum?
Odpovedať Známka: 6.0 Hodnotiť:
 

kebab do huby :D
Odpovedať Známka: 10.0 Hodnotiť:
 

3 roky odňatia slobody nepodmienečne za homofóbny prejav. :-D
Odpovedať Hodnotiť:
 

Základné konštrukcie jazyka C sú implementované tak často a tak primitívne, že by som tam nevidel žiaden problém s rýchlosťou či efektivitou kódu. Naopak, C prináša obrovské výhody z pohľadu efektivity písania a ladenia kódu.

Ak budeš niekedy riešiť problém na veľmi nízkej úrovni, napríklad budeš chcieť funkciu log2() pre celé čísla, áno, môže sa Ti hodiť použiť konkrétna inštrukcia niektorej platformy. To však nie je problém napísať do C kódu ako inline assembler.

Takže by som to videl tak, že písať dnes niečo kompletne v jazyku symbolických inštrukcií je zlyhanie managementu / zdravého rozumu.
Odpovedať Známka: 8.2 Hodnotiť:
 

Vyborna prednaska na tuto temu je Mars Code ktoru prednasa riaditel LARS (Lab. for reliable software) . Je zaujimave, do akej miery testuju software a akymi metodami.

http://bit.ly/1HJi8DQ

Odpovedať Hodnotiť:
 

funkcny link tu: http://dopice.sk/e8I
Odpovedať Hodnotiť:
 

ak sa spravne pamatam na prednasky, tak kazdy rekurzivny algoritmus sa da napisat nerekurzivne... len netreba byt lenivy
Odpovedať Známka: 0.0 Hodnotiť:
 

Dá sa, ale nemá to žiaden zmysel.
Odpovedať Známka: -5.6 Hodnotiť:
 

Akože, žiadny zmysel. Uvedomuje si vôbec, čo znamená zavolanie funkcie?
Odpovedať Známka: 7.5 Hodnotiť:
 

Počuj, on si to zrejme nielen uvedomuje, ale tomu asi aj rozumie.

Totiž, svätým grálom teoretických informatikov je využívať rekurziu tzv. rekurziu na chvoste, ktorá má v podstate rovnaké účinky ako iterácia, len to stále vyzerá ako rekurzia.

(Pre každého, kto aspoň trochu pričuchol napr. k funkcionálnemu programovaniu, bola rekurzia na chvoste takpovediac jeho denným chlebíčkom.)
Odpovedať Hodnotiť:
 

"Assembly was the original answer but I was wrong and the great coders let me know what the real answer was. -Jillian
Speaking only of the spacecraft code, that was written in C using the Nucleus RTOS. I'd bet there was some assembly in the board support package and maybe some sprinkled here and there, but it the vast majority was written in C. The guidance and control algorithms were auto-generated C via Simulink. --Christopher Krupiarz, New Horizons Flight Software"
-zdroj reddit AMA
Odpovedať Známka: 10.0 Hodnotiť:
 

dakujem oekne za dobry clanok.
posielam kvety
Odpovedať Známka: 5.0 Hodnotiť:
 

ďakujem za peknú diskusiu
Odpovedať Známka: 4.3 Hodnotiť:
 

dakujem svojej rodine a priatelom, janke hospodarovej a aj vsetkym ostatnym
Odpovedať Známka: 7.8 Hodnotiť:
 

ku gratulacii sa pripaja kolektiv, stryko Stefan, teta Julia, pan riaditel Komorny, dcery Agata a Kornelia, synovia Martin, Servac a Bonifac. Vnucky Sofia a Izabela posielaju velku pusu.
Odpovedať Hodnotiť:
 

... posielam rekurziu.
Odpovedať Známka: 3.3 Hodnotiť:
 

to understand recursion, you must understand recursion
Odpovedať Známka: 5.0 Hodnotiť:
 

Nasa pouziva GCC a okrem Java tu na zemi pouzivaju aj Python,
fajne.
Odpovedať Hodnotiť:

Pridať komentár