eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingNiezmienniki pętli › Re: Niezmienniki pętli
  • Data: 2018-11-19 08:14:44
    Temat: Re: Niezmienniki pętli
    Od: Maciej Sobczak <s...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie 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: