Proč ten hype okolo Go?

Kit

Re:Proč ten hype okolo Go?
« Odpověď #135 kdy: 29. 08. 2018, 20:07:52 »
Ja som si v go skusal rozne mensie tooly na vlastne pouzitie (typu webcrawler sprav na machine learning atd), ale mal som pocit, ze pisem stale dookola iba "if" (narazam na kontrolu chyb z volani).

Pokud jsi to psal strukturovaně, tak se nediv.


Kit

Re:Proč ten hype okolo Go?
« Odpověď #136 kdy: 29. 08. 2018, 20:11:02 »
Ja som si v go skusal rozne mensie tooly na vlastne pouzitie (typu webcrawler sprav na machine learning atd), ale mal som pocit, ze pisem stale dookola iba "if" (narazam na kontrolu chyb z volani). Ako oracle vydal graalvm s native-image, tak som na go uplne zabudol :). Jednoducho nemam argument nepouzit javu. Nejde s tym sice skompilovat vsetko, ale aj tak paradicka.

a bylo tech if nejak vic nez bloku try-catch v jave?

Pokud ty bloky try-catch děláš správně, tak jich bude mnohem méně než počet testování chyb po každém návratu z procedury.

Kit

Re:Proč ten hype okolo Go?
« Odpověď #137 kdy: 29. 08. 2018, 20:44:49 »
Ja som si v go skusal rozne mensie tooly na vlastne pouzitie (typu webcrawler sprav na machine learning atd), ale mal som pocit, ze pisem stale dookola iba "if" (narazam na kontrolu chyb z volani).

Pokud se nepletu, tak boilerplate vypadá asi takto:
Kód: [Vybrat]
f, err := os.Open("filename.ext")
if err != nil {
log.Fatal(err)
}

Je snad nějaký problém to předělat takto?
Kód: [Vybrat]
f, err := os.Open("filename.ext")
log.Fatal(err)

kde log.Fatal() bude vypadat asi takto:
Kód: [Vybrat]
func Fatal() {
if err == nil {
return
}
fmt.Println(err)
}

andy

Re:Proč ten hype okolo Go?
« Odpověď #138 kdy: 29. 08. 2018, 21:07:30 »
Je ich menej, lebo casto v tom catch proste nie je co zachranit, takze sa ani ziaden try-catch nerobi.

oss

Re:Proč ten hype okolo Go?
« Odpověď #139 kdy: 29. 08. 2018, 21:59:08 »
Tych try catch je ovela menej, v Go ak to chces robit dobre je co riadok to testovanie chyby, pri try catch to bude minimalne jeden try catch na telo metody, ak chces brutalne logovat, ked nie staci podla potreby.

@Kit: v tom priklade ale musis nejako zmenit flow programu, vo f mas teraz neplatnu hodnotu.

@stilett: To je dost zle prirovnanie.


jak24

Re:Proč ten hype okolo Go?
« Odpověď #140 kdy: 29. 08. 2018, 21:59:23 »
https://github.com/ethereum/go-ethereum

Market Cap Ethereum   $29,438,579,791

Kiwi

Re:Proč ten hype okolo Go?
« Odpověď #141 kdy: 30. 08. 2018, 00:33:36 »
Ja som si v go skusal rozne mensie tooly na vlastne pouzitie (typu webcrawler sprav na machine learning atd), ale mal som pocit, ze pisem stale dookola iba "if" (narazam na kontrolu chyb z volani). Ako oracle vydal graalvm s native-image, tak som na go uplne zabudol :). Jednoducho nemam argument nepouzit javu. Nejde s tym sice skompilovat vsetko, ale aj tak paradicka.

a bylo tech if nejak vic nez bloku try-catch v jave?

Pokud ty bloky try-catch děláš správně, tak jich bude mnohem méně než počet testování chyb po každém návratu z procedury.
A správně je to jak? Ona základní potíž spočívá ve správné klasifikaci chybového stavu. Bez výjimek s tím problém není, protože není rozdíl mezi stavy. Výjimky zavádějí speciální stav - chybový. Ale co to je? Chci otevřít soubor, který mezi tím někdo smazal - je to chyba, nebo jiný možný stav? Uživatel zadá ve výrazu dělení nulou - výjimka, nebo normální možný stav? Někde v nějakém cyklu se mi index dostane mimo meze - výjimka nebo možný stav? V tomto případě asi přímo chyba v programu.. K čemu ale výjimky mají sloužit? K ladění, nebo k reakci na nějaké stavy, které z nějakého důvodu chci ošetřovat jinak než jiné stavy? A proč?

Chápu určité výhody výjimek - zvláště při ladění, ale jinak je považuji za syntaktický balast. V případě ladění je to ale jen takový drahý assert, v případě normální reakce je to zvrácené - některé stavy ošetřovat klasicky, jiné úplně jinak - a jako "bonus" dochází ke ztrátě komtextu. Ta koncepce výjimek se mi prostě nelíbí.

.

Re:Proč ten hype okolo Go?
« Odpověď #142 kdy: 30. 08. 2018, 00:57:39 »
Pro těch pár lidí, co tady neblili nesmysly a nevedli hate, 3 nejnovější návrhy core týmu na zjednodušení kontrolu chyb a generika v Go2. Vše zpětně kompatibilní.

https://go.googlesource.com/proposal/+/master/design/go2draft.md


Tak až ty chyby v návrhu ofixují, můžeme se bavit dál.

Že je to mizerný jazyk teď, neznamená, že za pár let nezačne dávat smysl.
Jj, na to, že to je mizerný jazyk, je docela použitelný už teď. A kolik zajímavého SW je v tom napsáno už teď. Trochu mi to hlava nebere...

Kit

Re:Proč ten hype okolo Go?
« Odpověď #143 kdy: 30. 08. 2018, 01:06:36 »
Pokud ty bloky try-catch děláš správně, tak jich bude mnohem méně než počet testování chyb po každém návratu z procedury.
A správně je to jak? Ona základní potíž spočívá ve správné klasifikaci chybového stavu. Bez výjimek s tím problém není, protože není rozdíl mezi stavy. Výjimky zavádějí speciální stav - chybový. Ale co to je? Chci otevřít soubor, který mezi tím někdo smazal - je to chyba, nebo jiný možný stav? Uživatel zadá ve výrazu dělení nulou - výjimka, nebo normální možný stav? Někde v nějakém cyklu se mi index dostane mimo meze - výjimka nebo možný stav? V tomto případě asi přímo chyba v programu.. K čemu ale výjimky mají sloužit? K ladění, nebo k reakci na nějaké stavy, které z nějakého důvodu chci ošetřovat jinak než jiné stavy? A proč?

Chápu určité výhody výjimek - zvláště při ladění, ale jinak je považuji za syntaktický balast. V případě ladění je to ale jen takový drahý assert, v případě normální reakce je to zvrácené - některé stavy ošetřovat klasicky, jiné úplně jinak - a jako "bonus" dochází ke ztrátě komtextu. Ta koncepce výjimek se mi prostě nelíbí.

Je to přesně obráceně, než jak to píšeš. Chybový stav je obvykle nějaké číslo, zatímco výjimka má svou třídu, textový popis a případně ještě kód chyby. Výjimka tedy obsahuje celý potřebný kontext a když se nechá správně propadnout, tak se kompletně vytrasuje.

Jak si mám představit "Chci otevřít soubor, který mezi tím někdo smazal"? Pro mne je to pouhé "Chci otevřít soubor, který neexistuje" - vyhodí to výjimku. Dělení nulou? - výjimka. Index mimo meze - výjimka. Chybové stavy pro mne přestaly existovat - nepoužívám je, protože jsou málo popisné. Když neošetřím chybový stav, tak se mi proces vysype o kus dál. Když neošetřím výjimku, tak mi propadne až do záchytu nebo ukončí proces. Výjimky jsou tedy spolehlivější.

Výjimka by však měla být výjimkou. Nelze ji tedy zneužívat k řízení běhu programu, ale jen tam, kde za běhu došlo k chybě. Výjimky s laděním nijak nesouvisí.

.

Re:Proč ten hype okolo Go?
« Odpověď #144 kdy: 30. 08. 2018, 01:22:51 »
Tak až ty chyby v návrhu ofixují, můžeme se bavit dál.

Vím, že asi nemá smysl na tebe opakovaně reagovat, už jsme se o tom tady bavili, ale stejně mi to nedá. Tak nějak si nedokážu připustit, že zrovna ty bys byl tak zabedněný.

Neexistuje jedna univerzální pravda. Někdo má prostě jiné priority než ty. To, že jsou trekové boty jedny z nejuniverzálnějších neznamená, že v nich půjdu na ples nebo do divadla.

To, že Go nemá generika, není proto, protože nemít je je fajn. Každý by je chtěl. But, there ain't no such thing as a free lunch. A autoři psali, že nenašli způsob (u první verze), jak je implementovat, aniž by to vážně poškodilo ty priority, které považovali za rozhodující. Tak je raději neimplementovali vůbec (třeba právě kvůli kompatibility). Časem se ukázalo, že lidé chtějí používat Go i tam, kde ty generika jsou hodně potřeba. A tak se autoři (po 10 letech) rozhodli, že zkusí najít cestu, jak je doplnit. Tak, aby to pokud možno nenarušilo a nerozbilo dosavadní základnu. A jen tak mimochodem dodávám, že explicitně zmiňují: "We want to learn from and avoid the problems that generics have caused for C++ and in Java."

Mimochodem, to Overview velice pěkně a komplexně shrnuje implementaci generik v mnoha jazycích, včetně porovnání i návrhy, které zvažovali v Go. Poučné čtení.

.

Re:Proč ten hype okolo Go?
« Odpověď #145 kdy: 30. 08. 2018, 01:35:23 »

Chybový stav je obvykle nějaké číslo, zatímco výjimka má svou třídu, textový popis a případně ještě kód chyby. Výjimka tedy obsahuje celý potřebný kontext a když se nechá správně propadnout, tak se kompletně vytrasuje.
Tohle platí pro C, ne ale pro Go. Chyba tam má všechny tyto vlastnosti, které popisuješ.


Jak si mám představit "Chci otevřít soubor, který mezi tím někdo smazal"? Pro mne je to pouhé "Chci otevřít soubor, který neexistuje" - vyhodí to výjimku. Dělení nulou? - výjimka. Index mimo meze - výjimka. Chybové stavy pro mne přestaly existovat - nepoužívám je, protože jsou málo popisné. Když neošetřím chybový stav, tak se mi proces vysype o kus dál. Když neošetřím výjimku, tak mi propadne až do záchytu nebo ukončí proces. Výjimky jsou tedy spolehlivější.

Výjimka by však měla být výjimkou. Nelze ji tedy zneužívat k řízení běhu programu, ale jen tam, kde za běhu došlo k chybě. Výjimky s laděním nijak nesouvisí.
Ono to zbožštění výjimek má své meze. Asi bych to nepopsal lépe, tak dám jen odkaz. V něm je podstatná jedna informace. Ošetřit správně explicitní chybové stavy je težké. Ošetřit správně výjimky je velice těžké.
https://blogs.msdn.microsoft.com/oldnewthing/20050114-00/?p=36693

A opět nezbývá než zopakovat, "there ain't ...".

Kit

Re:Proč ten hype okolo Go?
« Odpověď #146 kdy: 30. 08. 2018, 02:04:32 »
Tohle platí pro C, ne ale pro Go. Chyba tam má všechny tyto vlastnosti, které popisuješ.

Chyba v Go je normálním objektem, se kterým se dá pracovat jako s výjimkou. Neoznačoval bych to jako chybový stav, protože když k chybě nedojde, vrátí null. Je to na mnohem vyšším levelu než v C, kde se při chybě obvykle vrací returnem nějaké záporné číslo.

Ono to zbožštění výjimek má své meze. Asi bych to nepopsal lépe, tak dám jen odkaz. V něm je podstatná jedna informace. Ošetřit správně explicitní chybové stavy je težké. Ošetřit správně výjimky je velice těžké.
https://blogs.msdn.microsoft.com/oldnewthing/20050114-00/?p=36693

A opět nezbývá než zopakovat, "there ain't ...".

Ten článek je zcestný - psal ho někdo, kdo objektově neprogramuje. To je také důvod, proč mu výjimky nevyhovují. Není tam uvedena žádná ukázka správně napsaného kódu.

Kiwi

Re:Proč ten hype okolo Go?
« Odpověď #147 kdy: 30. 08. 2018, 11:17:51 »
Je to přesně obráceně, než jak to píšeš. Chybový stav je obvykle nějaké číslo, zatímco výjimka má svou třídu, textový popis a případně ještě kód chyby. Výjimka tedy obsahuje celý potřebný kontext a když se nechá správně propadnout, tak se kompletně vytrasuje.

Jak si mám představit "Chci otevřít soubor, který mezi tím někdo smazal"? Pro mne je to pouhé "Chci otevřít soubor, který neexistuje" - vyhodí to výjimku. Dělení nulou? - výjimka. Index mimo meze - výjimka. Chybové stavy pro mne přestaly existovat - nepoužívám je, protože jsou málo popisné. Když neošetřím chybový stav, tak se mi proces vysype o kus dál. Když neošetřím výjimku, tak mi propadne až do záchytu nebo ukončí proces. Výjimky jsou tedy spolehlivější.

Výjimka by však měla být výjimkou. Nelze ji tedy zneužívat k řízení běhu programu, ale jen tam, kde za běhu došlo k chybě. Výjimky s laděním nijak nesouvisí.
Pro mě otevření souboru, který neexistuje, není žádná výjimka. Je to normální situace jako každá jiná, není tedy důvod na ni reagovat nějakým jiným mechanismem. Dělení nulou? Buď je to bug v mém programu, nebo opět normální situace - to když tu nulu nějak zadal uživatel. Index mimo meze dtto.

Kontextem mám na mysli lexikální kontext - a ten předáním nějakého objektu prostě neobnovíš. Co je mi platné, že mám kompletní informace o výjimce, když z daného místa se na ni efektivně nedá reagovat jinak, než vyhodit to do nějakého logu a případně se zhroutit? Nebo mám do výjimkového objektu nacpat i reference na vše, čeho se ta výjimka týká, tím si ten lexikální kontext totálně rozbít a zamotat do toho ještě kontext dynamický - podle toho, zda dojde k výjimce? No děkuju pěkně!

Ten článek je zcestný - psal ho někdo, kdo objektově neprogramuje. To je také důvod, proč mu výjimky nevyhovují. Není tam uvedena žádná ukázka správně napsaného kódu.
Tak ukaž příklad nějakého správně napsaného kódu. Když jsem sem postnul jiný článek, reagoval jsi stejně - špatné použití výjimek. A jak je to tedy správně?

.

Re:Proč ten hype okolo Go?
« Odpověď #148 kdy: 30. 08. 2018, 11:22:24 »
Ten článek je zcestný - psal ho někdo, kdo objektově neprogramuje. To je také důvod, proč mu výjimky nevyhovují. Není tam uvedena žádná ukázka správně napsaného kódu.
Sebevědomí sahající do stratosféry je tady koukám běžný jev. Za to pokora je sprosté slovo.

Bacsa

Re:Proč ten hype okolo Go?
« Odpověď #149 kdy: 30. 08. 2018, 11:33:46 »
Ten článek je zcestný - psal ho někdo, kdo objektově neprogramuje. To je také důvod, proč mu výjimky nevyhovují. Není tam uvedena žádná ukázka správně napsaného kódu.
Sebevědomí sahající do stratosféry je tady koukám běžný jev. Za to pokora je sprosté slovo.
One of the painful things about our time is that those who feel certainty are stupid, and those with any imagination and understanding are filled with doubt and indecision. (Russell)