eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingRe: W C++ brak finally?
Ilość wypowiedzi w tym wątku: 17

  • 11. Data: 2012-07-02 11:56:40
    Temat: Re: W C++ brak finally?
    Od: "AK" <n...@n...com>

    Użytkownik "Wojciech "Spook" Sura" <s...@o...pl> napisał:

    Podpieram sie (po raz n-ty) rzeczywistoscia:

    bar.cpp
    =====
    int bar(int a, int b, int c)
    {
    return (a + b) + c;
    }

    foo.cpp
    =====
    int foo(int a, int b, int c)
    {
    return a + (b + c);
    }

    D:\>diff bar.asm foo.asm
    3c3
    < ; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.30729.01
    <
    < TITLE D:\bar.cpp
    ---
    > ; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.30729.01
    >
    > TITLE D:\foo.cpp
    12c12
    < PUBLIC ?bar@@YAHHHH@Z ; bar
    ---
    > PUBLIC ?foo@@YAHHHH@Z ; foo
    14c14
    < ; COMDAT ?bar@@YAHHHH@Z
    ---
    > ; COMDAT ?foo@@YAHHHH@Z
    19,20c19,20
    < ?bar@@YAHHHH@Z PROC ; bar, COMDAT
    < ; File d:\bar.cpp
    ---
    > ?foo@@YAHHHH@Z PROC ; foo, COMDAT
    > ; File d:\foo.cpp
    28c28
    < ?bar@@YAHHHH@Z ENDP ; bar
    ---
    > ?foo@@YAHHHH@Z ENDP ; foo

    AK


  • 12. Data: 2012-07-02 12:06:17
    Temat: Re: W C++ brak finally?
    Od: Roman W <b...@g...pl>

    On Monday, July 2, 2012 10:56:40 AM UTC+1, AK wrote:
    > Użytkownik "Wojciech "Spook" Sura" <s...@o...pl> napisał:
    >
    > Podpieram sie (po raz n-ty) rzeczywistoscia:
    >
    > bar.cpp
    > =====
    > int bar(int a, int b, int c)
    > {
    > return (a + b) + c;
    > }
    >
    > foo.cpp
    > =====
    > int foo(int a, int b, int c)
    > {
    > return a + (b + c);
    > }

    Zmien "int" na "double" i powtorz ten test.

    RW


  • 13. Data: 2012-07-02 13:19:09
    Temat: Re: W C++ brak finally?
    Od: "Wojciech \"Spook\" Sura" <s...@o...pl>

    Dnia 02-07-2012 o 11:56:40 AK <n...@n...com> napisał(a):
    (...)

    Ale ja mam w głębokim poważaniu rzeczywistość. Interesuje mnie, w którym
    miejscu standard C++ mówi, jak powinien się zachowywać kompilator podczas
    rozwiązywania nawiasów. Jest na przykład całkiem możliwe, że w *tym
    konkretnym przypadku* optymalizator zauważył, że kolejność nie ma
    znaczenia. Albo że kompilator nie jest zgodny ze standardem w tej kwestii.

    Pozdrawiam -- Spook.

    --
    Używam klienta poczty Opera Mail: http://www.opera.com/mail/


  • 14. Data: 2012-07-02 15:24:34
    Temat: Re: W C++ brak finally?
    Od: "AK" <n...@n...com>

    Użytkownik "Wojciech "Spook" Sura" <s...@o...pl> napisał:

    '> Ale ja mam w głębokim poważaniu rzeczywistość.

    Jeśli tak, to już jest wyłącznie zwykłe palanciarstwo zawodowe (częste
    wśród "niedzielnych programistow").
    Zmien opcję, pókiś młody :)

    PS: Nie tak znow calkiem dawno dane mi bylo pracowac z kodem
    "wielopratformowym": Win, Solaris, Linux, i HP-UX.
    Niby niec specjalnego, tyle ze ten compilel C++ HP byl "bez -AA" czyli
    w wersji.. ARM C++. Tam to sobie standard (nawet ten stary) C++
    czesto mozna bylo sobie wlozyc ..., ale sprobowalbys "wytlumaczyc"
    swa niemoc ("no bo to niezgodne ze standardem C++ plose Pani,
    a jak mam w glebokim powazniu taka rzeczywistosc") .
    Ciekawe, ja by wygladalo zrozumienie Twej "zawodowej" postawy
    przez druga strone wyplaty ;).

    AK


  • 15. Data: 2012-07-02 16:54:40
    Temat: Re: W C++ brak finally?
    Od: Michoo <m...@v...pl>

    On 02.07.2012 10:36, AK wrote:
    > Użytkownik "Artur M. Piwko" <m...@b...pl> napisał:
    >
    >> Jako wyłączny obserwator wątku chciałbym zaznaczyć, że jeśli coś nie
    >> zachodzi zawsze to nie jest to własność spełniona.
    >
    > Racja. Dokladnie o to chodzi.
    > Nawiasy w C/C++ nie zawsze determinuja kolejnosc "podobliczen",
    Zgadza się, determinują wynik. Nie determinują kolejności obliczeń w
    przypadku gdy nie ma to znaczenia dla wyniku[1], co zresztą napisałem w
    wiadomości będącej początkiem Twojego rantu na mnie [4]

    > (a raczej ~na pol), a wiec wlasnosc ta (uzywanie wylacznie nawiasow
    > do wymuszania tejze kolejnosci) nie jest spelniona.
    Nieprawda. Kompilator zapewnia, że jeżeli wykona optymalizację to nie
    zmieni ona wyniku na inny niż opisany za pomocą wyrażenia. Czyli nawet
    jeżeli liczy inaczej niż to wynika z zapisu to uzyskany wynik jest taki
    jaki został wymuszony nawiasami.[3]

    Np:
    (a+b)+(a+b) zostanie prawdopodobnie policzone na uintach jako (a+b)*2,
    ale już na float nie. W obu przypadkach wynik będzie dokładnie taki jak
    to zapisano nawiasami.

    > W tych jezykach rowniez kolejnosc obliczania podwyrazen
    > jest jednooznacznie zdeterminowana (od lewej do prawej).
    > W C/C++ nie.
    W C++ jest zdefiniowane grupowanie, czyli kolejność obliczeń.
    "Niezdefiniowana kolejność obliczania podwyrażneń" oznacza tylko tyle,
    że standard nie narzuca w jakiej kolejności liczyć niezależne składowe.
    (Np. lewa i prawa strona przypisania.)

    [1] Ściśle mówiąc zapewnienie jest szersze, dotyczy zarówno
    obserwowalnego zachowania jak i efektów ubocznych.
    [3] Standard opisuje "abstrakcyjną maszynę" i na niej definiuje
    operacje. W tym tworze tożsamości znane z matematyki jak np. a/b==1/b*a
    nie są w ogólności prawdziwe, za to prawdziwe są inne np. dla typu char
    w arytmetyce modulo bez trap na przepełnieniu (char)255==-1.
    [4] nntp://jn386g$qrf$...@m...internetia.pl

    --
    Pozdrawiam
    Michoo


  • 16. Data: 2012-07-04 16:06:53
    Temat: Re: W C++ brak finally?
    Od: Artur Muszyński <a...@u...wytnijto.com.pl>

    > (a+b)+(a+b) zostanie prawdopodobnie policzone na uintach jako (a+b)*2

    Od 10 lat przestało mnie to fascynować, ale chyba nic się nie zmieniło,
    że mnożenie jest be. IMHO będzie (a+b)<<1

    artur


  • 17. Data: 2012-07-05 02:01:04
    Temat: Re: W C++ brak finally?
    Od: Michoo <m...@v...pl>

    On 04.07.2012 16:06, Artur Muszyński wrote:
    >> (a+b)+(a+b) zostanie prawdopodobnie policzone na uintach jako (a+b)*2
    >
    > Od 10 lat przestało mnie to fascynować, ale chyba nic się nie zmieniło,
    > że mnożenie jest be. IMHO będzie (a+b)<<1
    assemblerowo na x86 będzie pewnie add a,b; add a,a, albo sztuczka z
    lea, ale tu chodziło o idę przekształcenia.

    --
    Pozdrawiam
    Michoo

strony : 1 . [ 2 ]


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: