Автор: Гергана Карабельова
На 20 юли 1969 година света притаява дъх, вперил очи в небето и в телевизионния екран. На тази дата се случва едно историческо събитие от голяма висота, което се излъчва в глобален мащаб – за първи път човешки крак стъпва на Луната. Нийл Армстронг и Бъз Олдрин остават в историята.
На 26 ноември 2011 година NASA изпраща марсохода „Curiosity“ (дир. превод – любопитство), за да роувъра да събере данни и да проучи редица фактори на Марс. Този полет отнема 253 дни, години внимателно плануване и денонощна подготовка.
На 7 март 2020 година, след 51 години на различни космически подвизи, света отново притаява дъх с погед към небесата и, разбира се – телевизионните екрани. Случва се поредното събитие с висока важност и исторически фактор – за първи път частна компания изпраща хора в космоса, най-вероятно бележейки нова ера, в която не само тесен кръг учени и милиардери могат да си позволят разходка до Луната или до Международната космическа станция.
Не всеки човек си дава сметка, че тези космически полети биха били невъзможни без машините, които ги осъществяват чисто физически. А пък тези машини (нещо, за което мислят още по-малко хора) не биха могли да излетят дори само на височината на обикновените пътнически самолети, ако не бяха много прецизно и правилно програмирани.
Програмирането на сложните системи и уреди, необходими за пилотиране в космоса, не се случва на произволни или популярни в момента езици за програмиране като C# или Java. Често дори, това се случва на почти мъртви и неизползваеми за масови цели езици за програмиране. Да проследим някои от тях.
Един от най-често използваните езици за програмиране в космическите полети се казва HAL/S. “HAL/S е език за програмиране от високо ниво, поръчан за разработка от NASA в края на 60-те години. По това време програмите, използвани на борда на космическите апарати, са били написани или на асемблерни езици (сложни за разбиране, сложни за писане, близки до машинния код – само нули и единици, бел. авт.), или на интерпретирани езици (такива, които нямат нужда от интерпретатор, бел. авт.). Първите правят програмите трудни за писане и поддръжка, а вторите са недостатъчно стабилни и бавни.” [1] Тези причини са наложили използването на HAL/S при програмирането на системите на космическите кораби на NASA. “HAL/S езикът осигурява прости и интуитивни конструкции за функции, които обикновено са необходими и се изпълняват от аерокосмическите програмни приложения като аритметика, работа с вектори, както и матрици.” [2] В повечето езици за програмиране съществуват различни сложни конструкции (като „GOTO“ например), които “NASA смятат за симптоматични за ненадеждния софтуер”[3]. Те просто могат да превърнат един иначе елементарен и работещ код в така наречения „спагети код“, или казано по друг начин – толкова объркан код, че е невъзможно неговото проследяване или поправяне. Тези конструкции специално се премахват от езика HAL/S, за да той да бъде съвършен за нуждите на космическата агенция. До ден днешен близо 85% от космическите кораби на NASA използват по един или друг начин езика за програмиране HAL/S. Пример за космически апарат, използващ езика, е автономния Галилео, който е изстрелян през 1989 година, за да през 1995 година да достигне орбитата на Юпитер и да изследва тази интересна планета от нашата слънчева система.

“Космическия апарат Галилео бива подготвян за своето 6-годишно пътешествие към Юпитер, 1989 година”, Източник: Great Images in NASA
Друг широко използван в космическите кораби и апарати език е Ada. Той е разработван от 1977 до 1983 година като директна поръчка на Американското министерство на отбраната. Езикът е кръстен на историческата личност Ада Ловлейс, която се смята за създателка на първата компютърна програма (много преди въобще да е имало компютри). Ada е структуриран, компилиращ се език за програмиране със статично определяне на типа, подобен на езика Pascal. А защо се използва така широко в космическите кораби? Най-вече заради четливостта. Повечето езици за програмиране са структурирани по такъв начин, че е далеч по-лесно една програма да бъде написана, отколкото прочетена след това. Именно това е причината цената за поддръжка на софтуер да е в пъти по-висока от цената за еднократното разработване на дадения софтуер. Ada не е такъв език. Той притежава четливост, която помага на програмистите да преглеждат и проверяват кода лесно, бързо и ефективно. “Ada предпочита читателя на програмата пред писателя, защото една програма се пише веднъж, но се чете много пъти. Добър пример за това е, че синтаксисът на езика забранява всички двусмислени конструкции, така че няма изненадващи ситуации при прочитане на кода от хора, различни от автора на програмата.” [4] Друга важна за NASA черта на езика е неговата стабилност. Като най-ярък пример на космически кораб / апарат, който използва езика за програмиране Ada (за да уредите, устройствата и системите му да работят безотказно и в синхрон) е Международната космическа станция. Дори най-важната част от МКС, а именно – системата за поддържане на живот (кислород, температура, налягане и т.н.), е програмирана на Ada, което е добър пример за това колко надежден и сигурен е софтуера, написан на този език.

Снимка на Международната космическа станция, направена от совалката „Endeavour“ през май 2011 година“ Източник: NASA, http://www.spaceflight.nasa.gov/gallery/images/shuttle/sts-134/html/s134e010137.html
Последният език, който си струва да споменем е C (произнася се „си“ – бел. авт.), който е разработен от Денис Ричи през 70те. От споменатите в тази статия езици, този е най-популярния, дори в среди на неспециалисти. С е език за програмиране от средно ниво с общо предназначение, използван често и в наши дни в ежедневието (за разлика от предишните два, които сякаш само NASA използва), най-вече за програмиране на вградени системи (примери – калкулатори, касови апарати, смарт къщи, робот-прахосмукачки и т.н). Поради ниското ниво на абстракция, програмистите имат повече контрол върху хардуера на програмираните на C устройства, и програмите написани на него обикновено работят много бързо. Пример за космически апарат, който използва езика C като свой базов код е марсохода Curiosity („кюриосити“ – любопитство). Той притежава 2,5 милиона реда код на C, който се компилира от RAD750 процесор. Друг пример за цяла поредица от космически обекти, използващи езика, са множеството сателити, част от Earth Orbiting System (EOS – Система за орбитиране около Земята) на NASA. Те представляват голяма група от сателити и апарати, които заедно правят мрежа над Земята, за да я изследват и да изпращат данни за различните случващи се явления, земната повърхност, биосферата, атмосферата и океаните.

Марсохода „Curiosity“ близо до местността „Big sky“ на повърхонстта на Марс. Снимката е направена от самия марсоход, затова можем да я наречем и „селфи“, 2015 година, Източник: NASA, http://photojournal.jpl.nasa.gov/catalog/PIA19920
Вече повече от половин век човечеството опознава космоса отблизо. Това се случва чрез множество космически кораби, отвеждащи човешки крак на неподозирани обекти извън нашата планета; космически апарати, които обикалят и проучват далечни и засега недостъпни места от слънчевата ни система; орбитиращи земята станции и сателити, в които се случват безброй експерименти и научни открития и т.н. Целият този човешки напредък не би бил възможен без онези неща, които остават някак на заден план във фона. Точно както много малко хора знаят, че Нийл Армстронг и Бъз Олдрин не са били единствените хора от тяхната мисия към Луната. Имало е и трети астронавт – Майкъл Колинс, който не е стъпил на Луната физически, но е стоял в космическия кораб в орбита около спътника, за да може уредите да се следят, стъпилите на повърхността да се завърнат, и мисията да бъде успешна. По същия начин много малко хора знаят, че зад всеки подобен космически летателен апарат стоят не само много разработчици, инженери и дизайнери, но и програмисти, владеещи до съвършенство някой от изброените по-горе езици за програмиране. Програмирането на всякакъв вид смарт устройства не владее само нашата планета, то излиза нерядко и извън нея. И това тепърва ще се случва по-често.
Източници:
[1] – “[393-397] Appendix II: HAL/S, A Real-Time Language for Spaceflight”, Computers in Spaceflight: The NASA Experience, https://history.nasa.gov/computers/Appendix-II.html
[2] – „Current Status of the HAL/S Compiler“, Lytle, P.J., Archive.org, 1981
[3] – “NASA. Programming in HAL/S”, Ryer, Michael J., http://www.bitsavers.org/pdf/intermetrics/programming_in_hal-s.pdf
[4] – „European air traffic flow management: porting a large application to GNU/linux“, Proceedings of the 2003 annual ACM SIGAda international conference on Ada, Allaert, G., Craynest, D., Waroquiers, P., 2003