-
Data: 2012-09-28 22:39:39
Temat: Re: Dlaczego software to F35 jest pisany w C++ a nie w Ada
Od: Maciej Sobczak <s...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu piątek, 28 września 2012 19:35:26 UTC+2 użytkownik Sebastian Biały napisał:
> > Zastanów się najpierw *po co* istnieją bezpieczne języki.
>
> Po to aby przeciwdziałać błedom programisty badź specyfikacji w jak
> nalepszym stopniu.
No właśnie. Ze znanych mi języków Ada robi to lepiej, niż inni.
> > czyli do interakcji ze sterowanikami urządzeń albo wręcz do bezpośrednich odwołań
do pamięci
>
>
> *G* prawda. Sterowanie rakietą poprzez algorytmy nawigacyjne *NIE*
> polega na dziobaniu po gołej pamięci bądź zapalaniu bitów na porcie IO
> uC albo sprawdzanie czy w milionie miejsc nastapil overflow.
Te rzeczy są konieczne.
> Sterowanie
> rakietą polega na realizacji (zapewne) statycznego pamieciowo zadania
> matematycznego.
Tak by było, gdyby rakiety latały tylko na papierze. Tymczasem one latają w świecie
rzeczywistym i oprócz rozwiązywania zadań matematycznych muszą wziąć na klatę różne
upierdliwości tego rzeczywistego świata, takie jak np. upływ czasu. Czy hasło "system
czasu rzeczywistego" coś Ci mówi?
Pisałem wcześniej o interakcjach z procesami fizycznymi i cały czas przy tym
jesteśmy. Upływ czasu jest procesem fizycznym, z którym interakcje polegają nie na
tym, że się grzebie po portach I/O, ale na tym, że program ma być w określonych
punktach *na czas*. To dosyć niskopoziomowy problem. Z tego co rozumiem nt. Ariane 5,
to właśnie takie niskopoziomowe rozważania doprowadziły do decyzji o wyłączeniu
bezpiecznika. Gdyby tego nie można było zrobić, to (tak tylko przypuszczam, ale nie
mam podstaw zakładać, że rozważania wydajnościowe wyciągnęli sobie z czapki) program
nie spełniłby zadanych ograniczeń. Czyli nie byłoby go.
> A jakiś drugorzędny duperelek zajmuje się częscią
> łaczącą wyniki z elektroniką.
Drugorzędny? Duperelek? I w czym ten duperelek jest napisany, co?
Do rozważenia są dwie alternatywy:
1. Piszemy w bezpiecznym języku i łączymy go z modułami (tzw. duperelkami) napisanymi
w niebezpiecznym języku, np. w C albo w asm.
2. Piszemy wszystko w bezpiecznym języku i lokalnie wyłączamy bezpieczniki na
potrzeby niskopoziomowych interakcji (uwaga: upływ czasu też tu się wlicza).
Jaką niby wartość dodaną w dziedzinie bezpieczeństwa ma pierwsze rozwiązanie? Bo nie
widzę.
Natomiast w drugim przypadku widzę wartość dodaną w postaci jednolitości rozwiązania,
co ułatwia znalezienie i zastosowanie chociażby narzędzi do analizy statycznej. Znam
narzędzia, które radzą sobie z jednorodnym kodem, natomiast nie znam takich, które
sensownie analizują zlepek modułów napisanych w kilku językach. Dostępność narzędzi
to kolejny punkt na drodze do większego bezpieczeństwa i ten drugi wariant daje tu
większe możliwości. Ada jest bezpieczniejsza właśnie przez to, że to, co chciałbyś
zrobić w C, możesz dalej robić w Adzie.
> Prawdopodobnie dałbym osobiście radę naklepać bezpieczną klasę do
> konwersji w C++ która dzięki prostym zabiegom *uniemożliwiła* by
> programiście jej nie-użycie bez chamskich sztuczek.
Jeśli ta niemożność uniemożliwiłaby spełnienie oczekiwań związanych z koniecznością
interakcji z procesami fizycznymi, to Twoja klasa nie nadawałaby się do robienia
bezpiecznych systemów. Natomiast chamskie sztuczki w C++ *zawsze* są możliwe, bo do
dyzpozycji są wskaźniki i reinterpret_cast (oraz memcpy, itd.). Zapewniam Cię, że ten
sam programista, który wyłączył bezpieczniki w Adzie, poradziłby sobie z Twoją
niehakowalną klasą. W obu przypadkach ominięcie bezpiecznika można uznać za chamskie.
> Głupi C++ potrafił
> by lepiej zabezpieczyć
Nie, nie potrafiłby. Użycie systemu typów jako mechanizm ochronny miałby podobną
skuteczność i podobnie nie zatrzymałby zdeterminowanego programisty.
> przed radosną twórczością byłych programistów
> demek.
Jak już pisałem, nie znam nikogo z tego zespołu, więc nie wypowiadam się nt.
przeszłości zawodowej tych ludzi.
> Żałosne.
Na razie pokazałeś tylko, że nigdy nie widziałeś systemu sterowania. W szczególności
systemu sterowania czasu rzeczywistego.
> Tutaj *nie* było niskiego poziomu. Jesli zaś ktoś matematykę i overflow
> implementuje ręcznie na bitach jak w przytoczonym przykładzie to jest
> idiotą.
Ten program był poprawny, bo był przeznaczony dla poprzedniego modelu rakiety i tam
wpisywał się w zadane warunki techniczne. Nie widzę powodu, dla którego można by tego
programistę nazwać idiotą - napisał program w zgodzie z danymi. Natomiast to, że ten
moduł bezrefleksyjnie użyto w nowszej rakiecie, w której warunki techniczne były już
inne, to błąd wdrożeniowy. Ktoś wykorzystał słabsze cegły do budowy większego budynku
- to nie wykonawca cegieł jest tu idiotą, tylko ten koleś, który wybrał złe cegły.
Język pomógłby, gdyby miał włączony bezpiecznik.
> > Otóż żeby dany język w ogóle się do tego nadawał
> >, to musi udostępnić wszystkie narzędzia z rodziny
> > memset, memcpy, reinterpret_cast oraz link z dowolnym symbolem.
>
> Żadna z tych funkcji nie jest wymagana w liczeniu kąta otwarcia
> przepustnicy lewej dyszy.
Co najmniej jedna z nich jest wymagana, żeby ta dysza faktycznie sie otworzyła. Bez
tych ficzerów rakieta poleci tylko na papierze.
> Te narzędzia na szczęscie udostepnia asm.
Rozumiem - czyli bezpieczne rozwiązanie to połączenie bezpiecznego języka z asm, tak?
Pomińmy fakt, że już samo łączenie języków to jazda bez pasów dokładnie równoważna
reinterpret_cast, bo ze względu na rozdzielność systemu typów właśnie to trzeba
zrobić na granicy języków.
Po prostu zaplątałeś się we własne gacie w tej dyskusji.
> > Proste?
>
> Jednak za bardzo to uprościłeś. Uprościłeś do systemów embedded
> zajmujących się *bezpośrednim* sterowaniem. To tylko pewien zbiór
> problemów. Niekompletny.
Tak. Ale wystarczy do wykazania, że nie masz racji odrzucając Adę w całości. Twoje
stwierdzenie, że Ada jest do niczego, było ogólne - mi wystarczy wskazać jeden
przykład, żeby Twój ogólny kwantyfikator wyłożyć.
Tym przykładem są... bezpieczne systemy. Ot, ironia.
--
Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com
Następne wpisy z tego wątku
- 28.09.12 23:32 Edek Pienkowski
- 29.09.12 00:19 Roman W
- 29.09.12 00:37 Edek Pienkowski
- 29.09.12 07:52 Sebastian Biały
- 29.09.12 10:33 Edek Pienkowski
- 29.09.12 11:22 Marek Borowski
- 29.09.12 11:45 Sebastian Biały
- 29.09.12 12:23 AK
- 29.09.12 12:35 Marek Borowski
- 29.09.12 13:53 Roman W
- 29.09.12 14:07 Roman W
- 30.09.12 23:32 Maciej Sobczak
- 30.09.12 23:52 Maciej Sobczak
- 01.10.12 10:04 Edek Pienkowski
- 01.10.12 11:21 Edek Pienkowski
Najnowsze wątki z tej grupy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
Najnowsze wątki
- 2025-02-21 Warszawa => Key Account Manager IT <=
- 2025-02-21 Warszawa => Data Engineer (Tech Lead) <=
- 2025-02-21 Aliexpress zaczął oszukiwać na bezczelnego.
- 2025-02-21 Warszawa => System Architect (Java background) <=
- 2025-02-21 Kula w łeb
- 2025-02-21 Warszawa => System Architect (background deweloperski w Java) <=
- 2025-02-21 Warszawa => Solution Architect (Java background) <=
- 2025-02-21 Lublin => JavaScript / Node / Fullstack Developer <=
- 2025-02-21 Pawel S
- 2025-02-21 Warszawa => Key Account Manager (Usługi HR) <=
- 2025-02-21 Katowice => Senior Field Sales (system ERP) <=
- 2025-02-21 Chrzanów => Programista NodeJS <=
- 2025-02-21 Wrocław => Konsultant wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-02-21 Warszawa => Administrator Systemów Windows IT <=
- 2025-02-21 Wrocław => Specjalista ds. Sprzedaży (transport drogowy) <=