eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingCo sie tu dzieje?...Re: Co sie tu dzieje?...
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!news.supermedia.pl!plix.pl!newsfeed2.plix.pl!news.nask.pl!news.nask.or
    g.pl!news.internetia.pl!not-for-mail
    From: Edek <e...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: Co sie tu dzieje?...
    Date: Sun, 28 Apr 2013 23:02:31 +0000 (UTC)
    Organization: Netia S.A.
    Lines: 80
    Message-ID: <klk9q7$q9d$1@mx1.internetia.pl>
    References: <3...@4...com>
    <e...@g...com>
    <c...@4...com>
    <9...@g...com>
    <5...@4...com>
    <6...@g...com>
    <klcnu3$d98$1@somewhere.invalid>
    <8...@g...com>
    <7...@r...googlegroups.com>
    <kle28d$iv$1@mx1.internetia.pl>
    <5...@s...googlegroups.com>
    <klec7k$iv$2@mx1.internetia.pl> <klf36m$6e0$1@somewhere.invalid>
    <klgghb$79t$3@mx1.internetia.pl> <klhl6o$cnr$1@somewhere.invalid>
    <klhq1c$ehd$3@mx1.internetia.pl> <kljrr4$fu5$1@somewhere.invalid>
    NNTP-Posting-Host: 159-205-138-229.adsl.inetia.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: mx1.internetia.pl 1367190151 26925 159.205.138.229 (28 Apr 2013 23:02:31
    GMT)
    X-Complaints-To: a...@i...pl
    NNTP-Posting-Date: Sun, 28 Apr 2013 23:02:31 +0000 (UTC)
    X-Tech-Contact: u...@i...pl
    User-Agent: Pan/0.139 (Sexual Chocolate; GIT bf56508 git://git.gnome.org/pan2)
    X-Server-Info: http://www.internetia.pl/
    Xref: news-archive.icm.edu.pl pl.comp.programming:202941
    [ ukryj nagłówki ]

    Dnia Sun, 28 Apr 2013 20:04:00 +0100 po głębokim namyśle Andrzej Jarzabek
    rzekł:

    > On 28/04/2013 01:21, Edek wrote:
    >> Dnia Sat, 27 Apr 2013 23:58:31 +0100 po głębokim namyśle Andrzej
    >> Jarzabek rzekł:
    >>>>> Doświadczenie uczy, że generykii wyjątki są przydatne w kodowaniu
    >>>>> problemów w językach imperatywnych/OO, więc to samo będzie raczej
    >>>>> dotyczyć kodu realizującego to samo zadanie, tylko chodzącego w
    >>>>> ramach aplikacji współbieżnej i równoległej.
    >>>>
    >>>> Architektury procesów rozproszonych nie tworzy się tak, że mamy
    >>>> wersję desktopową i "tylko ją rozproszymy".
    >>>
    >>> Języki programowania (ogólnego zastosowania) nie służą do opisywania
    >>> architektury systemu, tylko do pisania programów.
    >>
    >> A to było do mnie? Ja gdzieś twierdziłem, że "do opisywania"?
    >
    > Napisałeś zdanie, które się zaczynało od "Architektury..."
    > Wyglądało, jakbyś odpowiadał na to, co było powyżej. Jeśli to było takie
    > stwierdzenie bez związku z czymkolwiek to przepraszam bardzo, piękną
    > mamy pogodę.

    Nie, nie było bez związku. Zacznę od drobnego framentu: wyjątki. Co
    już A.L. uznał za opary absurdu, w rozproszonym procesie o błędzie
    trzeba czasami powiadomić kilka innych Procesów [1]. I tu jest
    idealny przykład dlaczego Go jest dostosowane do systemów
    rozproszonych: ma defer, panic, recover.

    Różnica ze względu na rozproszoną architekturę jest taka, że
    wyjątek łapie się w jednym miejscu, a defer-panic-recover pozwalają
    ręcznie przekazać informację o błędzie w wielu kierunkach. Oprócz
    tego panic() jest jak throw, recover() jak catch(), a defer()
    jak finally; tylko dużo elegantsze. Panic() zwija stos jak throw.

    Znowu tylko fragment: finally-clause vs. defer. Defer mnie się bardziej
    podoba, bo defer() używa się w miejscu inicjalizacji zasobu, trochę
    zastępuje "goto cleanup2;" z C, ale działa podczas unwind, i nie
    ma cech finally z Javy:
    con = ...;
    stmtFoo = ...;
    stmtBar = ...;
    ... stronę niżej ...
    finally {
    if (con != null) con.close();
    if (stmtFoo != null) {
    stmtFoo.bar(); // ojej, a czy to nie rzuci wyjątku? TODO FIXME
    smtmFoo.close(); // TODO owinąć kolejnym finally, podpisano
    // deweloper O'Hara
    }
    itd.

    Ten styl z Javy jest fatalny. Dodatkowo, Java jest tu niespójna,
    bo nie można zadeklarować "final stmtFoo" - bo będzie niezainicjalizowane
    w finally. Defer() pozwala dodawać elementy czyszczenia w miarę
    inicjalizowania elementów, mniej więcej tak, że po stworzeniu
    "con" dodaje się "defer(con.close())" itd.

    Potem, w Go switch + przekazanie błędu kanałem pozwala w kilku
    linijkach propagować błędy pomiędzy Procesami, co w przypadku
    wyjątków _zawsze i wszędzie_ jest kłopotliwe, nawet w C++11.

    To wszystko jest bardzo fajnie przemyślane moim zdaniemi i jest
    lepsze niż wyjątki. Wbrew twierdzeniu że "nie mam pojęcia o
    czym mówię" mogę podać przykłady już konkretne tego, o czym mówiłem
    jedynie w postaci haseł. W zasadzie rozwinąłem się tu tylko
    o wyjątkach - "dlaczego niby miałyby być potrzebne i w którą stronę
    ma wyjątek polecieć, jeżeli jest kilka kanałów?". A że może
    być ich wiele wykłada się na I roku studiów.

    Z generykami jest jeszcze lepiej, zwłaszcza tymi z Javy.

    Może tak będzie łatwiej, zamist posługiwać się abstrakcyjnym poziomem
    dyskusji mówić o konkretach w Go i np. Javie.

    [1] W sensie goroutinges, czu dowolnego innego jednowątkowego algorytmu

    --
    Edek

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: