eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingDlaczego software to F35 jest pisany w C++ a nie w Ada › Re: Dlaczego software to F35 jest pisany w C++ a nie w Ada
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!news.task.gda.pl!not-for-mail
    From: Baranosiu <r...@w...pl>
    Newsgroups: pl.comp.programming
    Subject: Re: Dlaczego software to F35 jest pisany w C++ a nie w Ada
    Date: Sat, 27 Oct 2012 14:53:32 +0000 (UTC)
    Organization: CI TASK http://www.task.gda.pl/
    Lines: 35
    Message-ID: <k6gsh9$8qr$1@news.task.gda.pl>
    References: <3...@g...com>
    <3...@g...com>
    <k3idkc$ne3$1@node2.news.atman.pl>
    <9...@g...com>
    <k3spfr$46s$1@node2.news.atman.pl>
    <8...@g...com>
    <e...@g...com>
    <1...@g...com>
    <k695i4$gg0$1@news.task.gda.pl>
    <8...@g...com>
    <k6boug$3gr$1@news.task.gda.pl>
    <2...@g...com>
    Reply-To: Baranosiu <r...@w...pl>
    NNTP-Posting-Host: user-46-112-165-48.play-internet.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=iso-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: news.task.gda.pl 1351349612 9051 46.112.165.48 (27 Oct 2012 14:53:32 GMT)
    X-Complaints-To: a...@n...task.gda.pl
    NNTP-Posting-Date: Sat, 27 Oct 2012 14:53:32 +0000 (UTC)
    User-Agent: slrn/pre1.0.0-18 (Linux)
    Xref: news-archive.icm.edu.pl pl.comp.programming:200423
    [ ukryj nagłówki ]

    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ę).

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: