eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Dlaczego software to F35 jest pisany w C++ a nie w Ada
Ilość wypowiedzi w tym wątku: 93

  • 81. Data: 2012-10-09 15:18:41
    Temat: Re: Dlaczego software to F35 jest pisany w C++ a nie w Ada
    Od: "M.M." <m...@g...com>

    W dniu wtorek, 9 października 2012 10:17:56 UTC+2 użytkownik Maciej Sobczak napisał:
    > A może nie zapinajmy w samochodzie pasów bezpieczeństwa i w ogóle jeździjmy
    > nocą bez świateł - wtedy będziemy bardziej uważać a nie rozleniwiać się
    > złudzeniem uzyskanego tanio bezpieczeństwa. Tak?
    Nie mozna wszystkiego porowynywac do swiatel i pasow w smochodzie. Czesto w
    zyciu tak sie zdarza, ze lepsze narzedzia wlasnie rozleniwiaja. Pracuje nad
    aplikacja w ktorej dla wygody az sie roi od qvector, qhash itd. Pamiec sie
    defragmentuje i wersja 32bitowa nie chce dzialac. W wielu miejscach moglem
    uniknac uzywania tych dynamicznych struktur, ale wygoda wziela gore.
    Pozdrawiam


  • 82. Data: 2012-10-09 17:11:47
    Temat: Re: Dlaczego software to F35 jest pisany w C++ a nie w Ada
    Od: Baranosiu <r...@w...pl>

    Dnia 09.10.2012 Maciej Sobczak <s...@g...com> napisał/a:
    > A może nie zapinajmy w samochodzie pasów bezpieczeństwa i w ogóle jeździjmy nocą
    bez świateł - wtedy będziemy bardziej uważać a nie rozleniwiać się złudzeniem
    uzyskanego tanio bezpieczeństwa. Tak?

    Złudne bezpieczeństwo to byłoby gdybym tylko spojrzał na deskę
    rozdzielczą i pomyślał "ok, kontrolka przypominająca o pasach nie
    miga, kontrolka od świateł świeci na zielono, a więc mam zapięte pasy
    i światła świecą, przecież ufam wskazaniom przyżądów" :D

    Ok, skoro tak przy samochodzie się upierasz, to wyobraź sobie, że
    mechanik naprawiał Ci hamulce w samochodzie i włożył system ABS od
    innego modelu samochodu (tam przecież działał, to czemu nie w
    Twoim?). Oczywiście sterownik ABS mógłby wykryć, że jest w
    "niekompatybilnym" samochodzie, ale projektantom ABS-a nie przyszło do
    głowy takie jego użycie, więc zrezygnowali z mechanizmu
    weryfikacji. Mechanik myśli "gdyby coś było nie tak, to przecież ABS
    ma kontrolkę informującą o nieprawidłowej pracy". Ty wsiadasz do
    samochodu i myślisz "mechanik zna się na robocie, czerwona lampka ABS
    nie świeci, więc hamulce są ok", być może nawet przetestujesz hamulce
    na prędkości powiedzmy 30-40km/h i wszystko zadziała jak należy a
    potem się zdziwisz przy 90km/h :D


  • 83. Data: 2012-10-09 23:09:51
    Temat: Re: Dlaczego software to F35 jest pisany w C++ a nie w Ada
    Od: Maciej Sobczak <s...@g...com>

    W dniu wtorek, 9 października 2012 17:11:52 UTC+2 użytkownik Baranosiu napisał:

    > Ok, skoro tak przy samochodzie się upierasz, to wyobraź sobie, że
    > mechanik naprawiał Ci hamulce w samochodzie i włożył system ABS od
    > innego modelu samochodu (tam przecież działał, to czemu nie w
    > Twoim?). Oczywiście sterownik ABS mógłby wykryć, że jest w
    > "niekompatybilnym" samochodzie, ale projektantom ABS-a nie przyszło do
    > głowy takie jego użycie, więc zrezygnowali z mechanizmu
    > weryfikacji. Mechanik myśli "gdyby coś było nie tak, to przecież ABS
    > ma kontrolkę informującą o nieprawidłowej pracy". Ty wsiadasz do
    > samochodu i myślisz "mechanik zna się na robocie, czerwona lampka ABS
    > nie świeci, więc hamulce są ok", być może nawet przetestujesz hamulce
    > na prędkości powiedzmy 30-40km/h i wszystko zadziała jak należy a
    > potem się zdziwisz przy 90km/h :D

    Tak, to dobra analogia. Chyba dosyć blisko odzwierciedla problem z Ariane 5. Poza,
    być może, mechanizmem samozniszczenia, którego, mam nadzieję, w samochodzie nie mam.
    :-)

    --
    Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com


  • 84. Data: 2012-10-24 00:32:03
    Temat: Re: Dlaczego software to F35 jest pisany w C++ a nie w Ada
    Od: Marcin Kowalczyk <q...@g...com>

    W dniu środa, 26 września 2012 01:04:42 UTC-7 użytkownik Maciej Sobczak napisał:
    >
    > "Efficiency considerations had led to the disabling of the software handler (in Ada
    code) for this error trap [...]"
    >
    >
    >
    > Jeszcze raz: *disabling*.
    >
    >
    >
    > Jeszcze raz: *D*I*S*A*B*L*I*N*G*.
    >
    >
    >
    > Znaczy się: tak, można w Adzie *wyłączyć* bezpieczniki. To jest język do
    programowania "systemowego", więc wszystko musi być tam możliwe, również sytuacja, w
    której programista wyraźnie stwierdza, że nie chce pomocy ze strony języka, i że
    bierze za to odpowiedzialność. To, co odróżnia Adę od C to fakt, że te bezpieczniki
    tam w ogóle są (w C w ogóle nie ma) i że te bezpieczniki są domyślnie włączone. To
    właśnie sprawia, że ten język jest bezpieczniejszy.

    "Bezpiecznikiem" był if w kodzie, który sprawdzał, czy wartość mieści się w zakresie
    int16, i jeśli nie, to podstawiał skrajne wartości z zakresu. "Disabling" polegało na
    tym, że tego ifa w ogóle nie było, choć był w analogicznej sekcji kodu obok. Nie był
    więc wcale "domyślnie włączony", a w C można było napisać takiego ifa tak samo jak w
    Adzie.


  • 85. Data: 2012-10-24 09:59:52
    Temat: Re: Dlaczego software to F35 jest pisany w C++ a nie w Ada
    Od: Maciej Sobczak <s...@g...com>

    W dniu środa, 24 października 2012 00:32:07 UTC+2 użytkownik Marcin Kowalczyk
    napisał:

    > "Bezpiecznikiem" był if w kodzie, który sprawdzał, czy wartość mieści się w
    zakresie int16, i jeśli nie, to podstawiał skrajne wartości z zakresu.

    Oprócz tego jawnego ifa w kodzie Ada wstawia własne ify (albo realizuje to w
    jakikolwiek inny sposób) przy każdej konwersji między dwoma typami liczbowymi.

    To znaczy, że nawet bez tego jawnego ifa w kodzie Ada ma mechanizm sprawdzający,
    który powoduje reakcję na poziomie software'u (wyjatek Constraint_Error, który da się
    obsłużyć programowo).
    W razie potrzeby służę odpowiednim paragrafem.

    > "Disabling" polegało na tym, że tego ifa w ogóle nie było,

    "Disabling" musiało też polegać na wyłączeniu tego mechanizmu języka, którego nie
    widać, ale który normalnie jest włączony. Dlatego konwersja nie spowodowała rekacji
    na poziomie software'u, tylko na poziomie hardware'u, gdzie software nie miał już nic
    do powiedzenia.

    > Nie był więc wcale "domyślnie włączony",

    Był. To wynika z definicji języka.

    > a w C można było napisać takiego ifa tak samo jak w Adzie.

    Można go też było nie napisać tak jak w Adzie. Różnica polega na tym, że Ada ma
    jeszcze pod spodem mechanizm zdefiniowany na poziomie języka, którego C nie ma.
    Ten mechanizm jest normalnie włączony, ale można go wyłączyć.

    --
    Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com


  • 86. Data: 2012-10-24 18:38:29
    Temat: Re: Dlaczego software to F35 jest pisany w C++ a nie w Ada
    Od: Baranosiu <r...@w...pl>

    Dnia 24.10.2012 Maciej Sobczak <s...@g...com> napisał/a:
    >> a w C można było napisać takiego ifa tak samo jak w Adzie.
    >
    > Można go też było nie napisać tak jak w Adzie. Różnica polega na tym, że Ada ma
    jeszcze pod spodem mechanizm zdefiniowany na poziomie języka, którego C nie ma.
    > Ten mechanizm jest normalnie włączony, ale można go wyłączyć.
    >

    Nie jest wcale tak "zawsze i wszędzie", przykład (liczenie silni metodą
    rekurencyjną):

    with Ada.Text_Io; use Ada.Text_Io;
    with Ada.Integer_Text_Io; use Ada.Integer_Text_Io;
    procedure Tabelka_silnia is
    function Silnia (N:Integer) return Integer is
    begin
    if (N=0) then
    return 1;
    else
    return N*Silnia(N-1);
    end if;
    end Silnia;
    begin
    for I in 1..50 loop
    Put(I); Put(Silnia(I));
    New_Line;
    end loop;
    end Tabelka_silnia;

    I... dupa, typ wbudowany okazuje się "za mały" na pomieszczenie wyniku
    a kontroli zakresów (i generowania wyjątków) nie ma. To że na przykład
    GNAT ma opcję -gnato to już inna bajka (mógłby nie mieć i też by
    przeszedł testy na zgodność). Żaden język nie zwalnia od myślenia :D


  • 87. Data: 2012-10-25 09:45:57
    Temat: Re: Dlaczego software to F35 jest pisany w C++ a nie w Ada
    Od: Maciej Sobczak <s...@g...com>

    W dniu środa, 24 października 2012 18:38:35 UTC+2 użytkownik Baranosiu napisał:

    > Nie jest wcale tak "zawsze i wszędzie",

    Tak jest "zawsze i wszędzie" w Adzie, bo tak mówi standard.

    > przykład (liczenie silni metodą
    > rekurencyjną):
    [...]
    > I... dupa,

    Nie dupa, tylko wyjątek leci, zgodnie ze standardem.

    > GNAT ma opcję -gnato to już inna bajka

    To nie jest inna bajka:

    http://coding.derkeiler.com/Archive/Ada/comp.lang.ad
    a/2006-08/msg00623.html

    "GNAT without -gnato is _not_ a standard Ada compiler!"

    Użyj kompilatora zgodnego ze standardem, to będziesz miał standardowe zachowanie.

    > Żaden język nie zwalnia od myślenia :D

    Przecież nikt nigdzie tak nie twierdzi.

    --
    Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com


  • 88. Data: 2012-10-25 18:21:38
    Temat: Re: Dlaczego software to F35 jest pisany w C++ a nie w Ada
    Od: Baranosiu <r...@w...pl>


    Dnia 25.10.2012 Maciej Sobczak <s...@g...com> napisał/a:
    >> Nie jest wcale tak "zawsze i wszędzie",
    >
    > Tak jest "zawsze i wszędzie" w Adzie, bo tak mówi standard.
    >
    >> przykład (liczenie silni metodą
    >> rekurencyjną):
    > [...]
    >> I... dupa,
    >
    > Nie dupa, tylko wyjątek leci, zgodnie ze standardem.
    >
    >> GNAT ma opcję -gnato to już inna bajka
    >
    > To nie jest inna bajka:
    >
    > http://coding.derkeiler.com/Archive/Ada/comp.lang.ad
    a/2006-08/msg00623.html
    >
    > "GNAT without -gnato is _not_ a standard Ada compiler!"
    >
    > Użyj kompilatora zgodnego ze standardem, to będziesz miał
    > standardowe zachowanie.


    To że ktoś gdzieś na forum tak pisze dorabiając swoje wytłumaczenie to jego
    sprawa. W AdaRM wyraźnie jest napisane (odnośnie Ada95):

    All parameter and result subtypes of the predefined integer operators
    are of such unconstrained subtypes, allowing extended-length registers
    to be used as operands or for the result. In an earlier version of Ada
    95, Integer was unconstrained.

    Co innego jak się dodało jawnie 'range', ale bez tego Ada95 nie była
    zobligowana do wygenerowania wyjątku (a że kompilatory dodawały to
    jako opcję, to się wcale nie dziwię, bo to była luka w
    standardzie), to samo zresztą dotyczyło typów rzeczywistych (mogły
    zwrócić "nieskończoność" bez generowania wyjątku jeśli się nie ustawiło
    odpowiednio zakresu).


  • 89. Data: 2012-10-27 09:05:45
    Temat: Re: Dlaczego software to F35 jest pisany w C++ a nie w Ada
    Od: Maciej Sobczak <s...@g...com>

    W dniu czwartek, 25 października 2012 18:21:45 UTC+2 użytkownik Baranosiu napisał:

    > To �e kto� gdzie� na forum tak pisze dorabiaj�c swoje wyt�umaczenie to
    jego
    > sprawa.

    To samo jest napisane w dokumentacji do GNATa, tylko bardziej rozwlekle. To, że ktoś
    gdzieś na forum usilnie próbuje rozkręcić flejma wokół czegoś, co nie jest problemem,
    to jego sprawa.

    Rekurencyjnie liczona silnia na Integerach to najbardziej oderwany od rzeczywistości
    przykład jaki może być i to na dwóch poziomach. Nie dość, że sama silnia liczona w
    ten sposób to najbardziej nadużywany przykład w historii, to jeszcze posłużyłeś się
    gołym typem Integer. Nikt tak nie robi (w szczególności: nikt tak nie zrobił w
    Ariane). Definiuje się nowy typ (albo chociaż podtyp) odpowiednio do dziedziny
    problemu - nie mam pojęcia z jakiej dziedziny pochodził Twój przykład z silnią, ale
    poprawiając ten sztuczny przykład przez użycie adekwatnie sztucznego typu wyszłoby
    coś takiego:

    with Ada.Text_IO;
    use Ada.Text_IO;

    procedure Test is

    type My_Int is range 0 .. 1000;

    function Silnia (N : in My_Int) return My_Int is
    begin
    if N = 0 then
    return 1;
    else
    return N * Silnia (N-1);
    end if;
    end Silnia;

    begin
    for I in My_Int range 1 .. 50 loop
    Put (My_Int'Image (I) & " " &
    My_Int'Image(Silnia (I)));
    New_Line;
    end loop;
    end Test;

    I teraz masz bardziej realistyczny wyjątek z powodu testu "range check" a nie
    "overflow check". Co więcej, łatwo swierdzić (statycznie), że użyte w kodzie operacje
    na My_Int nie mają prawa przekręcić typu bazowego, więc "overflow check" nie jest
    potrzebny - i to niezależnie od opcji -gnato ani od jej domyślnych ustawień.

    Czyli Twój przykład z silnią opisuje problem, którego nie ma.
    Nie ma go nawet w... przykłdzie z silnią.

    > W AdaRM wyra�nie jest napisane (odno�nie Ada95):

    Wyraźnie mamy rok 2012, więc od Twoich rozważań dzielą nas dwie edycje standardu.
    Twoje rozważania nie dotyczą też kodu z Ariane (ani żadnego realnie napisanego kodu),
    więc... o co chodzi?

    --
    Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com


  • 90. Data: 2012-10-27 16:53:32
    Temat: Re: Dlaczego software to F35 jest pisany w C++ a nie w Ada
    Od: Baranosiu <r...@w...pl>

    Dnia 27.10.2012 Maciej Sobczak <s...@g...com> napisał/a:
    > with Ada.Text_IO;
    > use Ada.Text_IO;
    >
    > procedure Test is
    >
    > type My_Int is range 0 .. 1000;

    No jak tak obetniesz, to Ci wyskoczy wyjątek, bo wystarczy że wynik
    trafi powiedzmy w 1001, ale daj range Integer'First+1 .. Integer'Last-1;
    i już wyjątek "fartem" nie wyskoczy pomimo przepełnienia. Po prostu
    był błąd w specyfikacji Ada95 (a taka obowiązywała w momencie lotu
    Ariane 5 :D) wg której 'range' było sprawdzane w momencie przypisania
    i jeśli pomimo "przekręcenia się licznika" wynik "fartem" siedział w
    zakresie zdefiniowanym przez 'range' to było ok.

    Załóżmy, że sprzętowo Integer jest powiedzmy 8-bitowy (wartości od
    -128 do 127, tak wiem, według specyfikacji musi być co najmniej
    16-bitowy ze znakiem, ale chodzi o prostotę przykładu), wtedy jeśli
    zrobisz

    subtype MyType is Integer range -100 .. 100;

    To wynik działania 2*100 nie wygeneruje wyjątku, bo to daje -56 (w
    arytmetyce 8-bitowej ze znakiem) a więc mieści się w zakresie
    -100..100. Ada95 niestety nie była odporna na takie rzeczy i tyle
    (niedoprecyzowana specyfikacja).

    Nie twierdzę, że podany przykład liczenia silni jest wzorem dobrego
    programowania, czy super optymalną metodą numeryczną, chodziło mi o
    podanie prostego przykładu, gdzie Ada95 nie ratowała "automagicznie"
    (przez na przykład wygenerowanie wyjątku) gdy obliczenia wyskakiwały
    poza zakres. Przy tego typu przepełnieniach bezpieczniki nie miały
    znaczenia (chyba, że kompilator miał dodatkowe mechanizmy ich
    wykrywania, ale to nie było wymagane przez specyfikację).

strony : 1 ... 8 . [ 9 ] . 10


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: