-
Data: 2013-04-29 01:02:31
Temat: Re: Co sie tu dzieje?...
Od: Edek <e...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie 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
Następne wpisy z tego wątku
- 29.04.13 04:23 A.L.
- 29.04.13 11:56 Andrzej Jarzabek
- 29.04.13 13:29 Andrzej Jarzabek
- 29.04.13 15:03 Edek
- 29.04.13 15:32 Edek
- 29.04.13 16:35 Edek
- 29.04.13 16:29 A.L.
- 29.04.13 17:06 Edek
- 29.04.13 17:27 A.L.
- 29.04.13 17:32 Andrzej Jarzabek
- 29.04.13 17:57 Edek
- 29.04.13 17:51 Stachu 'Dozzie' K.
- 29.04.13 18:15 Andrzej Jarzabek
- 29.04.13 18:28 Edek
- 29.04.13 19:07 Edek
Najnowsze wątki z tej grupy
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
Najnowsze wątki
- 2025-07-05 Shrek, wzrośnie cena prądu :-)
- 2025-07-05 Warszawa => Senior Frontend Developer (React + React Native) <=
- 2025-07-05 Środa Wielkopolska => SAP FI/CO Internal Consultant <=
- 2025-07-05 Środa Wielkopolska => SAP FI/CO Konsultant wewnętrzny <=
- 2025-07-06 Płacić za wodę ze studni
- 2025-07-06 Kolejny inżynier...
- 2025-07-05 UE ustępuje pod presją Trumpa. Socjaldemokraci: oddaliśmy miliardy
- 2025-07-04 od kiedy można obrażać Plastusia i do kiedy Batyra?
- 2025-07-05 UE ustępuje pod presją Trumpa. Socjaldemokraci: oddaliśmy miliardy
- 2025-07-03 Trybik
- 2025-07-04 Renault Symbioz
- 2025-07-04 Architektura IIIRP: Wyjątkowa, a prymitywniejsza niż stodoła pod zaborami
- 2025-07-04 Warszawa => International Freight Forwarder <=
- 2025-07-04 Wrocław => SAP ABAP Developer <=
- 2025-07-04 Warszawa => Mid/Senior IT Recruiter <=