Proč je Go tak pomalý?

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Proč je Go tak pomalý?
« Odpověď #60 kdy: 02. 05. 2017, 12:09:01 »
Je prča sledovat, jak lidi vítězoslavně přicházejí na dávno známé věci. Ale proč číst počítačovou literaturu ze 70. a 80. let, že... To je přece doba kamenná.
Co konkrétně máš namysli tady u toho, o čem jsme se bavili? To je spíš o zkušenosti než o nějaké teorii imho.

Běžný Pepa (nebo Míra)
Já ti dám Míru, ty darebáku! ;)
  :P


Kiwi

Re:Proč je Go tak pomalý?
« Odpověď #61 kdy: 02. 05. 2017, 12:32:19 »
Je prča sledovat, jak lidi vítězoslavně přicházejí na dávno známé věci. Ale proč číst počítačovou literaturu ze 70. a 80. let, že... To je přece doba kamenná.
Běžný Pepa (nebo Míra) programátor nečte akademické články, a možná to je dobře, rozvoj a inovace by se měly přenechat těm kreativnějším (ne nutně akademikům).
Vůbec nejde o akademické články. Akademickým článkům té doby by běžný Pepa kodér vůbec nerozuměl. Jde o texty praktiků, kteří popisovali své zkušenosti a často i řešení problémů, s nimiž se setkali.
Např. zmiňovaný postřeh o nepředvídatelnosti budoucího vývoje SW produktu. Tak na to naráželi už v 70. letech. A řekl bych, že většina z nás se už někdy setkala s poznámkami "reserved for future extensions". A taky tenkrát doporučili, jak se s tím vypořádávat:
1. Řešte jen problém, který máte skutečně řešit dle zadání. Dejte si pozor na dodatečné podmínky, které ve skutečnosti ze zadání neplynou, ale vy jste si je podvědomě dotvořili ve snaze předvídat budoucí vývoj nebo řešení nějak vylepšit, a přitom vedou k potřebě větší abstrakce a komplexity.
2. Pokud obecnější řešení v daném případě nevede k nárůstu komplexity nebo náročnosti na zdroje, není důvodu omezovat se na specifikaci.

Zdůvodnění je jednoduché. V naprosté většině případů o ta vylepšení nikdo nestojí a vývoj se bude ubírat jiným směrem než si myslíte, ale jejich přítomnost velmi zkomplikuje budoucí modifikace směrem, s nímž se nepočítalo. Jednoduchá věc se dá překopat snadněji než komplikovaná.
Vyčleníte-li někde 4 bajty pro budoucí rozšíření vlastnosti X, 4 bajty pro vlastnost Y a 4 bajty pro vlastnost Z, vemte jed na to, že jich nakonec bude zapotřebí nejméně 5 pro vlastnost X a vyvstane potřeba přidat vlastnost W, co potřebuje 2 bajty, a vlastnost Y už nikdo nepotřebuje, protože děrné pásky odnesl čas. Přestože prostor k obojímu je, technicky to bude hlavolam, protože někdo před lety "myslel" víc, než bylo zdrávo. Je to jen ilustrační příklad, ale na podobné situace jsem ve svém profesionálním životě narážel neustále - komplikované hierarchie tříd, zabránění opakování stejného kódu i za cenu, že se to celé znepřehlední zbytečnými abstraktními mezičlánky a lepidly mezi nimi, jež vydají za 5x tolik kódu, než kdyby se to prostě duplikovalo apod., načež se potom ukáže, že přeci jen ten kód nebude úplně stejný, takže struktury, jež měly zamezit duplikaci kódu, se musejí obcházet a nastavovat jak kaše, protože tím okamžikem ztrácejí smysl, ale zato vydatně překážejí.
Přestože formulace je jednoduchá, realizace je náročná, protože ne každý si umí ty klapky z očí sundat a má cit pro to, co ještě ano a co už ne. Ale rozhodně by přemýšlení o takovýchto věcech měl být dáván větší prostor, než jak nejčistěji aplikovat návrhový vzor XYZ, protože jsem podlehl pocitu, že jde o zázračný všelék, který za mě vyřeší problémy. V knížce to sice vypadá elegantně, možná se to i v konkrétním případě podaří implementovat elegantně, ale jakmile bude třeba do toho trošku hrábnout, stane se z toho podobný zážitek, jako oprava traktoru typu LKT.

x14

  • ***
  • 182
    • Zobrazit profil
    • E-mail
Re:Proč je Go tak pomalý?
« Odpověď #62 kdy: 02. 05. 2017, 12:36:49 »
Lidi! Co to proboha hulíte?  :D :D :D

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Proč je Go tak pomalý?
« Odpověď #63 kdy: 02. 05. 2017, 13:05:19 »
Je prča sledovat, jak lidi vítězoslavně přicházejí na dávno známé věci. Ale proč číst počítačovou literaturu ze 70. a 80. let, že... To je přece doba kamenná.
Běžný Pepa (nebo Míra) programátor nečte akademické články, a možná to je dobře, rozvoj a inovace by se měly přenechat těm kreativnějším (ne nutně akademikům).
Vůbec nejde o akademické články. Akademickým článkům té doby by běžný Pepa kodér vůbec nerozuměl. Jde o texty praktiků, kteří popisovali své zkušenosti a často i řešení problémů, s nimiž se setkali.
Např. zmiňovaný postřeh o nepředvídatelnosti budoucího vývoje SW produktu. Tak na to naráželi už v 70. letech. A řekl bych, že většina z nás se už někdy setkala s poznámkami "reserved for future extensions". A taky tenkrát doporučili, jak se s tím vypořádávat:
1. Řešte jen problém, který máte skutečně řešit dle zadání. Dejte si pozor na dodatečné podmínky, které ve skutečnosti ze zadání neplynou, ale vy jste si je podvědomě dotvořili ve snaze předvídat budoucí vývoj nebo řešení nějak vylepšit, a přitom vedou k potřebě větší abstrakce a komplexity.
2. Pokud obecnější řešení v daném případě nevede k nárůstu komplexity nebo náročnosti na zdroje, není důvodu omezovat se na specifikaci.

Zdůvodnění je jednoduché. V naprosté většině případů o ta vylepšení nikdo nestojí a vývoj se bude ubírat jiným směrem než si myslíte, ale jejich přítomnost velmi zkomplikuje budoucí modifikace směrem, s nímž se nepočítalo. Jednoduchá věc se dá překopat snadněji než komplikovaná.
Vyčleníte-li někde 4 bajty pro budoucí rozšíření vlastnosti X, 4 bajty pro vlastnost Y a 4 bajty pro vlastnost Z, vemte jed na to, že jich nakonec bude zapotřebí nejméně 5 pro vlastnost X a vyvstane potřeba přidat vlastnost W, co potřebuje 2 bajty, a vlastnost Y už nikdo nepotřebuje, protože děrné pásky odnesl čas. Přestože prostor k obojímu je, technicky to bude hlavolam, protože někdo před lety "myslel" víc, než bylo zdrávo. Je to jen ilustrační příklad, ale na podobné situace jsem ve svém profesionálním životě narážel neustále - komplikované hierarchie tříd, zabránění opakování stejného kódu i za cenu, že se to celé znepřehlední zbytečnými abstraktními mezičlánky a lepidly mezi nimi, jež vydají za 5x tolik kódu, než kdyby se to prostě duplikovalo apod., načež se potom ukáže, že přeci jen ten kód nebude úplně stejný, takže struktury, jež měly zamezit duplikaci kódu, se musejí obcházet a nastavovat jak kaše, protože tím okamžikem ztrácejí smysl, ale zato vydatně překážejí.
Přestože formulace je jednoduchá, realizace je náročná, protože ne každý si umí ty klapky z očí sundat a má cit pro to, co ještě ano a co už ne. Ale rozhodně by přemýšlení o takovýchto věcech měl být dáván větší prostor, než jak nejčistěji aplikovat návrhový vzor XYZ, protože jsem podlehl pocitu, že jde o zázračný všelék, který za mě vyřeší problémy. V knížce to sice vypadá elegantně, možná se to i v konkrétním případě podaří implementovat elegantně, ale jakmile bude třeba do toho trošku hrábnout, stane se z toho podobný zážitek, jako oprava traktoru typu LKT.
Nemohu než (opět) souhlasit, že návrhové vzory nejdou všelék a mnohdy nadělají víc škody než užitku. Jako i jinde mimo IT obecně platí "tonoucí (nekompetentní programátor) se stébla chytá" (a navíc se pak do krve hádá o něčem, čemu ani trošku nerozumí). Jenže s tím nic nenaděláme...

UF

Re:Proč je Go tak pomalý?
« Odpověď #64 kdy: 02. 05. 2017, 14:26:24 »
Lidi! Co to proboha hulíte?  :D :D :D

Fluid karma -  Look, green you dream. Blue, in an hour you feel new. And you can forget all about mellow yellow and ancient orange, cause hey, I'm giving you blood red. Do you bleed? I said, do you bleed?  Well, then you take the Blood train. You talk to God without seeing Him. You hear His voice and you see His disciples. They appear like... like angels under a sea of black umbrellas. Angels who can see through time.


Dushino421

Re:Proč je Go tak pomalý?
« Odpověď #65 kdy: 02. 05. 2017, 16:42:13 »
Zatím zde napadla pro tazatele krutá pravda: go je pomalý, protože je genderově vyvážený.

Prolítněte jak go prezentovali v ranné fázi a co bylo cílem, já si to pamatuji dost dobře.

Původně to vycházelo z Plan-9, tedy měl to být jazyk pro multiprocesorový distribuovaný systém.
A je to tady zase! Plan-9? Uz je cas? https://forum.root.cz/index.php?topic=12377.0

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Proč je Go tak pomalý?
« Odpověď #66 kdy: 02. 05. 2017, 16:52:51 »
Zatím zde napadla pro tazatele krutá pravda: go je pomalý, protože je genderově vyvážený.

Prolítněte jak go prezentovali v ranné fázi a co bylo cílem, já si to pamatuji dost dobře.

Původně to vycházelo z Plan-9, tedy měl to být jazyk pro multiprocesorový distribuovaný systém.
Ano, a doteď tím trpíme - překladače se chovají divně (mají svou verzi C), asembler je taky proprietární, vše má své ABI (volání mezi Go a C musí přesypávat zásobník do registrů a vice versa), zarovnávat a přehazovat zásobník, halda není halda atd. Jinak ale naprostá pohoda...

Dushino421

Re:Proč je Go tak pomalý?
« Odpověď #67 kdy: 02. 05. 2017, 17:09:08 »
Zatím zde napadla pro tazatele krutá pravda: go je pomalý, protože je genderově vyvážený.

Prolítněte jak go prezentovali v ranné fázi a co bylo cílem, já si to pamatuji dost dobře.

Původně to vycházelo z Plan-9, tedy měl to být jazyk pro multiprocesorový distribuovaný systém.
Ano, a doteď tím trpíme - překladače se chovají divně (mají svou verzi C), asembler je taky proprietární, vše má své ABI (volání mezi Go a C musí přesypávat zásobník do registrů a vice versa), zarovnávat a přehazovat zásobník, halda není halda atd. Jinak ale naprostá pohoda...
Ale to je v poradku, ne? Vsak Java byla take vymyslena a designovana do mixeru a pracek a dnes ji sotva utahne nadupany server. ;)

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:Proč je Go tak pomalý?
« Odpověď #68 kdy: 03. 05. 2017, 07:33:36 »
...
Ale to je v poradku, ne? Vsak Java byla take vymyslena a designovana do mixeru a pracek a dnes ji sotva utahne nadupany server. ;)

To zijete asi v jinem svete, protoze ja ctu, ze se to pouziva i ve vecech jako RaspberryPi nebo IoT a ty maji k nadupanym servrum hoodne daleko.

Dushino421

Re:Proč je Go tak pomalý?
« Odpověď #69 kdy: 03. 05. 2017, 07:43:50 »
...
Ale to je v poradku, ne? Vsak Java byla take vymyslena a designovana do mixeru a pracek a dnes ji sotva utahne nadupany server. ;)

To zijete asi v jinem svete, protoze ja ctu, ze se to pouziva i ve vecech jako RaspberryPi nebo IoT a ty maji k nadupanym servrum hoodne daleko.
To byla ironie. Timto podivnym prispevkem jsem se opet vratil k puvodni otazce, proc je Go pomale. Omlouvam se, ze to nebylo pochopitelne i bez zapnuti hlavy. ;) Kdyby ne: Protoze se Go pouziva i na nenadupanych serverech, resime tady, proc je pomale. Takovy forek. A zaroven snaha o navrat k puvodni otazce.
Tak snad uz to pochopili vsichni.

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:Proč je Go tak pomalý?
« Odpověď #70 kdy: 03. 05. 2017, 07:48:37 »
To se omlouvam. Jsem uz zvykly na to, ze do Javy (JVM) si vsichni kopou, jak je hrozne pomala, takze na mou obranu - rozlisit ironii a trolovani ohledne Javy neni lehke. (Na rootu spis cekam trolovani :D :'(.)

UF

Re:Proč je Go tak pomalý?
« Odpověď #71 kdy: 03. 05. 2017, 08:48:11 »
To se omlouvam. Jsem uz zvykly na to, ze do Javy (JVM) si vsichni kopou, jak je hrozne pomala, takze na mou obranu - rozlisit ironii a trolovani ohledne Javy neni lehke. (Na rootu spis cekam trolovani :D :'(.)

... tak java jako je obecne dost pomala navic ten jazyk je hroznej ...


:}

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Proč je Go tak pomalý?
« Odpověď #72 kdy: 18. 05. 2017, 20:49:25 »
Zatím zde napadla pro tazatele krutá pravda: go je pomalý, protože je genderově vyvážený.

Prolítněte jak go prezentovali v ranné fázi a co bylo cílem, já si to pamatuji dost dobře.

Původně to vycházelo z Plan-9, tedy měl to být jazyk pro multiprocesorový distribuovaný systém.
Ano, a doteď tím trpíme - překladače se chovají divně (mají svou verzi C), asembler je taky proprietární, vše má své ABI (volání mezi Go a C musí přesypávat zásobník do registrů a vice versa), zarovnávat a přehazovat zásobník, halda není halda atd. Jinak ale naprostá pohoda...
Ale to je v poradku, ne? Vsak Java byla take vymyslena a designovana do mixeru a pracek a dnes ji sotva utahne nadupany server. ;)
Až bude Java použitelná i na Arduinu, tak se stane skutečným jazykem  ;)

.

Re:Proč je Go tak pomalý?
« Odpověď #73 kdy: 18. 05. 2017, 22:14:42 »
To se omlouvam. Jsem uz zvykly na to, ze do Javy (JVM) si vsichni kopou, jak je hrozne pomala, takze na mou obranu - rozlisit ironii a trolovani ohledne Javy neni lehke. (Na rootu spis cekam trolovani :D :'(.)

... tak java jako je obecne dost pomala navic ten jazyk je hroznej ...

:}

Java má být jako pomalá na co? Mám zkušenost, že když jsem reimplementoval jednu funkcionalitu z IntelliJ IDE pro Javu, tak jsem dosáhl cca 1000x většího výkonu. Java není pomalá, jen se v ní píšou někdy pomalé aplikace - a možná i záměrně, prostě se to naprototypuje a pak se to nechá být, protože to výkonově stačí. Další věc jazyk samotný. Java je prostě jednoduchý jazyk, neobsahuje nějaké složité konstrukce. Podívej se někdy na bytecode. Dělal jsem nad ním jednu knihovnu a byla to jedna radost. Navíc Java má něco, co C++ nebo Go nikdy mít nebudou, jako např. Hot Swap - za běhu aplikace v debug režimu aktualizuješ zdrojový kód jejich části v JVM, tzn. nemusíš restartovat. Je to výhodné pro vývoj. Bohužel některé frameworky (Spring) tuto funkcionalitu nectí a dělají masivní inicializace bez možnosti aktualizace za běhu aplikace.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Proč je Go tak pomalý?
« Odpověď #74 kdy: 18. 05. 2017, 23:20:56 »
To se omlouvam. Jsem uz zvykly na to, ze do Javy (JVM) si vsichni kopou, jak je hrozne pomala, takze na mou obranu - rozlisit ironii a trolovani ohledne Javy neni lehke. (Na rootu spis cekam trolovani :D :'(.)

... tak java jako je obecne dost pomala navic ten jazyk je hroznej ...

:}

Java má být jako pomalá na co? Mám zkušenost, že když jsem reimplementoval jednu funkcionalitu z IntelliJ IDE pro Javu, tak jsem dosáhl cca 1000x většího výkonu. Java není pomalá, jen se v ní píšou někdy pomalé aplikace - a možná i záměrně, prostě se to naprototypuje a pak se to nechá být, protože to výkonově stačí. Další věc jazyk samotný. Java je prostě jednoduchý jazyk, neobsahuje nějaké složité konstrukce. Podívej se někdy na bytecode. Dělal jsem nad ním jednu knihovnu a byla to jedna radost. Navíc Java má něco, co C++ nebo Go nikdy mít nebudou, jako např. Hot Swap - za běhu aplikace v debug režimu aktualizuješ zdrojový kód jejich části v JVM, tzn. nemusíš restartovat. Je to výhodné pro vývoj. Bohužel některé frameworky (Spring) tuto funkcionalitu nectí a dělají masivní inicializace bez možnosti aktualizace za běhu aplikace.
V Go jde taky aktualizovat bez restartu (tuším od verze 1.7).