Article View: pl.comp.programming
Article #205300Re: Co sie tu dzieje?...
From: Andrzej Jarzabek
Date: Mon, 29 Apr 2013 11:29
Date: Mon, 29 Apr 2013 11:29
78 lines
6066 bytes
6066 bytes
On Apr 29, 12:02 am, Edek <edek.pienkow...@gmail.com> wrote: > 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: [...] > 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 No ale wyjątki (takie jak w Javie czy C++) nie służą do powiadamniania procesów. Jeśli trzeba powiadomić procesy, to kod, który to robi możesz mieć w catch. > 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. W takim razie przepraszam bardzo. Moja teza była taka, że wyjątki są przydatne, a nie że Go jest be, bo nie ma wyjątków. Doczytałem o panic i recover i jak dla mnie są to po prostu wyjątki, tylko troszeczkę inaczej zrobione. Z tego co przeczytałem jest to ficzer dodany do języka w późniejszym etapie i sądzę, że narzekanie, że nie ma wyjątków raczej pochodzi z czasu, kiedy nie było. Jeśli chodzi o to, co panic/recover wnoszą do rozproszonej architektury, to przykro mi, ale nie widzę różnicy. W dodatku z wykorzytsaniem w kontekście współieżności nie wydają się wnosić zbyt wiele w stosunku do wyjątków, bo z tego co wyczytałem to wyjście z goroutine w stanie spanikowanym wywala cały program. Interesującą różnicą między tradycyjnymi wyjątkami a panic/recover jest "dynamiczny" charakter tych drugich. Jak rozumiem defer/recover można rejestrować np. warunkowo w klauzuli if. Czy to dobrze czy źle, nie mam szczególnie zdania: widzę potencjalne problemy z czytelnością, łatwością wnioskowania p programie, wykrywaniem błędów i refaktoryzacją, w dodatku "tradycyjne" podejście oparte o zakresy wydaje mi się elegantsze. Być może natomiast panic/defer/recover mają jakieś ciekawe idiomatyczne sposoby stosowania, które może nawet jeszcze nie są odkryte. Po prostu nie wiem. Niepokojące natomiast są argumenty ze strony projektantów języka typu "tak, wiemy, że (cośtam w) panic/recover jest kijowe. Specjalnie zrobiliśmy kijowe, żebyście nie używali panic." > Znowu tylko fragment: finally-clause vs. defer. Defer mnie się bardziej Ach, ale akurat to, czy wyjątki są dobre, czy niedobre to jest oddzielny temat od tego, czy sprzątanie zasobów przez finally jest dobre czy niedobre. Są języki, które mają inne rozwiązania rtego problemu, i nawet w samej Javie da się stworzyć (i tworzy się) odpowiednie wrappery. > 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. Takie rozwiązanie, jak daje ci go, czyli złapać wyjątek w wątku, który go rzucił i przekazać jako wynic coroutine to z grubsza tak samo możesz zrobić w C++ przy pomocy future, try/catch, i pair. [...] > 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 No więc dokładnie w taką stronę, w jaką mu exception handler każe polecieć. Dokładnie tak jak z panic w Go. > Z generykami jest jeszcze lepiej, zwłaszcza tymi z Javy. Po przyjrzeniu się wygląda trochę tak, jakby w Go interfejsy dawały generyczność - przynajmniej taką jak w Javie, a może nawet trochę mocniejszą. Nie mam racji?
Technical Details
Message-ID:
<6cde8286-5e8c-4004-9e06-cd0355272efe@a14g2000vbm.googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.glorb.com!s14no735705qam.0!news-out.google.com!ef9ni28916qab.0!nntp.google.com!s14no735692qam.0!postnews.google.com!a14g2000vbm.googlegroups.com!not-for-mailReferences:
<3rrbn85nv2btd2954n8msmp3ca02fbhljd@4ax.com> <e3f7ddf9-c1f9-445c-94a9-039fd74a05c2@googlegroups.com> <cj6dn8tqjh1b88pb9etke84tilc2qtftbf@4ax.com> <9318dafe-e85c-4ebd-905b-2628ad89160f@googlegroups.com> <5oldn8913m5ov0ukr3coij9efbls7r41st@4ax.com> <6944983c-9c87-4618-94ce-30a83e5c12a7@googlegroups.com> <klcnu3$d98$1@somewhere.invalid> <84396146-1604-45f3-8d5a-e61fbdbe827e@googlegroups.com> <77ef23cf-b20c-47fd-ac81-03d5b1558bce@r7g2000vbw.googlegroups.com> <kle28d$iv$1@mx1.internetia.pl> <59792813-18e9-4d7d-b9f5-519786719e48@s4g2000vbr.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> <klk9q7$q9d$1@mx1.internetia.pl>Show Full Headers
Complete Article Headers
X-Received: by 10.224.75.137 with SMTP id y9mr17995186qaj.3.1367234960537; Mon, 29 Apr 2013 04:29:20 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.49.1.197 with SMTP id 5mr902160qeo.24.1367234960461; Mon, 29 Apr 2013 04:29:20 -0700 (PDT) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.glorb.com!s14no735705qam.0!news-out.google.com!ef9ni28916qab.0!nntp.google.com!s14no735692qam.0!postnews.google.com!a14g2000vbm.googlegroups.com!not-for-mail Newsgroups: pl.comp.programming Date: Mon, 29 Apr 2013 04:29:20 -0700 (PDT) Complaints-To: groups-abuse@google.com Injection-Info: a14g2000vbm.googlegroups.com; posting-host=80.254.146.36; posting-account=jr5y-woAAAAWidgVjrSJ6j8m650CTb-v NNTP-Posting-Host: 80.254.146.36 References: <3rrbn85nv2btd2954n8msmp3ca02fbhljd@4ax.com> <e3f7ddf9-c1f9-445c-94a9-039fd74a05c2@googlegroups.com> <cj6dn8tqjh1b88pb9etke84tilc2qtftbf@4ax.com> <9318dafe-e85c-4ebd-905b-2628ad89160f@googlegroups.com> <5oldn8913m5ov0ukr3coij9efbls7r41st@4ax.com> <6944983c-9c87-4618-94ce-30a83e5c12a7@googlegroups.com> <klcnu3$d98$1@somewhere.invalid> <84396146-1604-45f3-8d5a-e61fbdbe827e@googlegroups.com> <77ef23cf-b20c-47fd-ac81-03d5b1558bce@r7g2000vbw.googlegroups.com> <kle28d$iv$1@mx1.internetia.pl> <59792813-18e9-4d7d-b9f5-519786719e48@s4g2000vbr.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> <klk9q7$q9d$1@mx1.internetia.pl> User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31,gzip(gfe) Message-ID: <6cde8286-5e8c-4004-9e06-cd0355272efe@a14g2000vbm.googlegroups.com> Subject: Re: Co sie tu dzieje?... From: Andrzej Jarzabek <andrzej.jarzabek@gmail.com> Injection-Date: Mon, 29 Apr 2013 11:29:20 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit