eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingNiezmienniki pętli › Re: Niezmienniki pętli
  • X-Received: by 2002:a37:a2ca:: with SMTP id l193mr158722qke.2.1542611684594; Sun, 18
    Nov 2018 23:14:44 -0800 (PST)
    X-Received: by 2002:a37:a2ca:: with SMTP id l193mr158722qke.2.1542611684594; Sun, 18
    Nov 2018 23:14:44 -0800 (PST)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin2!goblin1
    !goblin.stu.neva.ru!z5-v6no3211866ite.0!news-out.google.com!y103-v6ni3941ita.0!
    nntp.google.com!z5-v6no3211862ite.0!postnews.google.com!glegroupsg2000goo.googl
    egroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Sun, 18 Nov 2018 23:14:44 -0800 (PST)
    In-Reply-To: <pss4d0$14n$1@node2.news.atman.pl>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=165.225.84.75;
    posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S
    NNTP-Posting-Host: 165.225.84.75
    References: <8...@g...com>
    <7...@g...com>
    <d...@g...com>
    <psp6q7$97o$1@node2.news.atman.pl>
    <6...@g...com>
    <pss4d0$14n$1@node2.news.atman.pl>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <3...@g...com>
    Subject: Re: Niezmienniki pętli
    From: Maciej Sobczak <s...@g...com>
    Injection-Date: Mon, 19 Nov 2018 07:14:44 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:212929
    [ ukryj nagłówki ]

    > > Tak, to ważna obserwacja. Może da się te rzeczy rozdzielić?
    >
    > To następna obserwacja: jeśl wpływa to na runtime release należy to
    > odrzucić.

    więc odrzućmy. Niech sobie będą statyczne asercje oraz dynamiczne, ale sterowane
    opcjami kompilatora.

    > Jest, ale w przypadku nadmiaru checkerów nie da się pisać czytelnie.
    [...]
    > Jednak dalej brakuje mi czegoś takiego jak int a<4-200>

    Czyli ogólnie: type invariants (niezmienniki typów). Wtedy warunek poprawności dla
    danego typu opisuje sie w jego definicji i nie trzeba już zaciemniać kodu pisząc co
    chwilę asercje, czy obiekt ma dobry stan. Tzn. zminimalizujmy zaciemnienie zbierając
    je do jednego miejsca, z dala od algorytmu.
    Ciekawe, że wtedy można odróżnić niezmienniki typów (takie jak zakres zmiennej) od
    niezmienników obliczeń (np. pętli) i wraz z tym rozróżnieniem dać im osobne miejsce w
    kodzie. Przecież nie wszytko musi być klasycznym assertem.

    > Contraints by się
    > przydało i już powoduje to zniknięcie kilku lini DbC.

    Chyba mamy to samo na myśli.

    > Obserwuje że ludzie nie chcą języków bezpiecznych.

    Zgadza się.

    > Na początek chciabym w C++ takie coś:
    >
    > debug {
    > // O(N^2) checker
    > }

    Wystarczy rozszerzyć składnię asserta. W tej chwili assert musi dostać jedno
    wyrażenie, ale można by go rozszerzyć tak, żeby akceptował dowolne fragmenty kodu. W
    niektórych językach to się robi o tyle łatwiejsze, że wszystko jest albo może być
    wyrażeniem, również pętla While czy cokolwiek innego - wtedy do takiego asserta można
    wsadzić dowolny fragment kodu, nawet z własnymi definicjami zmiennych wykorzystanych
    w środku. Ale w C++ chyba niewiele trzeba, żeby to osiągnąć, np. z taką składnią:

    assert(dowolnyfragmentkodu, wynik_bool);

    I użyć tego tak:

    assert(
    int i; // albo inne definicje
    int j = x; // x jest na zewnątrz, ale widać go tutaj

    while (orzemy_jak_możemy)
    {
    // obliczenia, wywołania funkcji, itd.
    ...
    },

    x > 0 && i < 10 // jakiś ostateczny warunek
    );

    I wtedy assert, tylko w trybie debug, wykonuje ten kod a na końcu sprawdza warunek
    logiczny z drugiego swojego argumentu. W trybie release nic nie robi.

    Kto zaproponuje definicję makra assert o takich zdolnościach?

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

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: