🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #205280

Re: Co sie tu dzieje?...

#205280
From: Edek
Date: Sun, 28 Apr 2013 23:02
80 lines
5314 bytes
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
Technical Details
Message-ID: <klk9q7$q9d$1@mx1.internetia.pl>
Path: mbox-mo1.pugleaf.net!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.org.pl!news.internetia.pl!not-for-mail
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>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!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.org.pl!news.internetia.pl!not-for-mail
From: Edek <edek.pienkowski@gmail.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: <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>
NNTP-Posting-Host: 159-205-138-229.adsl.inetia.pl
Mime-Version: 1.0
X-Trace: mx1.internetia.pl 1367190151 26925 159.205.138.229 (28 Apr 2013 23:02:31 GMT)
X-Complaints-To: abuse@inetia.pl
NNTP-Posting-Date: Sun, 28 Apr 2013 23:02:31 +0000 (UTC)
X-Tech-Contact: usenet@internetia.pl
User-Agent: Pan/0.139 (Sexual Chocolate; GIT bf56508 git://git.gnome.org/pan2)
X-Server-Info: http://www.internetia.pl/
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit