Język programowania używany w kosmosie

Język programowania używany w kosmosie
0

Cześć, który nowoczesny język programowania jest coraz częściej stosowany w przemyśle kosmicznym? Według tej dyskusji jest to język C++, wspomagany Pythonem. I czym jest ten "Integrity" os. Nowy system kosmiczny całkowicie pisany w C++ zamiast C?
https://www.reddit.com/r/space/comments/4y50sj/which_programming_languages_are_used_by_nasa/

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 5 godzin
0

Urządzenia w których bardzo ważny jest czas reakcji są obsługiwane przez systemy operacyjne czasu rzeczywistego (RTOS): https://pl.wikipedia.org/wiki/System_operacyjny_czasu_rzeczywistego

Same programy pisze się pewnie w bardzo dziwaczny sposób, by uniknąć czegokolwiek co ma niedeterministyczną wydajność - np dynamicznej alokacji pamięci.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit
0

Na tej stronie w NASA cały czas przewijają się dwa języki, tj Python i C++.
https://code.nasa.gov

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:minuta
  • Postów:4884
0

No i ścisłe reguły pisania, to w zasadzie niezależne od języka, tu jest akurat dla C:
http://www.rankred.com/nasa-coding-rules/
http://pixelscommander.com/wp-content/uploads/2014/12/P10.pdf


edytowany 1x, ostatnio: lion137
0

Javascript? :D

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 5 godzin
3
TR-3B napisał(a):

Na tej stronie w NASA cały czas przewijają się dwa języki, tj Python i C++.
https://code.nasa.gov

Moim zdaniem jakieś 99% kodu napisanego w NASA nie siedzi w rakietach kosmicznych, tylko jest odpalane na serwerach na Ziemi i te 99% kodu robi różnego rodzaju symulacje, analizy, etc które nie mają silnych wymagań co do czasu reakcji - tzn jeśli analiza potrwa 5 sekund dłużej niż szacowano to nic się nie stanie. W rakiecie kosmicznej opóźnienie rzędu jednej milisekundy może być kosztowne.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
AL
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:1493
1

Obecnym standardem dla systemów RT jest C, czasem C++, w obu przypadkach z dodatkowymi obostrzeniami typu MISRA albo odpowiednie normy. Do tego często specyficzny hardware, np.
http://www.ti.com/lit/wp/spry180/spry180.pdf

SL
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 2 lata
  • Postów:236
3

Zależy jeszcze co rozumieć przez "kosmos". Na przykład do systemów krytycznych przy zastosowaniach wojskowych, czy lotnictwie to język ADA. W tym pisze Lockheed Martin, Boeing i inne koncerny lotnicze/wojskowe. To w końcu też są zastosowania kosmiczne, tylko w celach innych niż badawcze :). Pytanie tylko na ile to jest nowoczesny język i na ile w ogóle używa się nowoczesnych języków do takich systemów.

AL
Głowy nie dam, ale C i MISRA raczej też już będą używane obok Ady, popatrz na ogłoszenia Airbusa. Nie znam aerospace, znam za to kolej i automotive (też systemy high safety), i tam już od jakiegoś czasu przechodzi się na C/C++, często nawet w wersji 11/14. Kwestia starych języków w aerospace może wynikać po prostu z tego, że tam projekty trwają o wiele dłużej względem samochodów czy pociągów. A tak BTW: Lockheed w F35 używa FPGA.
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0
  1. Flight software to nadal głównie ADA, szczególnie do krytycznych systemów.
  2. Cała reszta random, ale z naciskiem na C/C++, Python, Java.

Zresztą co za problem sprawdzić:


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 2x, ostatnio: Shalom
FE
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 3 lata
0

SpaceX pisze w C++ flight software, reszta random o ile dobrze pamiętam.


zyxist
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 6 lat
  • Postów:101
0

Myślę, że wybór języków w NASA jest też trochę ograniczony przez dostępność odpowiednich programistów na rynku. Misje NASA mają bardzo długi czas trwania. Dwa lata temu musieli znaleźć kogoś do prac nad oprogramowaniem dla sond Voyager 1 i 2 z lat 70. i wymaganiem była znajomość starożytnych asemblerów oraz Fortrana :). A wszystko przez to, że ostatni programista z oryginalnej ekipy tego programu zamierzał odejść na emeryturę, tymczasem sondy jeszcze przez co najmniej kilka lat będą aktywne.


0

Jak mieli ogarniętych programistów to już dawno wszystko jest w pythonie/javie lub ogólnie wysokopoziomowe, co to za problem mieć assemblerowe operacje jako obiektowe, to tylko kilka bajtów zapisanych binarnie?

W ogóle ja nie rozumiem jak @Shalom właśnie ty, chcesz ryzykować własne życie, utratę mięśni itp. tylko dlatego żeby latać sobie w kosmos?
Tam nie ma grawitacji, to prawie jakby się zajmować fizyką kwantową, makroskopową, ale reszty nie rozumiem.
Chodź sam zawsze chciałem latać to czy zupa fasolowa w kosmosie jest jak silnik odrzutowy :D

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

@zyxist to jest bardziej kwestia kosztów i testowania. Szczególnie jeśli chodzi o hardware, ale software też. Wydaje sie miliony na testy naziemne, bo jak już coś poleci to nie bardzo jest jak to naprawić. Stąd na przykład wiele sond/satelitów lata na archaicznych komputerach a mechanikę projektowano 20 lat temu. Nie dlatego że nie mamy dzis nic lepszego, tylko dlatego że to juz latało i jest sprawdzone.
Nowoczesne języki jak Java czy Python nie są projektowane z myślą o krytycznych systemach i o bezpieczeństwie, stąd też średnio się nadają. Zresztą do real-time/embedded też jak pięść do oka, więc flight software w tym nie będzie. Amerykanie mieli taki genialny pomysł chyba z F-35, żeby pisać soft w C++ zamiast w Adzie, ze względu na to że jest więcej programistów. I nie wyszło im to za dobrze...


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
0

@Shalom: czemu zawsze opuszczasz ze mną konwersację?
Wiem, że chcesz być astronautą, też chciałem zawsze latać.
Wiem wszystko o tobie.

Shalom
Nie rozumiem. Przecież odniosłem się do twojego posta gdzie piszesz o kodzie w Javie i Pythonie.
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0
alagner napisał(a):

Obecnym standardem dla systemów RT jest C, czasem C++, w obu przypadkach z dodatkowymi obostrzeniami typu MISRA albo odpowiednie normy. Do tego często specyficzny hardware, np.
http://www.ti.com/lit/wp/spry180/spry180.pdf

Systemy czasu rzeczywistego to jedno, systemy bezpiecznie to co innego.
Można napisać spokojnie w C system który będzie odpowiadał w określonym czasie. Gorzej ze stabilnością.

A tak w ogóle, to 8 lat temu dyskutowano o tym na SO, na razie nie zauważyłem tu nic nowego:
https://stackoverflow.com/questions/243387/which-languages-are-used-for-safety-critical-software

Zobacz pozostałe 4 komentarze
AL
@Shalom ja wiem na czym polega różnica i wiem jakie obsuwy miał LM z F35 oraz że działko pokładowe jeszcze nie strzela z winy softu. Niemniej nie obwiniałbym języka programowania za fakap, zwłaszcza że po stronie parametrów mechanicznych czy radarowych ten samolot też ma wciąż kupę problemów. I tak, wiem, pociąg stanie, z rakiety zostaną fajerwerki, to dość oczywiste. :)
vpiotr
Z tego co wiem do rakiet stosuje się generowane C/C++ z jakiegoś innego softu, ale nie pamiętam do jakich rakiet i z jakiego softu. Jak mówicie w ogóle o C/C++ w kontekście rakiet i lotów w kosmos to zaraz przypomina się https://www.youtube.com/watch?v=ag_xdhFUjwc
AL
@vpiotr w automotive też się tego używa.
vpiotr
@alagner: "tego" tzn. czego? I do czego? Do nawigacji? Do monitoringu?
AL
Generowania C z innego softu. Na pewno robią to moi kumple w sterownikach poduszek powietrznych. Gdzie jeszcze - nie wiem, nie wchodziłem aż tak głęboko.
xfin
  • Rejestracja:ponad 11 lat
  • Ostatnio:8 miesięcy
  • Lokalizacja:Genewa
  • Postów:597
1

Odpowiedź odnośnie JPL i NASA:
http://lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf

Dodatkowo również :
https://en.wikipedia.org/wiki/MISRA_C

MISRA jest m.in. używana w niektórych projektach i eksperymentach w CERNie. Zespół w którym pracuję ze względów na certyfikację bibliotek dotyczących protokołu komunikacyjnego przy miernikach promieniowania, również rozważał budowę własnego standardu w oparciu o MISRA właśnie.

vpiotr
Nie rozważaliście czegoś bardziej nowoczesnego niż C? Np. Rust?
xfin
To nie jest do końca tak, że można sobie coś wybrać ;) Te parę instytucji, które znam dokonują profesjonalnej certyfikacji produktu w zgodzie ze swoimi standardami dla systemów RT właśnie w C. Dodatkowo dla technologii SoC to chyba na razie najrozsądniejsze wyjście ze względu na wsparcie producentów.
zyxist
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 6 lat
  • Postów:101
0

@Shalom - zgadzam się, że testowanie takiego sprzętu to poważna sprawa :). Jeśli chodzi o "archaiczność", wskazałbym trochę inne przyczyny, z których najważniejsze to zasilanie oraz warunki pracy. Sonda New Horizons była budowana w latach 2001-2006, a główny komputer pokładowy ma procesor Mongoose-V taktowany zegarem 12 MHz. Zasilanie sondy to 1 RTG, który musi zasilić nie tylko komputer, ale także wszystkie instrumenty, ogrzewanie i w ogóle wszystko. A jego moc z czasem maleje. Po drugie - sonda nie musi wykonywać ciężkich analiz danych (może poza autonomiczną nawigacją). Jej główne zadanie to skierować w odpowiednim momencie odpowiednie przyrządy na odpowiedni obiekt, nagrać ciąg bitów i wysłać go na Ziemię.


Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

Po drugie - sonda nie musi wykonywać ciężkich analiz danych (może poza autonomiczną nawigacją). Jej główne zadanie to skierować w odpowiednim momencie odpowiednie przyrządy na odpowiedni obiekt, nagrać ciąg bitów i wysłać go na Ziemię.

Ciężkich analiz nie, ale ma wystarczająco dużo "do roboty". Z racji ograniczonego zasilania i ograniczonej masy statki kosmiczne mają spore limity na rozmiar i możliwości anten. Generalnie szybkość transmisji danych jest mocno ograniczona, a telemetrii do wysłania bardzo dużo. W efekcie między innymi stosuje się różne metody kompresji danych, żeby dało sie ich upakować jak najwięcej. Więc ten ciąg bitów, który leci na ziemie to moze być punkt na wielomianie interpolacyjnym, który wymaga jeszcze odpowiedniej kalibracji, a to wszystko żeby zaoszczędzić kilka bitów i upchnąć dane z kolejnego sensora.
Z zasilaniem dla CPU to bym nie przesadzał, bo mamy dużo bardziej ekonomiczne układy niż kiedyś ;)
Z archaicznością jest też taka kwestia że od czasu kiedy się coś "projektuje" do czasu kiedy to poleci mija sporo czasu a ze zmianami w projekcie ciężko. ATV zaczęto projektować w 1998 roku, pierwszy poleciał w roku 2008 a ostatni w 2014, a to i tak lajtowa sytuacja bo one leciały tylko na niską orbitę, a nie musiały lecieć do celu długi czas. Takie BepiColombo zaczęto projektować w 2009 roku, poleci w 2018 a u celu będzie dopiero w 2025 :)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

W każdym razie dopóki C rządzi w kosmonautyce nie namówicie mnie na lot na Marsa.

Shalom
no ale właśnie nie rządzi...
vpiotr
@Shalom, niby nie, ale sam podajesz oferty pracy dla programistów C
AL
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:1493
0

@vpiotr a który język Cię przekona? ;)

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1
alagner napisał(a):

@vpiotr a który język Cię przekona? ;)

Takiego jeszcze nie ma.

Musiałby być:

  • szybki jak C
  • bezpieczny jak Rust
  • elastyczny jak Lisp
  • czytelny i obiektowy jak Java
  • odporny na awarie jak COBOL (który potrafi podzielić przez 0) czy Ada (która ma pre- i post-conditions)
  • cukierkowy jak Python czy Nim

Dopisałbym tu Smalltalk, Scale, Kotlin czy Go gdybym je znał.
Może jakbym dogonił C++17 czy C++20 to bym coś w tym języku dopisał na tej liście.

Taki język powinien być nie tylko bezpieczny, ale też umożliwiać pisanie wysokopoziomowych abstrakcji, żeby nie powiedzieć użytkowego AI (które na statku powinno być wg mnie nawet w... czajniku). No i nie powinien mieć przestojów (żadne tam GC) i oszczędzać zasilanie (efektywny).
Powinien też umożliwiać bez zająknięcia wysoką precyzję (sorry double, idź do konta).
O automatycznym kompilowaniu na GPU nie wspomnę, ale mam nadzieję że ten kierunek (OpenACC) się utrzyma.

Zobacz pozostały 1 komentarz
FE
A to nie jest tak, że są pewne fundamentalne sprzeczności które nie pozwalają na istnienie takiego języka? Chyba C++ jest taką próbą 'high-levelu' przy zachowaniu szybkości C?
vpiotr
C++ to nadbudówka ze wsteczną kompatybilnością. Stąd masz n paradygmatów (ostatnio doszedł jeszcze funkcyjny ze względu na modę).
hauleth
"czytelny i obiektowy jak Java" śmiechłem
jarekr000000
"szybki jak C" :-) też zabawne
S9
@hauleth: a co niby Java nie jest czytelna?
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Wrocław
6

Patrząc na listę wymagań @vpiotr wychodzi na to, że softem sterującym statkami kosmicznym powinien być kopiczek.

hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:11 dni
0

@vpiotr:

  • szybki jak C
    […]
  • czytelny […] jak Java
    […]
  • cukierkowy jak Python czy Nim

Zdecyduj się.

Co do podanych wymagań, to Rust ma najbliżej:

  • szybkość porównywalna z C (jakby to język był "szybki" lub "wolny")
  • nie jest homoikoniczny, ale makra i rozszerzenia kompilatora (to 2. na razie tylko w nightly) dają Ci całkiem dużą swobodę
  • nie wiem co przez to rozumiesz, ale IMHO obiektowość w wydaniu Javy to nie jest wzór do naśladowania, podejście Rusta z traitsami zdecydowanie bardziej IMHO pasuje
  • ktoś kiedyś zrobił bibliotekę do Rusta oferującą pre- i post-conditions ale wymaga sporej aktualizacji, jednak jest to jak najbardziej możliwe (nie wiem czy w stable, ale w nightly na 100%). Co do dzielenia przez zero możesz stworzyć własny typ, który nie będzie mógł przechowywać 0 lub będzie obsługiwał dzielenie przez 0 w sposób jaki chcesz. Nie jest wcale to trudne, a typechecker załatwi resztę za Ciebie.
  • Proszę nie… nie cierpię składni przez wcięcia w Pythonie

jarekr000000
Nie wiedziałem, że w Rust można definiować własne makra. ... które jak widzę wyglądają dużo lepiej od Scalowych ("no shit sherlock..."). Kręci mnie ten jezyk coraz bardziej (muszę w końcu na czymś więkzym niż "hello world" poćwiczyć).
FE
@jarekr000000: zdecydowanie, jak poćwiczysz to zdaj nam relację.
jarekr000000
Tylko, że u mnie już w tej chwili limit technologii i jeżyków poznawanych w ciągu tygodnia jest troszę ponad moje siły. No i niestety - żeby jakiś język/środowisko poznać w praniu to trzeba zrobić jeden - nudny komercyjny projekt taki 40 godzin tygodniowo przez minimum dwa miesiące.
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

@hauleth: Dlaczego każesz mi się zdecydować? Nie chcę i nie muszę! ;-)
A pre- i post-conditions - to byłby mocny dodatek do wielu języków, nie rozumiem dlaczego jest tak mało popularny.

Rust może i jest porównywalny z C ale nie szybszy.

Czy język sam w sobie może być szybszy lub wolniejszy? Oczywiście że tak. Wątpić w to mogą tylko ludzie którzy wierzą w notację big-O.

Ale już jakiś czas temu udowodniono że jest przeceniana. Coś na temat:

jarekr000000
Szybkość C i C++ to taka bzdura dla młodych - owszem jak piszesz pod konkretną architekturę, (którą znasz i jest zadana) i masz dużo czasu to w C (i nawet C++) napiszesz potencjalnie "najszybszy" kod. Problem w tym, że wiekszość programistów nie ma ani czasu, ani wiedzy, a tylko wierzy, że pisanie w C magicznie gwarantuje im szybkość. ( A potem mam dziwnie wolny kod z przesunięciami bitowymi zamast mnożenia (to niby legenda, ale ja to widziałem naprawdę) , tylko że gość 1000 razy na sekunde allokuje i deallokuje tą samą tablicę ... ).
jarekr000000
A jak masz czas i potrzebę to i Javę da się ładnie dociągnąć, żeby korzystała z L1 i L2. Chociaż minus jest taki, że czytanie performance counterów z programu w Javie ( z użyciem np JMH) wymaga niestety więcej czasu niż w C/C++ (za dużo śmiecia). No i prowadzisz ogień nie wprost. Czyli nawet jak znajdziesz co spowalnia Ci przetwarzanie - to nie jest łatwo wpaść co zmienić żeby poprawić.
vpiotr
@jarekr000000: ale o czym Ty piszesz? Spójrz na wątek, potem na przykład na https://4programmers.net/Forum/1393232 i sam sobie odpowiedz czy "większość programistów nie ma ani czasu ani wiedzy" pasuje do tego tematu. To nie jest wątek o większości programistów ani o sofcie który się robi na szybko.
jarekr000000
@vpiotr - ok fakt. Twoje marzenia z poprzedniego postu mnie tu przyciągnęły i zapomniałem o czym wątek był :-)
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 10 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
2
vpiotr napisał(a):

Musiałby być:

  • szybki jak C
  • bezpieczny jak Rust
  • elastyczny jak Lisp
  • czytelny i obiektowy jak Java
  • odporny na awarie jak COBOL (który potrafi podzielić przez 0) czy Ada (która ma pre- i post-conditions)
  • cukierkowy jak Python czy Nim
  • zwięzły jak Haskell
  • łatwy w pisaniu jak Scala (btw uważam, że Scala jest trudna w czytaniu - pisze się łatwo).

No i żeby kompilował do FPGA jeszcze kawałki krytyczne, potem GPU i w ostateczności mało wpływające na szybkość rzeczy na CPU.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 2x, ostatnio: jarekr000000
hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:11 dni
0

@vpiotr: bo wszyscy inni twórcy języków wyszli z założenia, że to tak na prawdę nic innego jak fikuśny zapis assercji.

Co do tego Benchmarks Game:

  • Mówimy tu o zastosowaniach HRT a Benchmarks Game zdecydowanie odbiega od tych wymagań. Testują np. wydajność regexpów (regex-redux), których na 100% nie użyjesz w systemie HRT (a jak już, to tych z Rusta, niż PCRE, bo Rustowe używają DSM i nie obsługują powrotów, więc masz stałą liniową złożoność).
  • W teorii nic nie stoi na przeszkodzie by Rust był przynajmniej tak szybki jak C (a ze względu na ograniczenia w języku, może być nawet szybszy), tylko C ma za sobą 45 lat optymalizacji, Rust 7 (jeśli liczymy od pierwszego publicznego wydania). Więc jak FE Rusta poprawi IR to wtedy nie dość, że czasy kompilacji powinny zdecydowanie spaść, ale również benchmarki powinny się poprawić. C, C++, Rust, Fortran, Delphi, Ada, etc. w teorii mają równy potencjał co do wydajności kodu maszynowego, jedyne różnice mogą wynikać z optymalizacji, a przy dobrze ogarniętych kompilatorach IMHO Rust i Ada powinny na tym zyskać najwięcej.

Co do prezentacji, którą pokazałeś, to co ona ma do rzeczy skoro ona w równym stopniu tak na prawdę odnosi się do wszystkich wymienionych wyżej języków? Jedyna różnica taka, że np. przy dostępie column/row-order zdecydowanie łatwiej popełnić taki błąd:

Kopiuj
int arr[N][M];

// Napisać:

for (int j = 0; j < M; ++j)
  for (int i = 0; i < N; ++i)
     foo(arr[i][j]);

// Zamiast:

for (int i = 0; i < N; ++i)
  for (int j = 0; j < M; ++j)
     foo(arr[i][j]);

Niż:

Kopiuj
let arr = [[isize; M]; N];

// Napisać:

for j in 0..M {
  for i in 0..N {
     foo(arr[i][j]);
  }
}

// Zamiast:

for row in &arr {
  for &elem in row {
    foo(elem);
  }
}

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0

@hauleth: tak naprawdę to Fortran jest w nieumiejętnych rękach często szybszy od C (jeśli programista jest np. fizykiem kwantowym).
To że jakiś język ma potencjał na bycie szybszym od C - możliwe, ale to gdybanie.
Ja napisałem jak dzisiaj to widzę.
W zasadzie to mam nadzieję że powstaną koncepcje które zastąpią dzisiejsze nisko-poziomowe programowanie a w zamian będą się bardzo efektywnie kompilować do kodu maszynowego nie wymagając przy tym uwzględniania długości cache'a czy uzupełniania struktur jakimiś pseudo-elementami.
Takim językiem może być Julia: https://modelingguru.nasa.gov/docs/DOC-2625

  • ale ona nie jest uniwersalna AFAIK.
hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:11 dni
0

@vpiotr nie nazwał bym fizyka kwantowego pracującego z Fortranem jako osobę o "nieumiejętnych rękach". Ten język jest de facto standardem w ich zastosowaniach, więc to zupełnie inna liga.

Nie jest to gdybanie, to jest realne spojrzenie na sprawę. Dla czego C wygrywa w Benchmarks Game:

  • ludzie siedzieli i optymalizowali implementacje w C do granic niemożliwości, przykład nazwałbyś ten kod idiomatycznym kodem w C? Czy może raczej napisałbyś na szczycie // Here be dragons? Bo odpowiednik w Ruscie to całkiem idiomatyczne rozwiązanie (dodatkowo SIMD nie jest jeszcze stabilne, a Benchmarks Game działa na wersjach stabilnych języków.

powstaną koncepcje które zastąpią dzisiejsze nisko-poziomowe programowanie a w zamian będą się bardzo efektywnie kompilować do kodu maszynowego nie wymagając przy tym uwzględniania długości cache'a czy uzupełniania struktur jakimiś pseudo-elementami

To jest marzenie ściętej głowy, bo zakłada, że istnieje rozwiązanie, które sprawdzi się w każdym miejscu i czasie, a takiego nie ma. Więc albo masz większą kontrolę i zawsze możesz wybrać najlepsze rozwiązanie samemu, albo masz prostsze rozwiązania, ale nie zawsze optymalne.


Zobacz pozostałe 6 komentarzy
vpiotr
@hauleth: chodziło o C. A jeśli chodzi Ci (bo nie mi) o samo SIMD, to historia jest trochę dłuższa: https://en.wikipedia.org/wiki/SIMD#Chronology
hauleth
@vpiotr nie twierdzę, że nie, ale na x86 (o którym mówimy) to 21 lat. Ale C jest językiem wysokiego poziomu (przynajmniej współcześnie), bo 1 instrukcja nie odpowiada 1 instrukcji maszynowej. Może kiedyś, gdy C było przenośnym assemblerem to można by uznać C za język niskiego poziomu, ale obecnie słabo. Natomiast jest jak najbardziej systemowym językiem programowania.
vpiotr
C jest jedynym szeroko stosowanym współcześnie językiem niskiego poziomu - takim trochę krzywym assemblerem. I nie mówimy tylko o x86 (chyba że tu w komentarzu do "Benchmarks Game").
hauleth
No cóż, Wiki się z Tobą nie zgadza "In computer science, a low-level programming language is a programming language that provides little or no abstraction from a computer's instruction set architecture" i dalej "[…] high-level languages […] C […]". To, że dla współczesnych "FE wizard ninjas" C to jest jakiś abstrakt z kosmosu i język "loł lewel", bo nie działa w przeglądarce ani żadnej VMce, tylko daje binarki maszynowe, to nie oznacza, że to jest od razu jest język niskiego poziomu.
vpiotr
Tu jest wyjaśnienie z którym z grubsza się zgadzam: https://softwareengineering.stackexchange.com/a/267585
0
hauleth napisał(a):

@vpiotr nie twierdzę, że nie, ale na x86 (o którym mówimy) to 21 lat. Ale C jest językiem wysokiego poziomu (przynajmniej współcześnie), bo 1 instrukcja nie odpowiada 1 instrukcji maszynowej. Może kiedyś, gdy C było przenośnym assemblerem to można by uznać C za język niskiego poziomu, ale obecnie słabo. Natomiast jest jak najbardziej systemowym językiem programowania

Aplikacja w C automatyzuje wczytywanie z pamięci do rejestru, przez co każda instrukcja ma dodatkowe wczytanie, co czasem się zdarzy, że program ma już dane w rejestrze i wczytuje je jeszcze raz, ale optymalizacja usuwa te niedogodności automatycznego ładowania danych do rejestrów i koniec końców i tak robi to tak samo jak w czystym assemblerze.

A jak będziesz operował na dwóch register zmienna, rejestr, rejestr ewentualnie rejestr, addres to operacje na tych rejestrach np. dodawanie będzie w pojedynczych operacjach asssemblera.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)